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