Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Сегмент стека. Ниже буду рассмотрены только две команды, использующие стек, — это команды PUSH в начале сегмента кодов
Ниже буду рассмотрены только две команды, использующие стек, — это команды PUSH в начале сегмента кодов, которые обеспечивают возврат в DOS, когда EXE-программа завершается. Естественно для этих программ требуется стек oчень малого размера. Однако, команда CALL автоматически записывает в стек относительный адрес команды, следующей непосредственно за командой CALL, и увеличивает после этого указатель вершины стека. В вызываемой процедуре команда RET использует этот адрес для возврата в вызывающую процедуру и при этом автоматически уменьшается указатель вершины стека. Таким образом, команды PUSH записывают в стек двухбайтовые адреса или другие значения. Команды POP обычно выбирают из стека записанные в него слова. Эти операции изменяют относительный адрес в регистре SP (то есть, в указатели стека) для доступа к следующему слову. Данное свойство стека требует чтобы команды RET и CALL соответствовали друг другу. Кроме того, вызванная процедура может вызвать с помощью команды CALL другую процедуру, а та в свою очередь — следующую. Стек должен иметь достаточные размеры для того, чтобы хранить все записываемые в него адреса. Как правило, стек объемом в 32 слова является достаточным. Команды PUSH, PUSHF, CALL, INT, и INTO заносят в стек адрес возврата или содержимое флагового регистра. Команды POP, POPF, RET и IRET извлекают эти aдреса или флаги из стека. При передаче управления в EXE-программу система устанавливает в регистрах следующие значения: DS и ES Адрес префикса программного сегмента — область в 256 (шест. 100) байт, которая предшествует выполняемому программному модулю в памяти. CS Адрес точки входа в программу (адрес первой выполняемой команды). IP Нуль. SS Адрес сегмента стека. Команды логических операций: AND, OR, XOR, TEST, NOT Логические операции являются важным элементом в проектировании микросхем и имеют много общего в логике программирования. Команды AND, OR, XOR и TEST — являются командами логических операций. Эти команды используются для сброса и установки бит и для арифметических операций в коде ASCII. Все эти команды обрабатывают один байт или одно слово в регистре или в памяти, и устанавливают флаги CF, OF, PF, SF, ZF. AND В случае, если оба из сравниваемых битов равны 1, то результат равен 1; во всех остальных случаях результат — 0. OR В случае, если хотя бы один из сравниваемых битов равен 1, то результат равен 1; если сравниваемые биты равны 0, то результат — 0. XOR В случае, если один из сравниваемых битов равен 0, а другой равен 1, то результат равен 1; если сравниваемые биты одинаковы (оба — 0 или оба — 1) то результат — 0. TEST Действует как AND — устанавливает флаги, но не изменяет биты.
Первый операнд в логических командах указывает на один байт или слово в регистре или в памяти и является единственным значением, которое может изменятся после выполнения команд. В следующих командах AND, OR и XOR используются одинаковые битовые значения: AND OR XOR 0101 0101 0101 0011 0011 0011 Результат: 0001 0111 0110 Для следующих несвязанных примеров, предположим, что AL содержит 1100 0101, а BH содержит 0101 1100: 1. AND AL,BH;Устанавливает в AL 0100 0100 2. OR BH,AL;Устанавливает в BH 1101 1101 3. XOR AL,AL;Устанавливает в AL 0000 0000 4. AND AL,00;Устанавливает в AL 0000 0000 5. AND AL,0FH;Устанавливает в AL 0000 0101 6. OR CL,CL;Устанавливает флаги SF и ZF Примеры 3 и 4 демонстрируют способ очистки регистра. В примере 5 обнуляются левые четыре бита регистра AL. Хотя команды сравнения CMP могут быть понятнее, можно применить команду OR для следующих целей: 1. OR CX,CX;Проверка CX на нуль JZ...;Переход, если нуль 2. OR CX,CX;Проверка знака в CX JS...;Переход, если отрицательно Команда TEST действует аналогично команде AND, но устанавливает только флаги, а операнд не изменяется. Ниже приведено несколько примеров: 1. TEST BL,11110000B;Любой из левых бит в BL JNZ...; равен единице? 2. TEST AL,00000001B;Регистр AL содержит JNZ...; нечетное значение? 3. TEST DX,OFFH;Регистр DX содержит JZ...; нулевое значение? Еще одна логическая команда NOT устанавливает обpатное значение бит в байте или в слове, в регистре или в памяти: нули становятся единицами, а единицы — нулями. В случае, если, например, pегистр AL содержит 1100 0101, то команда NOT AL изменяет это значение на 0011 1010. Флаги не меняются. Команда NOT не эквивалентна команде NEG, которая меняет значение с положительного на отрицательное и наоборот, посредством замены бит на противоположное значение и прибавления единицы. Date: 2015-05-22; view: 486; Нарушение авторских прав |