STOSB Запись байта в строку данных
STOSW Запись слова в строку данных
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они копируют содержимое регистра AL (в случае операций над байтами) или АХ (в случае операций над словами) в ячейку памяти соответствующего размера по адресу, определяемому содержимым пары регистров ES:DI. После операции копирования регистр DI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера копируемого элемента.
Вариант команды stos имеет формат
stos строка
(что не избавляет от необходимости инициализировать регистры ES:DI адресом строки строка). Заменить сегментный регистр ES нельзя.
Рассматриваемые команды могут предваряться префиксом повторения rep. В этом случае они повторяются СХ раз, заполняя последовательные ячейки памяти одним и тем же содержимым регистра AL или АХ. Команда не воздействует на флаги процессора.
Пример
;В полях данных сегмента данных, адресуемого через ES:
id db 'ID:'
;В программном сегменте:
eld ;Движение по строке вперед
mov DI,offset id+3;DI -> за знаком ':'
mov AL,'3' ;Код ASCII цифры 3
stosb ;Отправим в строку
mov AL,'9' ;Код ASCII цифры 9
stosb ;Отправим в строку
;Теперь в строке id записано 'ID:39'
Пример
;В полях данных сегмента данных, адресуемого через ES:
array dw 10000 dup (?) ;Место под массив слов
; В программном сегменте:
mov AX,-1 ;Число-заполнитель
mov CX,10000 ;Заполнить 10000 слов
сld ;Движение по строке вперед
lea DI,array ;ES:DI ® array
rep stosw ;Bce 10000 элементов массива
;получают значение -1 (FFFFh)
Пример
;В полях данных сегмента данных, адресуемого через ES:
line db 80 dup (' ') ;Пустая пока строка
;В программном сегменте:
mov AL,'>' ;Код ASCII знака '>'
mov CX,5 ;Заполнить 5 слов
eld ;Движение по строке вперед
lea DI,line ;ES:DI -" line
rep stos line ;Первые 5 байт строки line
;заполняются кодом ASCII
;знака ' >'
Пример
;В полях данных сегмента данных, адресуемого через ES:
line dw 80 dup (0) ;Строка, заполненная нулями
;В программном сегменте:
mov AL,'>' ;Код ASCII знака '>'
mov AH,31h ;Атрибут (синий по бирюзовому)
mov CX,5 ; Заполнить 5 слов
сld ;Движение по строке вперед
lea DI,line ;ES:DI -" line
rep stos line ;Первые 5 слов строки line
;заполняются кодом ASCII
;знака '>'вместе с атрибутом
;для последующего вывода на экран
386+ STOSD Запись двойного слова в строку данных
Команда аналогична командам МП 86 stosb и stosw, но позволяет записать в строку, адресуемую через регистры ES:EDI, двойное слово из регистра ЕАХ.
Пример
; В полях данных
dat dd 12789,2,550000,100000
; В программном сегменте
mov ЕАХ,444777
push DS
pop ES ;ES=DS
mov DI, off set dat
add DI,4*2 ;DS:SI -" 3-й элемент массива
;чисел
stosd ;dat=12789,2,444777,100000