Я хочу создать функцию printl
, которая позволяет мне печатать строку в регистре ax
. Я работаю в 16-битном режиме, и я не могу найти способ распечатать сообщение. Я использую int 0x10
для печати одной буквы.Печать строки с использованием INT 0x10 в bootsector
Прошу передать аргумент (строка для печати) в регистре bx
, затем в цикле напечатать письмо по букве, а затем вернуться с помощью popa
и ret
. Мой код действительно не работал - либо он создал бесконечный цикл, либо напечатал странный знак.
Если вы знаете более эффективный способ сделать это, это не проблема. Я также хотел бы спросить о комментируйте код, если вы дали какой-либо
Это мой код
boot.asm:
start:
mov bx, welcome ;put argument to bx
call printl ;call printl function in sysf.asm
hlt ;halt cpu
welcome db 'Hello', 0
include 'sysf.asm'
times 510 - ($-$$) db 0
db 0x55
db 0xAA
sysf.asm:
;print function
; al is one letter argument (type Java:char)
;
print:
pusha
mov ah, 0x0e
int 0x10
popa
ret ; go back
;printl function
; bx is argument of type Java:String
;
printl:
pusha
jmp printl001
printl001:
lodsb ; I was working with si register but i would like to use bx register
or al,al
jz printl002
mov ah, 0x0e
int 0x10
jmp printl001
printl002:
popa
ret
Удивительный вопрос, у меня нет таких знаний об установке, но я бы хотел (Степень в CompSci). – coderrick
Какой ассемблер вы используете? Ваш код не будет работать с TASM, он больше похож на NASM, но 'include 'sysf.asm'' также не работает с NASM. –
извините мою ошибку, я использую FASM не TASM – vakus