【发布时间】:2015-06-14 19:07:19
【问题描述】:
我想创建printl 函数,允许我在ax 寄存器中打印字符串。我在 16 位实模式下,找不到任何打印消息的方法。我使用int 0x10 打印单个字母。
我尝试在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 学位)。
-
您使用的是哪个汇编程序?您的代码不适用于 TASM,它看起来更像 NASM,但
include 'sysf.asm'也不适用于 NASM。 -
抱歉我的错误我使用的是 FASM 而不是 TASM