Хелпикс

Главная

Контакты

Случайная статья





cmps es:dest, source ; высчитывает source – dest !!!



cmps es:dest, source     ; высчитывает   source – dest !!!

Cравнение чисел со знаком. Команда CMPS (Compare String) может сравнивать два списка целых чисел со знаком. В следующем примере каждое число в массиве array1  сравнивается с соответствующими числами в массиве array2.

.data

array1 dw  3, 9, -7, 15, 10

array2 dw  3, 9, 8, 15, 10

.code

cld

       mov si, offset array1

       mov di, offset array2

       mov cx, 5

       repe cmpsw

       jl array1_smaller

       Команда SCAS (Scan String) сравнивает значения регистров AL/AX/EAX с байтом, словом или двойным словом по адресу в ES:DI (с операндом-получателем). Эти команды особенно удобны при работе с отдельными символами в длинной строке. В комбинации с префиксом repe (или rep) можно производить сканирование строки, только когда значение в регистре-аккумуляторе совпадает со значением в памяти. С префиксом repne производится сканирование до тех пор, пока значение в регистре-аккумуляторе не совпадает со значением в памяти или СХ=0.

 

Сканирование для совпадающих символов. В следующем примере строка alpha сканируется до тех пор, пока символ F не будет найден. Когда символ F будет обнаружен, регистр DI будет указывать на первый байт после этого символа и значение регистра надо декрементировать, чтобы он указывал на символ F.

.data

alpha db  'ABCDEFGH',0

.code

       mov di, seg alpha

       mov ds, di

       mov di, offset alpha ; сейчас ES:DI указывает на строку

       mov al, 'F'             ; поиск символа 'F'

       mov cx, 8              ; установили счетчик

cld                         ; направление вверх

       repne scasb         ; повторять пока не равно

       ; выход, если ZF=1 (т.е. символ найден и получили равенство АХ

; и приемника) или CX=0

jnz exit



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.