Команды сравнения строк
REP REPE REPNEREPZ REPNZ | Повторять Повторять, пока равно. Повторять, пока не равно. Повторять, пока ноль. Повторять, пока не ноль. | Префиксы повторений для строковых команд. Количество повторений в регистре СХ (ЕСХ). При каждом выполнении команды СХ(ЕСХ) уменьшается на 1. | ||||||||||||
CMPS пр.,ист. | Сравнить строки : Вычитает из источни-ка – приемник. [DS:(E)SI]-[ES:(E)DI] IF DF= 1 (E)DI:= (E)DI-1,(2),(4) (E)SI:= (E)SI- 1,(2),(4) | * | -- | -- | -- | * | * | * | * | * | ||||
CLD; Установить флаг DF в 0. Mov cx,100 ; Установить счетчик цикла на 100. Repe Cmps tab1,tab2 ;Сравнивать 100 элементов до нахождения несовпадающих. | ||||||||||||||
CMPSВ | Сравнить строки байтов. [DS:(E)SI]-[ES:(E)DI] IF DF= 0 (E)DI:= (E)DI+1 (E)SI:= (E)SI +1 | * | -- | -- | -- | * | * | * | * | * | ||||
STD ; Установить флаг DF в 1. Mov cx,100 ; Установить счетчик цикла на 100. Repne Cmpsb tab1,tab2 ;Сравнивать 100 байтов до нахождения совпадающих. | ||||||||||||||
CMPSW | Сравнить строки слов. [DS:(E)SI]-[ES:(E)DI] IF DF:= 0 (E)DI:= (E)DI+ 2 (E)SI:= (E)SI+ 2 IF DF:= 1 (E)DI:= (E)DI- 2 (E)SI:= (E)SI- 2 | * | -- | -- | -- | * | * | * | * | * | ||||
STD; Установить флаг DF в 1. Mov cx,100 ; Установить счетчик цикла на 100. Repne Cmpsw tab1,tab2 ;Сравнивать 100 слов, до нахождения совпадающих. Je m1; При совпадении, передать управление в m1. | ||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||
CMPSD | Сравнить строки двойных слов. [DS:(E)SI]-[ES:(E)DI] IF DF:= 0 (E)DI:= (E)DI+ 4 (E)SI:= (E)SI+ 4 IF DF:= 1 (E)DI:= (E)DI- 4 (E)SI:= (E)SI- 4 | * | -- | -- | -- | * | * | * | * | * | ||||
CLD; Установить флаг DF в 0. Mov cx,100 ; Установить счетчик цикла на 100. Repne Cmpsd tab1,tab2 ;Сравнивать 100 двойных слов, до нахождения совпадающих. Je m1; Передать управление в m1 ,при совпадении. | ||||||||||||||
3.4.7.2 Команды пересылки строк | ||||||||||||||
MOVS Пр.,ист. | Пересылать строковые данные Пр:= ист [ES:DI]:= [DS:SI] СХ:= СХ-1 | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||
CLD; Установить DF = 0. Lea SI,tabist;Адрес источника в SI, Lea DI,ES:tabpr; а приемника в DI. Mov CX,100;Кол. элементов в СХ Rep Movs tabpr,tabist;Переслать 100 Элементов. | ||||||||||||||
MOVSB | Переслать строку байтов. [ES:DI]:= [DS:SI] IF DF := 0 DI := DI+ 1 SI := SI+ 1 IF DF:= 1 DI := DI- 1 SI := SI- 1 | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||
CLD; Установить DF = 0. Lea SI,tabist;Адрес источника в SI, Lea DI,ES:tabpr; а приемника в DI. Mov CX,100;Кол. элементов в СХ Rep Movs tabpr,tabist;Переслать 100 Байтов. | ||||||||||||||
MOVSW | Пересылать строку слов [ES:DI] := [DS:SI] IF DF:= 0 DI := DI+ 2 SI := SI+ 2 IF DF:= 1 DI := DI- 2 SI := SI- 2 | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||
CLD; Установить DF = 0. Lea SI,tabist;Адрес источника в SI, Lea DI,ES:tabpr; а приемника в DI. Mov CX,100;Кол. элементов в СХ Rep Movs tabpr,tabist;Переслать 100 слов. | ||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||
MOVSD | Пересылать строку двойных слов. ES:(E)SI:=DS:(E)DI IF DF:= 0 (E)DI:= (E)DI+ 4 (E)SI := (E)SI+ 4 IF DF:= 1 (E)DI:= (E)DI- 4 (E)SI:= (E)SI- 4 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||
CLD; Установить DF = 0. Lea SI,tabist;Адрес источника в SI, Lea DI,ES:tabpr; а приемника в DI. Mov CX,100;Кол. элементов в СХ Rep Movs tabpr,tabist;Переслать 100 двойных слов. | |||||||||||||
3.4.7.3 Операции со строками символов | |||||||||||||
LODSист. | Чтение из строки. AL, (AX),(EAX) := DS: (E)SI IF DF = 0 SI := SI +1,(2),(4) IF DF =1 SI := SI-1,(2),(4) | -- | * | -- | -- | -- | -- | -- | -- | -- | |||
Lea SI,tab1;Смещение tab1 в SI, а Lea DI,ES:tab2; смещение tab2 в DI. Mov CX,200; Счетчик элементов. Repe Cmps tab1,tab2; Искать совпадающие. Je met1;Совпали? Переход на met1. met1: Dec SI; Подправим регистр SI. Lods tab1; Элемент в AL,(AX),(EAX). | |||||||||||||
LODSB | Чтение байта из строки. AL:= [ DS: (E)SI ] IF DF= 0 (E)DI:= (E)SI+1 IF DF= 1 (E)SI:= (E)SI-1 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||
Lea SI,tab1;Смещение tab1 в SI, а Lea DI,ES:tab2; смещение tab2 в DI. Mov CX,200; Счетчик элементов. Repe Cmpsb; Искать совпадающие. Je met1;Совпали? Переход на met1. met1: Dec SI; Подправим регистр SI. Lodsb; Элемент в AL. | |||||||||||||
LODSW | Чтение слова из строки. AX:= [ DS: (E)SI ] IF DF= 0 (E)DI:= (E)SI+2 IF DF= 1 (E)SI:= (E)SI-2 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||
Lea SI,tab1;Смещение (относитель- ный адрес) tab1 переслать в SI, Lea DI,ES:tab2; а смещение tab2 в Регистр DI. Mov CX,200; В СХ количество проверяемых элементов. Repe Cmpsw; Искать совпадающие. Je met1;Совпали? Переход на met1. met1: Mov SI,SI-2; Коррекция SI. Lodsw;Элемент в AX. | |||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||||||||||||
LODSD | Чтение двойного слова из строки. EAX:= [ DS: (E)SI ] IF DF= 0 (E)DI:= (E)SI+4 IF DF= 1 (E)SI:= (E)SI-4 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Lea SI,tab1;Смещение tab1 в SI, а Lea DI,ES:tab2; смещение tab2 в DI. Mov CX,200; Счетчик элементов. Repe Cmpsd; Искать совпадающие. Je met1;Совпали? Переход на met1. met1: Mov SI,SI-4; Подправим SI. Lodsd; Элемент в EAX. | |||||||||||||||||||||||||||||
STOSпр | Запись в строку. ES:(E)DI := AL(AX)(EAX) IF DF = 0 (E)DI := (E)DI+1(2)(4) IF DF =1 (E)DI:=(E)DI-1(2)(4) | -- | * | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Lea DI,ES:tab; Адрес строки в DI. Mov AX,0101Н; Число в АХ. Mov CX,10; Установить счетчик. REP STOS tab;Записать в tab 10 слов. Mov CX,10; Установить счетчик. Mov AX,1256; Число в АХ. REP STOS tab;Записать в tab 10 слов. | |||||||||||||||||||||||||||||
STOSB | Запись байта в строку ЕS: (E)DI:= AL IF DF= 0 (E)DI:= (E)DI+ 1 IF DF= 1 (E)DI:= (E)DI- 1 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Lea DI,ES:tab; Адрес строки в DI. Mov AL,01Н; Число в АL. Mov CX,10; Установить счетчик. REP STOSB tab;Записать в tab 10 байт. | |||||||||||||||||||||||||||||
STOSW | Запись слова в строку ES: (E)DI := AX IF DF= 0 (E)DI:= (E)SI+ 2 IF DF= 1 (E)DI:= (E)DI- 2 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Lea DI,ES:tab; Адрес строки в DI. Mov AX,0125Н; Число в АX. Mov CX,10; Установить счетчик. REP STOSW;Записать в tab 10 слов. | |||||||||||||||||||||||||||||
STOSD | Запись двойного слова в строку. ES: (E)DI := EAX IF DF= 0 (E)DI:= (E)DI+ 4 IF DF= 1 (E)DI:= (E)DI- 4 | -- | * | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Lea DI,ES:tab; Адрес строки в DI. Mov EAX,012567Н; Число в EАX. Mov CX,10; Установить счетчик. REP STOSD;Записать в таблицу tab 10 двойных слов. | |||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||
SCASпр. | Сканировать строки AL(AX)(EAX) – ES:(E)DI IF DF = 0 (E)DI := (E)DI+1(2)(4) IF DF =1 (E)DI:=(E)DI-1(2)(4) | * | * | -- | * | * | * | * | * | * |
Lea DI,ES:tab; Адрес строки в DI. Mov AX,0125Н; Искомое число в АX. Mov CX,100; Установить счетчик. REPNE SCAS tab;Сравнивать пока не найдем в tab число равное 0125Н. SUB DI,2;Поправим DI. Mov BX,DI ;Номер совпадающей ячейки в BX. | ||||||||||
SCASB | Сканировать строку байтов. AL:= ES: (E)DI IF DF= 0 (E)DI:= (E)DI+ 1 IF DF= 1 (E)DI:= (E)DI- 1 | * | * | -- | * | * | * | * | * | * |
Lea DI,ES:tab; Адрес строки в DI. Mov AL,25Н; Искомое число в АL. Mov CX,100; Установить счетчик. REPNE SCASB;Сравнивать пока не найдем в tab число равное 25Н. DEC DI;Поправим DI. Mov BX,DI ;Номер совпадающей ячейки в BX. | ||||||||||
SCASW | Сканировать строку слов. AX:= ES: (E)DI IF DF= 0 (E)DI:= (E)DI+ 2 IF DF= 1 (E)DI:= (E)DI- 2 | * | * | -- | * | * | * | * | * | * |
Lea DI,ES:tab; Адрес строки в DI. Mov AX,0125Н; Искомое число в АX. Mov CX,100; Установить счетчик. REPNE SCASW;Сравнивать пока не найдем в tab число равное 0125Н. SUB DI,2;Поправим DI. Mov BX,DI ;Номер совпадающей ячейки в BX. | ||||||||||
3.4.7 Команды управления программой | ||||||||||
3.4.7.1 Команды безусловной передачи управления | ||||||||||
JMPимя JMPLabel | Безусловный переход IP:= [ Label ] IP:= [ R/ M ] | -- | -- | -- | -- | -- | -- | -- | -- | -- |
JMP shortmet1; Короткий переход. -128или +127 байт. JMPmet2 ; Ближний переход. JMP hearmet2;Ближний переход. -32768 или 32767 байт. JMP farmet3; Дальний переход. более 65536 байт. |
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||
CALLимя | Вызов процедуры. IP:= [R,имя] [SS:SP]:= IP SP:= SP-2 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||
4F05 Callpr ; Вызов процедуры pr и 4F08 Mov ax,bx ; запись в стек адреса возврата (4F08). | |||||||||||||
RET | Возврат из процедуры . IP:= [ SS:SP ] SP:= SP+2 | -- | -- | -- | -- | -- | -- | -- | -- | -- | |||
Ret pr ;Выйти из процедуры и верну- ться в основную программу по адресу 4F08. | |||||||||||||
3.4.7.2 Команды условных переходов без учета знака операнда | |||||||||||||
JAmet1JNBEmet1 | Перейти, если: -выше -не ниже и не равно IF CF= 0 и ZF= 0. IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | |||||
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax,bx; Сравнить с числом в ВХ. Jamet1; Перейти на met1, если АХ Больше содержимого ВХ. | |||||||||||||
JAEmet2 JNB met2 JNCmet2 | Перейти, если: - выше или равно - не ниже - нет переноса. IF CF= 0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | ||||
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax,bx; Сравнить с числом в ВХ. Jaemet1; Перейти на met2, если АХ больше содержимого ВХ. | |||||||||||||
JBmet3 JNAE met3 JCmet3 | Перейти, если: - ниже - не выше и не равно - есть перенос IF CF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | ||||
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax,bx; Сравнить с числом в ВХ. Jbmet3; Перейти на met3, если АХ Меньше содержимого ВХ. | |||||||||||||
JBEmet4 JNAmet4 | Перейти, если: - ниже или равно - не выше IF CF= 1 или ZF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | |||||
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax,bx; Сравнить с числом в ВХ. Jbemet4; Перейти на met4, если АХ меньше или равно ВХ. | |||||||||||||
JE zero | Перейти, если: - равно IF ZF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | ||||
Mov ax, 25; Загрузить число 25 в АХ. Sub ax,bx; Вычесть из АХ ВХ. Je zero; Перейти на метку zero, если АХ равно ВХ. | |||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||
JNEmet5 JNZ met5 | Перейти, если: - не равно - не нуль IF ZF=0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax, 25; Загрузить число 25 в АХ. Cmp ax,bx; Сравнить с числом в ВХ. Jnemet5; Перейти на met5, если АХ не равно ВХ. | ||||||||||||||||||||||||||||
JPEmet6 | Перейти, если: -четное число единиц IF PF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax, 25; Загрузить число 25 в АХ. Mul bx; Умножить на ВХ. Jpеmet6; Перейти на met6, если в АХ Чётное число единиц. | ||||||||||||||||||||||||||||
JPOmet7 | Перейти, если: - нечетное число единиц IF PF= 0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax, 25; Загрузить число 25 в АХ. Mul bx; Умножить на ВХ. Jpоmet7; Перейти на met7, если в АХ нечётное число единиц. | ||||||||||||||||||||||||||||
3.4.7.3 Команды перехода с учетом знака операнда | ||||||||||||||||||||||||||||
JGmet1 JNLEmet1 | Перейти, если: - больше - не меньше и не равно IF ZF= 0 и SF= OF IP:= [близкая метка] | * | -- | -- | -- | * | -- | -- | -- | |||||||||||||||||||
Mov ax,7025; Загрузить число в АХ. Add ax, bx; Сложить с ВХ. Jg met1; Перейти на met1, если при сложении возник перенос. | ||||||||||||||||||||||||||||
JGEmet2 JNLmet2 | Перейти, если: - больше или равно - не меньше IF SF= OF IP:= [близкая метка] | * | -- | -- | -- | * | -- | -- | -- | -- | ||||||||||||||||||
Mov ax,7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jgemet2; Перейти на met2, если AX больше или равен BX. | ||||||||||||||||||||||||||||
JLmet3 JNGEmet3 | Перейти, если: - меньше - не больше и не равно IF SF ≠ OF IP:= [близкаяметка] | * | -- | -- | -- | * | -- | -- | -- | -- | ||||||||||||||||||
Mov ax,7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlmet3; Перейти на met3, если AX меньше BX. | ||||||||||||||||||||||||||||
JCXZмет4 | Перейти, если: - значение CX= 0 IF CX= 0 IP:= [близкаяметка] | Cmp сx, 0; СХ равен 0 ? JCXZmet4; Перейти на met, если да. | ||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||
JLEmet5 JNG met5 | Перейти, если: - меньше или равно - не больше IF ZF= 1 или SF≠ OF IP:= [близкая метка] | * | -- | -- | -- | * | -- | -- | -- | |||||||||||||||||||
Mov ax,7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlеmet5; Перейти на met5, если AX меньше BX. | ||||||||||||||||||||||||||||
JLEmet5 JNG met5 | Перейти, если: - меньше или равно - не больше IF ZF= 1 или SF≠ OF IP:= [близкая метка] | * | -- | -- | -- | * | -- | -- | -- | |||||||||||||||||||
Mov ax,7025; Загрузить число в АХ. Cmp ax, bx; Сравнить с ВХ. Jlеmet5; Перейти на met5, если AX меньше BX. | ||||||||||||||||||||||||||||
3.4.7.4 Команды переходов по флагам | ||||||||||||||||||||||||||||
JZmet1 | Перейти, если ноль ZF =1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Sub ax,bx; Вычесть из АХ ВХ. Jzmet1; Перейти, если ZF =1. | ||||||||||||||||||||||||||||
JNZmet1 | Перейти, если не ноль .ZF =0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Sub ax,bx; Вычесть из АХ ВХ. Jnzmet1; Перейти, если ZF =0. | ||||||||||||||||||||||||||||
JSmet2 | Перейти, если знак IF SF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Sub ax,bx; Вычесть из АХ ВХ. Jsmet2; Перейти, если SF =1. | ||||||||||||||||||||||||||||
JNSmet2 | Переход, если не знак IF SF= 0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Sub ax,bx; Вычесть из АХ ВХ. Jns met2; Перейти, если SF =0. | ||||||||||||||||||||||||||||
JO met3 | Переход, если переполнение IF OF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,6787H; Add ax,bx; Сложить АХ и ВХ. Jоmet3; Перейти, если ОF =1. | ||||||||||||||||||||||||||||
JNO met4 | Переход, если не переполнение IF OF= 0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,6787H; Add ax,bx; Сложить АХ и ВХ. Jnо met4; Перейти, если ОF =0. | ||||||||||||||||||||||||||||
JP mеt5 | Переход, если паритет четный. IF РF= 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,637H; Add ax,bx; Сложить АХ и ВХ. Jpmet5; Перейти, если РF =1. | ||||||||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||||||||
JC met6 | Перейти, если перенос. IF CF = 1 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,637H; Add ax,bx; Сложить АХ и ВХ. Jnpmet6; Перейти, если CF =1. | ||||||||||||||||||||||||||||
JNC met6 | Перейти, если не перенос. IF CF = 0 IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,637H; Add ax,bx; Сложить АХ и ВХ. Jnpmet6; Перейти, если CF =0. | ||||||||||||||||||||||||||||
JNP mеt5 | Переход, если паритет не четный. IF РF= IP:= [близкая метка] | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||||||||
Mov ax,637H; Add ax,bx; Сложить АХ и ВХ. Jnpmet5; Перейти, если РF | ||||||||||||||||||||||||||||
3.4.7. 4 Команды управления циклом. | ||||||||||||||||||||||||||||
LOOPmet | Управление циклом. Повторять цикл пока СХ ≠ 0; CX:=CX-1 If CX ≠ 0 then Go met. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||
Mov cx,10;Число повторений в СХ. Mov ax,45; Число в АХ. L:Add ax,bx; Сложить с ВХ. Loop L;Повторить сложение 10 раз. | ||||||||||||||||||||||||||||
LOOPE met LOOPZmet | Управление циклом. Повторять цикл пока CX ≠ 0 и ZF = 1. - пока равно, или - пока ноль CX:=CX-1 If CX ≠ 0 and ZF =1 then Go to met. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||
Mov cx,10;Число повторений в СХ. Mov ax,45; Число в АХ. L:Cmp ax,[bx]; Сравнить с содержи- мым ячейки по адресу [bx] Inc bx;Увеличить адрес на 1. Loope L;Повторить сравнение 10 раз. Dec bx;Уменьшить адрес на 1. Mov dx,bx;Адрес ячейки в DX | ||||||||||||||||||||||||||||
LOOPNE met LOOPNZmet | Управление циклом. Повторять цикл пока CX ≠ 0 и ZF = 0. - пока не равно или, - пока не ноль CX := CX - 1 If CX ≠ 0 and ZF = 0 then Go to met. | -- | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||||||||||
Mov cx,10;Число повторений в СХ. Mov ax,45; Число в АХ. L:Cmp ax,[bx]; Сравнить с содержи- мым ячейки по адресу [bx] Inc bx;Увеличить адрес на 1. Loopne L;Повторить сравнение . Dec bx;Уменьшить адрес на 1. Mov dx,bx;Адрес ячейки в DX | ||||||||||||||||||||||||||||
3.4.8 Команды условной установки байта | ||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||
SETAEпр. SETNВпр. SETNСпр. | Установить, если выше или равно, не ниже, нет переноса. IF CF= 0, пр. := 1. | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 43H; Сравнение. CF = 0. SETAЕ AL; AL устанавливается в 1. | ||||||||||||||
SETBпр. SETNAEпр SETСпр. | Установить, если ниже, не выше или равно, перенос. IF CF= 1, пр. := 1. | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 75H; Сравнение. CF = 1. SETС AL; AL устанавливается в 1. | ||||||||||||||
SETBEпр.SETNAпр. | Установить, если ниже или равно, не выше. IF CF= 1 или ZF= 1, Пр. :=1. | -- | -- | -- | -- | -- | -- | -- | ||||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 43H; Сравнение. CF = 1. SETBE AL; AL устанавливается в 1. | ||||||||||||||
SETEпр. SETZпр. | Установить, если равно, ноль. IF ZF= 1, пр. := 1. | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 54H; Сравнение. ZF = 1. SETE AL; AL устанавливается в 1. | ||||||||||||||
SETNEпр. SETNZпр. | Установить, если не равно, не нуль. IF ZF= 0, пр. := 1. | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 86H; Сравнение. ZF = 0 SETNZ AL; AL устанавливается в 1 | ||||||||||||||
SETPпр SETPEпр. | Установить, если четно, паритет чётный. IF PF= 1, пр. := 1. | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 55H;Операнд в СХ. ADD cx, 86H; SETP CL; AL устанавливается в 1. | ||||||||||||||
SETNPпр. SETPOпр. | Установить, если нечетно, паритет нечетный. IF PF= 0, пр.:= 1 | -- | -- | -- | -- | -- | -- | -- | -- | |||||
Мov cx, 54H;Операнд в СХ. ADD cx, 86H; SETNP AL; AL устанавливается в 1. | ||||||||||||||
SETA пр. SETNBEпр | Установить, если выше, не ниже и не равно IF CF= 0, ZF= 0, Пр. := 1 | -- | -- | -- | -- | -- | -- | -- | ||||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 43H; Сравнение. CF и ZF =0. SETA AL; AL устанавливается в 1. | ||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | ||||||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||||||
SETGE пр. SETNL пр. | Установить, если больше или равно, не меньше. IF SF= OF, пр.:= 1 | * | -- | -- | -- | * | -- | -- | -- | -- | ||||||||||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 32H; Сравнение. SF = OF SETGE DL; DL устанавливается в 1. | ||||||||||||||||||||||
SETL пр. SETNGE пр. | Установить, если меньше, не больше и не равно IF SF ≠ OF, пр.:= 1 | * | -- | -- | -- | * | -- | -- | -- | -- | ||||||||||||
Мov cx, 54H;Операнд для сравнения Cmp cx, 62H; Сравнение. SF ≠ OF SETL AL; AL устанавливается в 1. | ||||||||||||||||||||||
SETLE пр. SETNG пр. | Установить, если меньше или равно, не больше. IF ZF=1 или SF ≠ OF Пр.:= 1 | * | -- | -- | -- | * | -- | -- | -- | |||||||||||||
Мov cx, 62H;Операнд для сравнения Cmp cx, 62H; Сравнение. SF ≠ OF, ZF =1. SETLE AL; AL устанавливается в 1. | ||||||||||||||||||||||
SETS пр. | Установить, если отрицательно IF SF= 1, пр := 1 | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||
Мov cx, 54H;Операнд в СХ. Mov ax, 55H; Операнд в АХ. SUB cx, ax ; 54H – 55H = FFFFF. SF= 1 SETS DL; DL устанавливается в 1. | ||||||||||||||||||||||
SETNS пр. | Установить, если положительно IF SF= 0, пр := 1 | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||
Мov cx, 78H;Операнд в СХ. Mov ax, 55H; Операнд в АХ. SUB cx, ax ; 78H – 55H = 23H. SF = 0 SETNS BL; BL устанавливается в 1. | ||||||||||||||||||||||
SETO пр. | Установить, если переполнение. IF OF= 1, пр := 1 | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||
Мov cx, 308H;Операнд в СХ. Mov ax, 55H; Операнд в АХ. Mul cx, ax ; 308 55 = 101A8. OF = 1 SETO BL; BL устанавливается в 1. | ||||||||||||||||||||||
SETNO пр. | Установить, если не переполнение. IF OF= 0, пр := 1 | -- | -- | -- | -- | -- | -- | -- | -- | |||||||||||||
Мov cx, 38H;Операнд в СХ. Mov ax, 55H; Операнд в АХ. Mul cx, ax ; 38 55 = 1298Н. OF = 0 SETNO BL; BL устанавливается в 1. | ||||||||||||||||||||||
3.4.9 Операции над регистрами флагов | ||||||||||||||||||||||
LANF | Загрузить флаги в AH AH :=SF, ZF, x, AF, x, PF, x, CF | -- | -- | -- | -- | * | * | * | * | * | ||||||||||||
LANF; Загружает флаги в АН AND ah,11H; Маскирует биты AF и CF JNZ M3;Переход по “ AF = CF =1” | ||||||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||
SANF | Сохранить АН в регистре флагов. SF, ZF, х, AF, х, PF, х, CF := АН | -- | -- | -- | -- | * | * | * | * | * | |||||||||
LANF; Загружает флаги в АН OR ah,4; Установим PF =1 SANF; Восстановим флаги | |||||||||||||||||||
PUSHF PUSHFD | Копировать флаги в стэк SP : = SP-2, SS:SP := FP (Flags) SS:[(E)SP]:= EF Flags (E)SP:= SP-4 SS:[(E)SP]:= FP Flags | * | * | * | * | * | * | * | * | * | |||||||||
PUSHF ; Сохранить флаги в стэке OR SS:[SP], 800H; Установить OF =1 POPF ; Восстановить флаги. | |||||||||||||||||||
POPF POPFD | Восстановить флаги из стэка EF Flags:= SS[(E)SP] (E)SP:= SP-2 EF Flags:= SS[(E)SP] (E)SP:= SP-4 | * | * | * | * | * | * | * | * | * | |||||||||
PUSHF ; Сохранить флаги в стэке OR SS:[SP], 800H; Установить OF =1 POPF ; Восстановить флаги. | |||||||||||||||||||
STC | Установить флаг переноса CF := 1 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
STC; Флаг переноса CF устанавливается в 1. | |||||||||||||||||||
CLC | Сбросить флаг переноса CF := 0 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
CLC; Флаг переноса CF устанавливается в 0. | |||||||||||||||||||
CMC | Инвертировать флаг переноса CF := | -- | -- | -- | -- | -- | -- | -- | -- | * | |||||||||
CMC; Если CF =1, то он устанавли- вается в 0, если CF =0, то в 1. | |||||||||||||||||||
STD | Установить флаг направления DF := 1 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
Mov cx,100; Устанавливаем счетчик, STD; Устанавливаем флаг направле- ния в 1, Rep Mov Tab1,Tab2;Пересылаем 100 элементов из Tab2 в Tab. | |||||||||||||||||||
CLD | Сбросить флаг направления DF := 0 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
Mov cx,100; Устанавливаем счетчик, CLD; Сброс флага направленияв 0, Rep Mov Tab1,Tab2;Пересылаем 100 элементов из Tab2 в Tab1. | |||||||||||||||||||
Мнемокод | Описание команд | Флаги, пояснения, примеры | |||||||||||||||||
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||||||
STI | Установить флаг разрешения преры-вания IF := 1 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
STI ; Устанавливает IF в 1. | |||||||||||||||||||
CLI | Сбросить флаг разрешени я преры-вания IF := 0 | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
CLI ; Сбрасывает IF в 0. | |||||||||||||||||||
3.4.10 Программные прерывания | |||||||||||||||||||
01h INT 21H | Ввод символа с клавиатуры с эхом на дисплее: Функция DOS 01h. Вход : AH = 01H . | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
Mov ah,01h; Код функции DOS в АН Int 21h ; Копирование в стэке содержи- мого регистров IP, CS, EFLAGS и вызов программы обработки прерывания с функцией 01Н. | |||||||||||||||||||
02h INT 21H | Вывод символа на экран: функция DOS 02h. Вход : AH = 02H DL = ASCII – код символа | -- | -- | -- | -- | -- | -- | -- | -- | ||||||||||
Mov DL, 41H;ASCII– код буквы А в DL Mov AH,02H;Код функции DOS в АН Int 21h; Копирование в стэке содержи- мого регистров IP, CS, EFLAGS и вызов программы обработки прерывания с функцией 02Н. | |||||||||||||||||||
09h INT 21H | Вывод строки символов на экран: функция DOS 09h. Вход : AH : = 09H DX : = адрес выводимой строки символов. В конце строки должен быть знак $. | -- | * | -- | -- | -- | -- | -- | -- | ||||||||||
Lea DX, stroka; Адрес строки в DX Mov AH,09H;Код функции DOS в АН Int 21h;Копирование в стэке содержи- мого регистров IP, CS, EFLAGS и вызов программы обработки прерывания с функцией 09Н. | |||||||||||||||||||
4Сh INT 21Н | Завершение программы: функция DOS 4Сh. Вход : AH = 4СH | -- | -- | -- | -- | -- | -- | -- | |||||||||||
Mov AH,4CH ;Код функции DOS в АН. INT 21H ; Вызов DOS. | |||||||||||||||||||
IRET | Возврат из подпрограммы IP:= [SS:SP] CS:= [SS:SP+ 2] EF Flags:= [SS:SP+ 2] | * | * | * | * | * | * | * | * | * | |||||||||
IRET ; Восстановление состояния процессора. Восстановление из стэка значений регистров IP, CS, RFLAGS. | |||||||||||||||||||
Дата добавления: 2016-01-26; просмотров: 1021;