我想创建printl允许我在寄存器中打印字符串的函数ax。我处于 16 位实模式,找不到任何打印消息的方法。我用来int 0x10打印一封信。
我尝试在寄存器中传递参数(要打印的字符串)bx,然后在循环中逐个字母地打印,然后使用popaand返回ret。我的代码并没有真正起作用——要么它创建了一个无限循环,要么打印了一个奇怪的符号。
如果您知道更有效的方法,那么这不是问题。如果您提供任何评论,我还想询问您的代码
这是我的代码
启动.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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
该lodsb指令加载 DS 和 SI 寄存器指向的字节,但尚未加载有效值。由于这是一个引导加载程序,您还需要使用 ORG 指令,否则汇编器将不知道您的代码以及消息welcome加载到内存中的位置。尝试将程序的开头更改为:
ORG 0x7c00
start:
push cs
pop ds
mov si, welcome
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |