Назначение: сохранение элемента из регистра-аккумулятора 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_strrep stosb ;заполняемпробеламистроку str
;пример совместной работы stosb и lodsb:;копировать одну строку в другую до первого пробелаstr1 db 'Какая-то строка'len_str1=$-strstr2 db len_str1 dup (' ')... mov ax,@data mov ds,ax mov es,ax cld mov cx,len_str1 lea si,str1 lea di,str2m1: lodsb cmp al,' 'jc exit ;выход, если пробел stosb loop m1exit:
См. также: урок 11 и команды ins/insb/insw/insd, cmps/cmpsb/cmpsw/cmpsd, movs/movsb/movsw/movsd, outs, scas/scasb/scasw/scasd, lods/lodsb/lodsw/lodsd, rep/repe/repz/repne/repnz