Шаг 47 - Знакомимся с LODSB

Это специальная команда, которая загружает 1 байт в регистр AL по адресу DS:SI и изменяет регистр SI в зависимости от флага направления. Итак, смотрим сразу код:

MODEL SMALL
STACK 256
DATASEG
	str1 DB 'firststeps $'
CODESEG
Start:
	
	mov ax,@data	; установка в ds адpеса
	mov ds,ax		; сегмента данных
	mov cl,10		; настройка счетчика
	mov si,OFFSET str1	; адрес строки
	cld		; направление
WriteLoop:	
	lodsb		; Загрузить символ
	mov dl,al		; для вывода
        Call WriteChar
loop WriteLoop

Exit:
	CALL ExitProgramm 

INCLUDE  function.asm 

End Start

У нас есть строка в сегменте данных. Эта строка адресуется по отношению к регистру DS. Это регистр данных. Вы все про это знаете. Командой:

mov si,OFFSET str1

Мы указываем SI на смешение относительно сегмента данных. Но он же у нас DS, вот и получается правильная адресация ds:si проверим в отладчике.

47_1.gif (5251 b)

Смотрим дальше после команды lodsb изменится AL и SI. В AL будет загружено значение а SI увеличиться на 1.

47_2.gif (3166 b)

Дальше все просто, я вывожу символ воспользовавшись функцией из шага "Шаг 36 - Функция 02h Вывод символа" и организовав цикл через LOOP. Все повторится, SI будет увеличен и в AL новый символ.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.