Получение строки для печати через прерывание bios
Я изучаю сборку и, конечно же, экспериментирую с классическим прерыванием bios 0x10. Ресурсы, которые я рассматривал, показывают использование lodsb для печати строки, поэтому, чтобы понять этот код операции, я пытаюсь имитировать его поведение. Это прекрасно работает с lodsb, но не с тем, что у меня есть. Что я делаю не так?:
start:
mov ah, 0Eh ;for bios interrupt
mov si, text_string ;set source index to begining of text_string
.repeat:
;I'm trying to emulate the behavior of lodsb to learn how it works:
mov al, [si] ;put character at si in al register
add si, 1 ;increment source index
cmp al, 0 ;if the character is a zero (end of the string)
je done ;end execution
int 10h ;bios interrupt to put character on screen
jmp .repeat
text_string db 'Hello, World!', 0
done:
ret
2 ответа:
Обычно не очень хорошая идея:
- предположим, что все регистры сохраняются при вызовах прерывания (или любых вызовах, на самом деле); или
- не настраиваются все необходимые регистры для данного вызова.
На этой первой ноте я бы поставил
ahв0ehнепосредственно передint 10.
Int 10h/0ehтребуется, чтобыbhиblбыли установлены в номер страницы и цвет переднего плана соответственно. Я бы также сделал это непосредственно передint 10, чтобы убедиться, что они установлены правильно для звонка.
В качестве отступа, вам нужно убедиться, что регистр сегмента
dsкорректен, с чем-то вроде:push cs pop dsПоскольку похоже, что вы помещаете строку в свой сегмент кода. Однако, поскольку версия
lodsb, по-видимому, работает, я предполагаю, что вы это предусмотрели.И, из (по общему признанию, выцветшей) памяти, у 8086 есть инструкция
inc si, которая может сэкономить небольшое количество места, не то чтобы это имело значение, но я был выкован в время, когда каждый байт посчитан : -)
First lodsb - это команда, которая говорит компьютеру получить символ в коде и увеличивает смещение. Смещение определяется [SI], регистром, который можно легко установить. Как только SI установлен, lodsb получает символ и помещает его в al. С этого момента его читают все и решают, что делать. Здесь есть еще один вопрос, подобный этому .