Команды условного перехода
Таблица 7.2. Окончание команд условного перехода
|
Окончание |
Значение |
Окончание |
Значение |
|
a |
выше (для беззнаковых значений) |
p |
паритет |
|
b |
ниже (для беззнаковых значений) |
pe |
паритет четный |
|
c |
перенос |
po |
паритет нечетный |
|
e |
равно |
s |
знак |
|
g |
больше (для значений со знаком) |
z |
нуль |
|
l |
меньше (для значений со знаком) |
n |
отрицание |
|
o |
переполнение |
|
|
Команды управления процессором
Группа команд управления процессором представлена в табл. 7.3. Эта группа делится на три части.
Таблица 7.3. Команды управления процессором
|
Мнемокод / Операнды |
Описание |
|
Команды флагов |
|
|
clc |
сброс флага переноса |
|
cld |
сброс флага направления |
|
cli |
сброс флага прерывания |
|
cmc |
переключение флага переноса |
|
stc |
установка флага переноса |
|
std |
установка флага направления |
|
sti |
установка флага прерывания |
|
Команды внешней синхронизации |
|
|
esc |
переключение на сопроцессор |
|
hlt |
остановка процессора |
|
lock |
блокировка шины доступа к памяти |
|
wait |
установка процессора в состояние ожидания |
|
Прочие команды |
|
|
nop |
нет операции |
Пример 7.6. Использование команды test.
test di,08h ;проверить 3-й бит
jz m1 ;если =0, то перейти на метку m1
stc ;иначе установить флаг переноса
Команды для работ со строками
Группа команд для работ со строками представлена в табл. 7.4. Эта группа делится на три части.
Таблица 7.4. Команды обработки строк
|
Мнемокод / Операнды |
Описание |
|
Команды пересылки строк |
|
|
lods источник |
загрузка строки байтов или строки слов |
|
lodsb |
загрузка строки байтов |
|
lodsw |
загрузка строки слов |
|
movs назначение, источник |
пересылка строки байтов или строки слов |
|
movsb |
пересылка строки байтов |
|
movsw |
пересылка строки слов |
|
stos назначение |
запись строки байтов или строки слов |
|
stosb |
запись строки байтов |
|
stows |
запись строки слов |
|
Команды проверки строк |
|
|
cmps назначение, источник |
сравнение строк по байтам или словам |
|
cmpsb |
сравнение строк по байтам |
|
cmpsw |
сравнение строк по словам |
|
scas назначение |
поиск байта или слова в строке |
|
scasb |
поиск байта в строке |
|
scasw |
поиск слова в строке |
|
Команды префикса повторения |
|
|
rep |
повтор |
|
repe/repz |
повтор, пока равно 0 |
|
repne/repnz |
повтор, пока не равно 0 |
Все строковые команды используют для выполнения своих функций определенные регистры. В отличие от других команд, для которых вы сами выбираете используемые регистры, строковые команды требовательнее и всегда работают с одними и теми же комбинациями регистров – ds:si и es:di – с индексными регистрами строки-источника и строки-назначения, которые определяют смещения в данных и сегментах.
При операциях с байтами происходит вычитание или добавление 1 к регистру si и/или di; при операциях со словами добавляется или вычитается 2. Флаг направления df определяет, должна ли строковая команда приводить к уменьшению или увеличению si и di. Если df=1, тогда индексы изменяются в сторону меньших адресов. Если df=0, тогда индексы изменяются в сторону более высоких адресов. Для очистки флага df применяется команда cld (см. табл. 7.3.). Использование std (см. табл. 7.3.) приводит к установке флага df и автоматическому уменьшению si и di в сторону меньших адресов.
Пример 7.7. Использование команды movsb без префикса повторения.
cld ;автоувеличение si и di
mov cx, 100 ;использование сх в качестве счетчика
Repeat: movsb ;переслать 1 байт [es:di] [ds:si]
dec cx ;счетчик цикла
jnz Repeat ;повторять цикл, пока cx<>0
Пример 7.8. Использование команды movsb с префиксом повторения rep.
cld ;автоувеличение si и di
mov cx, 100 ;использование сх в качестве счетчика
rep movsb ;переслать 100 байт [es:di] [ds:si]
