|
|||
если выход по ZF=1 (нашли символ), уходим на exit; если выход по ZF=1 (нашли символ), уходим на exit ; если выход по CX=0 (символ не найден), идем на следующую команду dec di ; найден – вернуться на DI Вы обратили внимание, что сразу после выполнения команды SCASх еще невозможно определить, что именно стало причиной ее завершения: то, что CX=0, или то, уже найден соответствующий символ, причем и то и другое может произойти одновременно. При использовании префикса repnz (repne) обычно используют команду jnz для перехода, когда символ найден. В этом случае руководствуются следующим принципом – если флаг нуля сброшен, символ не найден, а установленный флаг нуля говорит о том, что символ найден. Команды сохранения STOS (Store in String) сохраняют содержимое регистров AL/AX/EAX в памяти по адресу ES:DI. Также можно использовать STOS для инициализации памяти единственным значением. Например: инициализировать каждый байт строки str1 значением 0Ah. .data str1 db 100 dup (?) .code mov di, seg str1 move es, di ; определим адрес сегмента mov al, 0ah ; заносим значение для заполнения байтов строки mov di, offset str1 ; определим адрес получателя ES:DI mov cx, 100 ; счетчик символов cld ; направление вверх rep stosb ; заполнить содержимым
Команды загрузки LODS (Load String) загружают из памяти по адресу, указанному в DS:SI, байт или слово в регистры AL/AX/EAX. Префиксы повторения редко используются с командами LODS, потому что каждое новое значение, загружаемое в регистры AL/AX, разрушает их прежние значения. Вместо отдельной команды LODSB можно использовать следующие две команды: mov al, [si]
|
|||
|