Я пытаюсь изучить простую программу загрузчика helloworld. ссылаясь на это link. Я успешно сгенерировал двоичный файл для этого кода сборки, используя ассемблер nasm
и запускаю с эмулятором bochs
, и он отлично работает. Но когда я сделал то же самое непосредственно с жестким диском, я не смог напечатать строку на экране.Программа Basic Bootloader для печати helloworld не работает
Ниже вы найдете код, который я использовал.
[BITS 16]
[ORG 0x7C00]
MOV SI, HelloString
CALL PrintString
JMP $
PrintCharacter:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07
INT 0x10
RET
PrintString:
next_character:
MOV AL, [SI]
INC SI
CALL PrintCharacter
OR AL, AL
JZ exit_function
JMP next_character
exit_function:
RET
HelloString db "Pell",0
TIMES 510 - ($ - $$) db 0
DW 0xAA55
Как обычно, вы забыли инициализировать 'DS'. – Jester
Не могли бы вы объяснить, что делает этот DS. Я начинаю сборку. – skesh
У меня есть [Советы загрузчика] (http://stackoverflow.com/a/32705076/3857942) в другом ответе SO. Возможно, потребуется настроить регистр сегмента, например _DS_. Когда вы говорите на жестком диске, вы имеете в виду, что вы загружаетесь на реальном оборудовании? –