在实模式下制作打印功能

问题描述

我见过很多和我做同样事情的问题,但没有真正找到对我有帮助的答案。

就像标题所说的那样,我正在尝试创建一个简单的打印函数,该函数获取被推送到堆栈中的字符串的地址并打印它。

对我的代码的普遍批评显然更受欢迎。

[bits 16]
[global _start]

org 0x7c00                              ;set origin to smthn idk someone recommanded it

;globals
buffer: db "Hello World!",0x0a,0      ;null terminated string
eop: db "End of program",0

_start:
    xor ax,ax
    mov ds,ax                          ;set data segment to 0

    push buffer
    call print                          ;call print with addr of buffer in the stack

    mov al,'F'                         ;debug
    mov ah,0x0e
    int 0x10

    jmp $                               ;end of program (loop forever)

print:
    .prepare:
        push bp
        mov bp,sp

        pusha                           ;save all registers

        mov si,[bp+4]                  ;use si so save index of string     

    .char_loop:
        mov al,[si]                    ;offset from added data
        add si,1

        cmp al,0x0                     ;string is terminated by null
        je .return

        mov ah,0x0e
        int 0x10

        jmp .char_loop

    .return:
        popa
        pop bp
        ret

times 510-($-$$) db 0                   ;fill dead space with 0
db 0x55,0xaa   

                    ;end boot sector with 0x55 0xaa

编辑:忘记包含当前输出-

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)