如何解决如何在实模式汇编中编写函数
我已经学习了如何在实模式下以汇编模式x86编写可启动程序,但是我没有取得什么大的进步,因为我一无所获。汇编中的x86 cpu-s的金属编程。 因此,我尝试通过反复试验来学习,但是尝试越多,我就越会出错。今天,我试图了解如何使用AT&T assemby来处理堆栈以及如何在实模式下构建函数,我编写了这段代码,并认为这很有意义:
.code16
.global init
# PRINT SI
print:
push %bp
mov %sp,%bp
sub $16,%sp
pusha
mov $0xe,%ah
print_char:
lodsb
cmp $0,%al
je print_end
int $0x10
jmp print_char
print_end:
popa
mov %bp,%sp
pop %bp
ret
init:
mov $msg,%si
call print
hlt
msg: .asciz "Test number one..."
.fill 510-(.-print),1,0
.word 0xaa55
它应该在屏幕上打印“测试编号...”,但是使用qemu它将在屏幕上仅打印“ S”,如下所示:
有人能弄清楚我哪里出了问题以及为什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。