Иллюстрированный самоучитель по Assembler

             

STI Установка флага прерывания


Команда STI устанавливает флаг разрешения прерываний IF в регистре флагов, разрешая все аппаратные прерывания (от таймера, клавиатуры, дисков и т.д.). Команда не имеет параметров и не воздействует на остальные флаги процессора.

Пример

sti ;Разрешение аппаратных прерываний

STOS Запись в строку данных

STOSB Запись байта в строку данных

STOSW Запись слова в строку данных

Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они копируют содержимое регистра AL (в случае операций над байтами) или АХ (в случае операций над словами) в ячейку памяти соответствующего размера по адресу, определяемому содержимым пары регистров ES:DI. После операции копирования регистр DI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера копируемого элемента.

Вариант команды stos имеет формат

stos строка

(что не избавляет от необходимости инициализировать регистры ES:DI адресом строки строка). Заменить сегментный регистр ES нельзя.

Рассматриваемые команды могут предваряться префиксом повторения rep. В этом случае они повторяются СХ раз, заполняя последовательные ячейки памяти одним и тем же содержимым регистра AL или АХ. Команда не воздействует на флаги процессора.

Пример 1

;В полях данных сегмента данных, адресуемого через 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'

Пример 2

;В полях данных сегмента данных, адресуемого через 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)


Пример 3

; В полях данных сегмента данных, адресуемого через 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

;знака ' >'

Пример 4

;В полях данных сегмента данных, адресуемого через 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


Содержание раздела