STOS/STOSB/STOSW/STOSD
(Store String Byte/Word/Double word operands)
Сохранение строки байтов/слов/двойных слов
Схема команды: | stos приемник stosb stosw stosd |
Назначение: сохранение элемента из регистра-аккумулятора al/ax/eax в последовательности (цепочке).
Алгоритм работы:
записать элемент из регистра al/ax/eax в ячейку памяти, адресуемую парой es:di/edi. Размер элемента определяется неявно (для команды stos) или конкретной применяемой командой (для команд stosb, stosw, stosd);
изменить значение регистра di на величину, равную длине элемента цепочки. Знак этого изменения зависит от состояния флага df:
df=0 — увеличить, что означает просмотр от начала цепочки к ее концу;
df=1 — уменьшить, что означает просмотр от конца цепочки к ее началу.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команды сохраняют элемент из регистров al/ax/eax в ячейку памяти. Перед командой stos можно указать префикс повторения rep, в этом случае появляется возможность работы с блоками памяти, заполняя их значениями в соответствии с содержимым регистра ecx/cx.
;заполнить некоторую область памяти пробелами str db 'Какая-то строка' len_str=$-str ... mov ax,@data mov ds,ax mov es,ax cld mov al,' ' lea di,str mov cx,len_str rep stosb ;заполняем пробелами строку str |
;пример совместной работы stosb и lodsb: ;копировать одну строку в другую до первого пробела str1 db 'Какая-то строка' len_str1=$-str str2 db len_str1 dup (' ') ... mov ax,@data mov ds,ax mov es,ax cld mov cx,len_str1 lea si,str1 lea di,str2 m1: lodsb cmp al,' ' jc exit ;выход, если пробел stosb loop m1 exit: |
См. также: урок 11 и команды , , , , ,