汇编代码只是将spade打印到屏幕上

时间:2016-10-27 22:44:07

标签: assembly x86 boot osdev

在接下来的几天里,我似乎可能会在这里... ...)

我的代码如下,适用于BOCHS x86模拟器

-- BOOT.ASM --
[org 0x7c00]

mov dx, 0x7c00
call printhex
mov bx, printthistoo
call printaddr
jmp $

%include "print.asm"

printthis:
    db 'Letters!', 0
printthistoo:
    db ' Yes, all of these!', 0

times 510-($-$$) db 0

dw 0xaa55

-- PRINT.ASM --
printaddr:
    pusha
    mov ah, 0x0e
    lp:
    mov al, [bx]
    cmp al, 0
    jne printch
    jmp doneaddr
    printch:
    int 0x10
    add bx, 1
    jmp lp
    doneaddr:
    popa
    ret

printhex:
    mov cx, 0x3
    mov ax, 0xF
    lph:
    mov bx, 0x0
    add bx, ax
    and bx, dx
    cmp bx, ax
    je log
    sub ax, 0x1
    jmp lph
    log:
    cmp ax, 0x9
    jle lognum
    jmp loglet
    finlog:
    cmp cx, 0x0
    je printnd
    mov ax, 0xF
    sub cx, 0x1
    shr dx, 4
    jmp lph
    lognum:
    mov bx, extemplate
    add bx, cx
    add bx, 0x2
    add ax, 48
    mov [bx], al
    jmp finlog
    loglet:
    mov bx, extemplate
    add bx, cx
    add bx, 0x2
    add ax, 0x7
    add ax, 48
    mov [bx], al
    jmp finlog
    printnd:
    mov bx, extemplate
    call printaddr
    ret

extemplate:
    db '0x0000', 0

经过BOCHS的几次尝试,我决定在我的物理计算机上尝试代码。我将代码加载到带有RUFUS的USB记忆棒上并启动它。然而,所发生的一切都是光标吓坏了,然后在屏幕上打印了一个铲子字符。谁能告诉我我做错了什么?

0 个答案:

没有答案