Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Команды сравнения строк
| | 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.
| | | | | | | | | | | | | | | | | | | | |
|