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

L

LODS Загрузка операнда из строки. LODSB Загрузка байта из строки. LODSW Загрузка слова из строки.

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

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

lods строка

(Что не избавляет от необходимости инициализировать регистры DS:SI адресом строки). В этом формате возможна замена сегмента строки строка:

lods ES:строка

Пример 1:

;В полях данных сегмента данных, адресуемого через DS:
str db 'qwertyuiop'
; В программном сегменте:
сld; Двигаемся по строке вперед
mov SI, off set str; Адрес строки
add SI,BX; Добавим смещение (пусть ВХ=4)
lodsb; AL='t', SI › 'у'

Пример 2:

;В полях данных сегмента данных, адресуемого через ES:
str db 'qwertyuiop'
;В программном сегменте:
сld; Двигаемся по строке вперед
mov SI,offset str; Адрес строки
lodsbES:str; AL='q', ES:SI › 'w'

386+ LODSD Загрузка двойного слова из строки

Команда аналогична командам МП 86 lodb и lodsw, но позволяет загрузить из строки, адресуемой через регистры DS:ESI (DS:SI для 16-разрядных приложений), двойное слово в регистр ЕАХ.

Пример:

; В полях данных
dat dd 12789.200000.550000.8000000
;В программном сегменте
mov SI,offset dat
add SI, 4*3;DS:SI › 4-й элемент массива чисел
lodsd; EAX=8000000
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.