Иллюстрированный самоучитель по Assembler

S

386+ SCASD Сканирование строки двойных слов с целью сравнения

Команда аналогична командам МП 86 scab и scasw, но позволяет сравнивать содержимое расширенного регистра ЕАХ с двойным словом в памяти, адресуемым через регистры ES:EDI.

Пример:

;В полях данных сегмента данных, адресуемого через ES:
nums dd 156000.432666.100000.0.4567890,…
;В программном сегменте:
cld; Поиск вперед
mov DI,offset nums; ES:DI › nums
mov EAX,0; Искомое число
mov CX,10000; Максимальное число элементов
repne scasd; Поиск 0 среди чисел массива
jne no0; Искомого числа нет
isO:; Искомое число найдено

В примере в массиве чисел имеется искомое число 0 (с таким же успехом можно было искать любое другое число, например, 4567890). Команда jne выполнена не будет. После завершения сканирования управление будет передано на метку is0. Содержимое регистров в этой точке: СХ уменьшится на 4 (просмотрено 4 элемента), DI будет увеличено на 10h (4 числа по 4 байт в числе).

386+ SETcc Установка байта по условию

Команды, обозначаемые (в книгах, не в программах!) SETcc, осуществляют запись в указанный байтовый операнд 1 или 0 в зависимости от одного из 16 условий, определяемых флагами состояния. Если условие ее выполняется, команда записывает в операнд 1; если условие не выполняется – 0.В качестве операнда можно использовать байтовый регистр или 8-битовую ячейку памяти.

В составе команд процессора предусмотрены следующие команды условной установки байта:

Команда Установить 1, если Условие установки 1
seta выше CF=0 и ZF=0
setae выше или равно CF=0
setb ниже CF= I
setbe ниже или равно CF=1 или ZF=1
setc перенос CF=1
sete равно ZF=1
setg больше ZF=0 или SF=OF
setge больше или равно SF=OF
setl меньше SF не равно OF
setle меньше или равно ZF=1 или SF не равно ОР
setna не выше CF=1 или ZF=1
setnae не выше и не равно CF=1
setnb не ниже CF=0
setnbe не ниже и не равно CF=0 и ZF=0
setnc нет переноса CF=0
setne не равно ZF=0
setng не больше ZF=1 или SF не равно OF
setnge не больше и не равно SF не равно OF
setnl не меньше SF=OF
setnle не меньше и не равно ZF=0 и SF=OF
setno нет переполнения OF=0
setnp нет четности PF=0
setns знаковый бит равен О SF=0
setnz не нуль ZF=0
seto переполнение OF=1
setp есть четность PF=1
setpe сумма битов четная PF=1
setpo сумма битов нечетная PF=0
sets знаковый бит равен SF=1
setz нуль ZF= I

Команды, осуществляющие установку по условию "выше – ниже", предназначены для анализа чисел без знака; команды, осуществляющие установку по условию "больше – меньшее", предназначены для анализа чисел со знаком.

Пример 1:

cmp AX,35h
seta CH; Если AX>35h, CH=1
;Если AX<=35h, CH=0

Пример 2:

; В полях данных
flag db?
;В программном сегменте
test AX,8000h
sete flag; Если в АХ установлен бит 7,
;flag=1. Иначе flag=0
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.