|
|||
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
|
|||
|