е) Декремент
DECsrc;src¬ (src) - 1
Эта команда не изменяет флажка ZF.
ж) Изменение знака
NEG src ; src ¬ 0 - (src)
з) Команды сравнения
CMP dst, src ; (dst) - (src)
по полученному результату модифицируются все флажки, но операнды не разрушаются.
и) Умножение беззнаковое
MUL src; axt : ac:= (ac) * (src)
ac – аккумулятор;
axt – расширение аккумулятора.
Если сомножители байты: AX ßAL * (src). AHявляется расширением AL .
Если сомножители слова: DX:AX ßAX * (src). DXявляется расширением AX .
к) Деление беззнаковое
DIV src ;
src – делитель; делимое находится в aс и axt. частное: остаток:
если делитель – байт, то частное AL ßAX / (src);
остаток AHßAX / (src).
если делитель – слово, то частное AXßDX.AX / (src);
остаток DXßDX.AX / (src).
а) AND dst, src ; dst:= (dst) & (src)
б) OR dst, src ; dst:= (dst) Ú (src)
в) XOR dst, src ; dst:= (dst) Å (src)
г) TEST dst, src ; dst:= (dst) Ù (src)
д) NOT src ; dst:= Ø(src)
По результату определяются флаги ZF, SF, PF.
Логические сдвиги. Выдвигаемый бит теряется, в освободившийся разряд заносится «0».
Арифметические сдвиги
SAL - АС влево |
АС влево совпадает с ЛС влево |
SAR AC вправо. Знаковый разряд не меняется, а копируется. |
Циклические. Выдвигаемый байт передается в освободившийся.
RCL - циклический сдвиг влево через перенос. |
|
RCR - циклический сдвиг вправо через перенос. |
|
ROL - циклический сдвиг влево. Выдвигаемый бит фиксируется в CF. |
|
ROR - циклический сдвиг вправо. Выдвигаемый бит фиксируется в CF. |
Сдвиг может быть на 1 бит или несколько – количество указывается в регистре CL.
При выполнении линейных фрагментов программ команды выполняются в естественном порядке, то есть одна за другой.
При появлении команды передачи управления естественный порядок нарушается и выполняется команда, которая находится в другом месте программной памяти. Сегментная организация памяти определяет наличие двух разновидностей команд передачи управления. Передача управления внутри текущего сегмента кода называется внутрисегментной – при этом изменяется только регистр EIP/IP и адрес перехода задает смещение внутри сегмента. Такая передача называется близкой и имеет тип NEAR. Передача управления за пределы текущего сегмента кода называется межсегментной – при этом необходимо модифицировать содержимое регистров CS и EIP/IP. Такая передача называется далекой и имеет тип FAR.
Рассмотрим только внутрисегментные безусловные переходы.
а) JMP <метка> ; прямой внутрисегментный переход.
15 8 |
7 0 |
КОП |
dispL |
dispL – смещение – целое со знаком в диапазоне -128..+127.
Адрес перехода определяется следующим образом:
IP = (IP) + dispL
адрес, следующий за JMP команды.
б) JMPreg/mem ; косвенный внутрисегментный переход.
Адрес перехода содержится в регистре или ячейке памяти. Он просто загружается в IP.
Jcc <метка>;
сс – код условия, который кодируется в коде операции.
Все команды условного перехода производят передачу управления в пределах текущего сегмента кода. Команды условного перехода проверяют любые отношения между знаковыми («больше-меньше») и беззнаковыми («выше-ниже») числами, а также состояние всех арифметических флажков, кроме AF..
При их выполнении проверяется некоторое условие, закодированное состояниями флажков:
Формат: |
15 8 |
7 0 |
КОП |
dispL |
Команда JCXZ позволяет проверять содержимое СХ перед циклом.
а) Loop <метка> - повторить цикл.
§ декремент счетчика циклов – CX;
§ если CX ≠ 0, то управление передается в начало цикла (IP) = (IP) + disp;
§ если CX = 0, то выполняется следующая после цикла команда.
б) LoopE / LoopZ - передача управление в начало цикла, если CX ≠ 0 и ZF = 1
в) LoopNE / LoopNZ - передача управления при CX ≠ 0, ZF = 0.
CALL <метка>;
Метка – метка той команды, с которой начинается выполнение подпрограммы.
Порядок выполнения команды:
§ включить адрес возврата в стек, т.е. адрес команды, находящийся после команды CALL;
§ загрузить начальный адрес подпрограммы в IP.
Подпрограмма содержит минимум одну команду RET – возврат из подпрограммы. Она загружает в CS:IP из стека адрес возврата.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.