NASM引导程序问题

时间:2015-08-17 20:24:43

标签: assembly nasm bootloader

在过去的几天里,我已经为操作系统做了一些测试,但是我无法理解为什么这段代码不起作用:我的函数输入字符串地址(在BX中)和字符串长度(在CX中)。 如果我在CX中输入一个数值(即10),那么如果我将[len]放在CX中它就不起作用。

bits 16
org 0x7c00


mov bx, string
mov cx, [len]
call print

jmp $

; bx = string address, cx = string lenght
print:
    xor si, si
._loop:
    mov al, [bx+si]
    mov ah, 0x0e
    int 0x10
    inc si
    cmp si, cx
    jl ._loop

    ret

string db "Hello world!"
len equ $-string

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

1 个答案:

答案 0 :(得分:-1)

您应该测试此代码:

mov si,mystr1
call print_string
print_string:
pusha
@repeat:
lodsb
cmp al,0x00
je @done
mov ah,0x0E
int 10h
jmp @repeat
@done:
popa
ret
mystr1 db 'Hello World!',0