mov dh, 10101100b;
and dh,0f0h;
в результате выполнения этих двухкоманд содержимое DH станет равно 10100000b.
2. OR DST, SRC;поразрядное логическое "ИЛИ".
or bx,dx;если (BX)=5F0Fh,а (DX)=7777h,то после операции
;(BX)=7F7Fh.
BX | 0101 1111 0000 1111 = 5F0F |
DX | 0111 0111 0111 0111 = 7777 |
BX (результат) | 0111 1111 0111 1111 = 7F7F |
3. XOR DST, SRC;поразрядное логическое "исключающее ИЛИ".
xor al,55h;если (AL)=5ah, то после операции (AL)=0fh.
4. NOT DST;инверсия всех битов приемника.
5. TEST DST,SRC; выполняет операцию AND над операндами, но воздействует только на флаги ине изменяет самих операндов.
6. SHR DST, CNT;логический сдвиг вправо, освобождающиеся слева биты заполняются нулем, крайнийправый бит выталкивается во флаг CF. Операнд DST может быть ячейкой памяти.
mov bl,10110010b;(CF) = x
shr bl,1;(BL) = 01011001,(CF) = 0
до сдвига | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | (CF)=X |
после сдвига | 0---> | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | ------> | (CF)=0 |
mov cl,4;
shr bl,cl;(BL) = 00000101,(CF) = 1.
7. SHL DST, CNT;логический сдвиг влево.
8. RLC DST, CNT;циклический сдвиг влево через перенос
9. RRC DST,CNT;циклический сдвиг вправо через перенос
10. ROR DST,CNT;циклический сдвиг влево
11. ROL DST,CNT;циклический сдвиг вправо
1. CALL SUBR;вызов подпрограммы с адресом SUBR;
call delay;
mov ....
2. RET; возвратиз подпрограммы к оператору следующему непосредственно за CALL, то есть вприведенном выше примере к MOV ..
3. JMP NAME;безусловный переход к команде с символическим адресом NAME.
jmp short name;переход к метке name, отстоящей не более
;чем на -128 или +127 байтов.
jmp near name;переход к метке name, отстоящей не более
;чем на 65535 байтов, в одном сегменте.
jmp name;аналогично jmp near name;
4. JA NAME или JNBENAME; условный переход, если, например, в результате сравнения CMP DST, SRCприемник по абсолютной величине больше источника, то перейти кметке name.
5. JB NAME или JNAENAME; условный переход, если, например, в результате сравнения CMP DST, SRCприемник по абсолютной величине меньше источника, то перейти кметке name (команды п4 и п5 выполняются по результатам выполнения операций над беззнаковымичислами).
6. JZ NAME или JENAME; перейти, если результат операции влияющей на флаг нуля - нулевой (переходпо "нулю").
7. JNZ NAME или JNENAME; переход по "не нулю". (команды п6 и п7 выполняются порезультатам выполнения операций над числами cо знаком).
1. LOOP NAME;эта команда неявно уменьшает (CX) на 1 и осуществляет переход к ближней метке,если (CX) не равно 0.
....
mov cx,64h;блок операторов от метки syc до loop syc
syc: ....;будет выполнен 100 раз.
....
loop syc
2. LOOPZ NAME илиLOOPE NAME кроме того осуществляет проверку ZF флага. Поэтомуцикл заканчивается по условию, когда (CX) = 0 или (ZF) = 0 или и то и другоевместе. Т.о. эта команда служит для обнаружения первого ненулевого результата.
3. LOOPNZ, LOOPNE- выход из цикла по "нулю".
....
mov cx,1000d;цикл может быть завершен раньше 1000
next: .... ;прохода,если содержимое аккумулятора
.... ;станет равным 129,т.е. равным ASCII коду
cmp al,'Б';буквы Б.
loopnz next
1. LODSB;команда lodsb загружает байт адресованный регистром SI из сегмента данных, иувеличивает SI на 1, если перед этим была введена команда CLD (очистить флагнаправления DF) и уменьшает SI на 1, если была использована команда STD(установить флаг направления).
....
.DATA
string DB 'abcdefg'
.CODE
....
cld;после выполнения этих команд в AL будет
mov si,OFFSET [string+2]; загружен ASCII код 'с'
lodsb;причем содержимое SI будет указывать на 'd'.
2. MOVSB; этакоманда перемещает один байт из ячейки памяти с адресом в регистре SI в ячейкупамяти с адресом в регистре DI и увеличивает (SI) и (DI) на 1. Значение SIможет находиться, как в сегменте данных DS, так и в дополнительном сегменте ES.Значение DI может находиться только в дополнительном сегменте ES.
....
.DATA
msg DB 'Всё O.K.'
LEN = $ - msg;LEN равно 8
.CODE
....
cld
lea si,msg;в SI адрес источника
mov ax,0b800h;начало сегмента видеопамяти
mov es,ax;поместить в дополнительный сегмент
lea di,es:(0a0h * 3);4-я строка сверху
mov cx,LEN;LEN - количество выводимых символов
rp: movsb;переслать символ в текущую позицию экрана
inc di;перешагнуть через позицию атрибута
loop rp;повторить до исчерпания (CX)
....;строка 'Всё O.K.' будет выведена в 4-ю строку
;дисплея сверху.
3. REP ;префиксповторения команды. Например окончание предыдущей программы может быть записанов виде:
....
mov cx,LEN;несмотря на то,что массив'Всё O.K.'будет
rep movsb;скопирован в область памяти B800:(A0 * 3), на
;экран дисплея будет выведено: ВёOK. Почему?
4. CMPSB;осуществляет сравнение байта строки источника c адресом (SI) и байта строкиприемника с адресом (DI): то есть производит вычитание ((SI)) - ((DI)). Непутать с командой CMP DST, SRC в которой наоборот, производится вычитаниеисточника из приемника. Команда CMPSB неявно уменьшает (CX) на 1 и увеличивает(SI) и (DI) на 1, если (DF) = 0.
5. REPZ или REPE;префикс повторения. Выполнение команды завершается, когда (CX) = 0 или (ZF) =0.
....
.DATA
src DB 'To be, or not to be'
dst DB 'To be ,or not to be'
len = $ - dst;len равно 19
.CODE
....
cld; (DF) = 0
push ds;совместить адреса
pop es;сегментов ds и es
mov cx,len;длину строки dst переслать в cx
lea di,dst;загрузить адрес(смещение) строки dst в DI
lea si,src
repe cmpsb;сравнивать побайтно
je equal;если все байты совпали, то перейти к метке
not cx;если нет - вычислить номер несовпадающих байт
add cx,len;
jmp notequal;
equal: ....
....
notequal: ....
В конце этого примера номерпервого несовпадающего байта (CX) = 5.
1. CLC; сброситьфлаг переноса (CF) = 0.
2. STC;установить флаг переноса (CF) = 1.
3. CMC;инвертировать флаг пнреноса.
4. CLD; очиститьфлаг направления (DF) = 0, в этом случае операции над строками (цепочкамибайтов) будут производиться от младшего адреса к старшему.
5. STD;установить флаг направления (DF) = 1,обработка цепочек байтов производится отстаршего адреса к младшему.
6. STI;установить флаг прерываний (IF) = 1, разрешить прерывания от внешних устройств.
7.CLI; очиститьфлаг прерываний.
8. NOP; холостаяоперация.
1. INT INUM; этакоманда вызывает программное прерывание, то есть переход к ячейке памяти садресом хранящимся в четырех байтах, начиная с адреса INUM * 4, где INUM =(0...255). Это 4-х байтовое число является указателем подпрограммы обработчикаданного прерывания, и иначе называется вектором прерывания.Таким образом первыйкилобайт памяти 256 * 4 отводится под векторы прерываний.
Операции инициируемыепрограммными прываниями определяются кодом в регистре AH, например:
....
mov ah,14d;функция вывода символа на дисплей,с последующимм
mov al,31h;продвижением курсора на одну позицию вправо.
int 10h;на экран будет выведена цифра '1'(ASCII код 31h).
....
.DATA
privet DB 'Добрый morning !','$';
.CODE
....
lea dx,privet;специальная функция регистра DX
mov ah,9;9 - функция вывода на экран дисплея
int 21h;будет выведено приветствие ....
В таблицу включены только теинструкции, которые влияют на флаги.