如何在实模式汇编中编写函数

问题描述

我已经学习了如何在实模式下以汇编模式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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...