Это специальная команда, которая загружает 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 проверим в отладчике.
Смотрим дальше после команды lodsb изменится AL и SI. В AL будет загружено значение а SI увеличиться на 1.
Дальше все просто, я вывожу символ воспользовавшись функцией из шага "Шаг 36 - Функция 02h Вывод символа" и организовав цикл через LOOP. Все повторится, SI будет увеличен и в AL новый символ.