Справочник по языку Ассемблера IBM PC



Команда scas - часть 2



В программе используется команда-примитив scas.


Символ задается явно (строка 20).


Префикс повторения — repne.

 Листинг 3. Поиск символа в строке командой scas <1> ;prg_11_3.asm <2> MASM <3> MODEL       small <4> STACK       256 <5> .data <6> ;тексты сообщений <7> fnd db      0ah,0dh,'Символ найден! ','$' <8> nochar      db      0ah,0dh,'Символ не найден.','$' <9> ;строка для поиска <10> string     db      'Поиск символа в этой строке.',0ah,0dh,'$' <11> .code <12> ASSUME     ds:@data,es:@data <13> main: <14>    mov     ax,@data <15>    mov     ds,ax <16>    mov     es,ax   ;настройка ES на DS <17>    mov     ah,09h <18>    lea     dx,string <19>    int     21h     ;вывод сообщения string <20>    mov     al,'а'  ;символ для поиска — `а`(кириллица) <21>    cld             ;сброс флага df <22>    lea     di,string       ;загрузка в es:di смещения строки <23>    mov     cx,29   ;для префикса repne — длина строки <24> ;поиск в строке (пока искомый символ и символ в строке не совпадут) <25> ;выход при первом совпадении <26> repne      scas    string <27>    je      found   ;если равны — переход на обработку, <28> failed:    ;иначе выполняем некоторые действия <29> ;вывод сообщения о том, что символ не найден <30>    mov     ah,09h <31>    lea     dx,nochar <32>    int     21h     ;вывод сообщения nochar <33>    jmp     exit    ;на выход <34> found:             ;совпали <35>    mov     ah,09h <36>    lea     dx,fnd <37>    int     21h ;вывод сообщения fnd <38> ;теперь, чтобы узнать место, где совпал элемент в  строке, <39> ;необходимо уменьшить значение в регистре di и  вставить нужный обработчик <40> ;  dec     di <41> ... вставьте обработчик <42> exit:              ;выход <43>    mov     ax,4c00h <44>    int     21h <45> end        main




Содержание  Назад  Вперед