
Примечания по использованным в программе командам
- из регистра общего
назначения в регистр общего назначения;
- из ячейки памяти в регистр общео назначения;
- из регистра общего назначения в ячейку памяти;
- непосредственный
операнд в регистр общего назначения;
- непосредственный операнд в ячейку памяти;
- из регистра общего назначения в сегментные регистры DS, ES
и SS;
- из сегментного регистра в регистр общего назначения;
- из сегментного регистра в ячейку памяти.
Запрещены пересылки из ячейки памяти в ячейку памяти
(для этого предусмотрена
команда MOVS), а также загрузка сегментного
регистра непосредственным значением,
которое, таким образом,
приходится загружать через регистр общего назначения:
mov AX, seg
mem ;Сегментный адрес ячейки mem
mov DS, AX ;Загрузка его в регистр DS
Нельзя также непосредственно переслать содержимое одного сегментного регистра
в другой. Такого рода операции удобно
выполнять с использованием стека:
push DS ;
pop ES ;Содержимое
DS копируется в ES
2). CMP
(сравнение)
Команда CMP выполняет вычитание второго операнда из
первого. В соответствии
с результатом вычитания
устанавливаются состояния флагов CF, PF, AF, ZF, SF и OF. Сами операнды не изменяются. Таким образом, если команду сравнения
записать в общем виде:
cmp операнд_1, операнд_2
то ее действие можно условно изобразить следующим
образом:
операнд_1 -
операнд_2 -> флаги_процессора
В качестве первого
операнда можно указывать регистр (кроме сегментного) или
ячейку памяти, в качестве
второго - регистр
(кроме сегментного), ячейку памяти или непосредственное значение, однако
не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и
представлять числа со
знаком или без знака.
Обычно вслед за командой CMP стоит одна из команд условных
переходов, анализирующих состояние
флагов процессора.
3). Команды условных переходов Jcc
Команды, обозначаемые (в книгах, не в программах!) Jcc,осуществляют переход по указанному адресу при выполнении условия, заданного мнемоникой команды. Если заданное условие не выполняется, переход не осуществляется, а выполняется команда, следующая за командой Jcc.
В составе команд
процессора предусмотрены следующие команды условных переходов:
--------–-------------------------------------------
Команда | Перейти, если | Условие перехода
--------–-------------------------------------------
ja |выше
|CF=0 и ZF=0
jae |выше или
равно |CF=0
jb |ниже
|CF=1
jbe |ниже или
равно |CF=1 и ZF=1
jc |перенос |CF=1
jcxz |CX=0
|CX=0
je |равно
|ZF=1
jg |больше |ZF=0 или SF=OF
jge |больше или
равно |SF=OF
jl |меньше |SF
не равно OF
jle |меньше или
равно |ZF=1 или SF не равно OF
jna |не выше |CF=1 или ZF=1
jnae |не выше и не
равно |CF=1
jnb |не ниже |CF=0
jnbe |не ниже и не
равно |CF=0 и ZF=0
jnc |нет переноса |CF=0
jne |не равно |ZF=0
jng |не больше |ZF=1 или SF не равно OF
jnge |не больше и
не равно |SF не равно OF
jnl |не меньше |SF=OF
jnle |не меньше и
не равно |ZF=0 и SF=OF
jn |нет
переполнения |OF=0
jnp |нет четности |PF=0
jns |знаковый бит равен 0 |SF=0
jnz |не нуль |ZF=0
jo |переполнение |OF=1
jp |есть
четность
|PF=1
jpe |сумма битов
четная |PF=1
jpo |сумма битов
нечетная |PF=0
js |знаковй бит равен 1 |SF=1
jz |нуль
|ZF=1
--------–-----------------------–-------------------