int 10h 13h bios字符串输出不起作用

时间:2016-12-17 07:22:59

标签: nasm

我正在使用nasm,这是我的代码:

org 0x7c00
bits    16



section .data
 zeichen    dw  'hello2'
section .text


 mov ax,0x7c00
 mov    es,ax
 mov    bh,0
 mov    bp,zeichen

 mov    ah,13h
 mov    bl,00h
 mov    al,1
 mov    cx,6
 mov    dh,010h
 mov    dl,01h

int 10h

 jmp    $

 times  510 - ($-$$)    hlt
 dw 0xaa55

它确实将光标放在正确的位置,但它没有打印任何内容。 我用qemu-system-i386加载这个文件。 int10 ah = 13h是一个字符串输出,在寄存器es:bp必须是字符串的地址

1 个答案:

答案 0 :(得分:1)

为了将来的参考,因为我一直试图让这个工作很长一段时间,这是一个工作版本!

    org 0x7c00
    bits 16

    xor ax, ax
    mov es, ax
    xor bh, bh
    mov bp, msg

    mov ah, 0x13
    mov bl, [foreground]
    mov al, 1
    mov cx, [msg_length]
    mov dh, [msg_y]
    mov dl, [msg_x]

    int 0x10

    hlt

foreground dw 0xa 
msg db 'Beep Boop Meow'
msg_length dw $-msg
msg_x dw 5
msg_y dw 2

    times  510 - ($-$$) db 0
    dw 0xaa55

这是最接近原始版本的版本。

    org 0x7c00
    bits 16

    ; video page number.
    mov bh, 0     
    ; ES:BP is the pointer to string.
    mov ax, 0x0
    mov es, ax    
    mov bp, msg   

    ; attribute(7 is light gray).
    mov bl, 0x7
    ; write mode: character only, cursor moved.
    mov al, 1
    ; string length, hardcoded.
    mov cx, 6
    ; y coordinate
    mov dh, 16
    ; x coordinate
    mov dl, 1

    ; int 10, 13
    mov ah, 0x13
    int 0x10

    ; keep jumping until shutdown.
    jmp $

msg dw  'hello2'

    times  510 - ($-$$) db 0
    dw 0xaa55