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



Команда stos


stos адрес_приемника (STOrage String) — сохранить элемент из регистра-аккумулятора al/ax/eax в цепочке.

Команда имеет один операнд адрес_приемника, адресующий цепочку в дополнительном сегменте данных.


Работа команды заключается в том, что она пересылает элемент из аккумулятора (регистра eax/ax/al) в элемент цепочки по адресу, соответствующему содержимому пары регистров es:edi/di. При этом содержимое edi/di подвергаются инкременту или декременту (в зависимости от состояния флага df) на значение, равное размеру элемента цепочки.


Префикс повторения в этой команде может и не понадобиться — все зависит от логики программы. Например, если использовать префикс повторения rep, то можно применить команду для инициализации области памяти некоторым фиксированным значением.

В качестве примера рассмотрим листинг 5. Программа производит замену в строке всех символов “а” на другой символ. Символ для замены вводится с клавиатуры.

Листинг 5. Замена командой stos символа в строке на вводимый с клавиатуры ;prg_11_5.asm MASM MODEL   small STACK   256 .data ;сообщения fnd     db      0ah,0dh,'Символ найден','$' nochar  db 0ah,0dh,'Символ не найден.','$' mes1    db      0ah,0dh,'Исходная строка:','$' string  db      'Поиск символа в этой строке.',0ah,0dh,'$' ;строка для поиска mes2    db      0ah,0dh,'Введите символ, на который следует заменить найденный'         db      0ah,0dh,'$' mes3    db      0ah,0dh,'Новая строка: ','$' .code  assume ds:@data,es:@data привязка ds и es к сегменту данных main:           ;точка входа в программу         mov     ax,@data        ;загрузка сегментных регистров         mov     ds,ax         mov     es,ax   ;настройка es на ds         mov     ah,09h         lea     dx,mes1         int     21h     ;вывод сообщения mes1         lea     dx,string         int     21h     ;вывод string         mov     al,'а'  ;символ для поиска-`а`(кириллица)         cld             ;сброс флага df         lea     di,string       ;загрузка в di смещения string         mov     cx,29   ;для префикса repne — длина строки ;поиск в строке string до тех пор, пока ;символ в al и очередной символ в строке ;не равны: выход - при первом совпадении cycl: repne   scas string         je      found   ;если элемент найден то переход на found failed:         ;иначе, если не найден, то вывод сообщения nochar         mov     ah,09h         lea     dx,nochar         int     21h         jmp     exit    ;переход на выход found:         mov     ah,09h         lea     dx,fnd         int     21h ;вывод сообщения об обнаружении символа ;корректируем di для получения значения ;действительной позиции совпавшего элемента ;в строке и регистре al         dec     di new_char:       ;блок замены символа         mov     ah,09h         lea     dx,mes2         int     21h     ;вывод сообщения mes2 ;ввод символа с клавиатуры         mov     ah,01h         int     21h     ;в al — введённый символ         stos    string  ;сохраним введённый символ  ;(из al) в строке string в позиции старого символа         mov     ah,09h         lea     dx,mes3         int     21h     ;вывод сообщения mes3         lea     dx,string         int     21h ;вывод сообщения string ;переход на поиск следующего символа ‘а’ в строке         inc     di              ;указатель в строке string на следующий,  ;после совпавшего, символ         jmp     cycl    ;на продолжение просмотра string exit:           ;выход         mov     ax,4c00h         int     21h end     main    ;конец программы

Следующие две команды появились впервые в системе команд микропроцессора i386. Они позволяют организовать эффективную передачу данных между портами ввода-вывода и цепочками в памяти. Следует отметить, что эти две команды позволяют достичь скорости передачи данных со скоростью выше той, которую может обеспечить контроллер DMA (Direct Memory Access — прямой доступ к памяти). Контроллер DMA — это специальная микросхема, предназначенная для того, чтобы освободить микропроцессор от управления процессом ввода-вывода больших массивов данных между внешним устройством (диском) и памятью. 




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