【发布时间】:2015-01-18 15:15:12
【问题描述】:
我正在尝试用 nasm 编写引导加载程序,目前它只打印一个字符串。
[BITS 16]
[org 0x7c00]
myString:
db 'Hello World', 0x00
mov bp, 0x8000
mov sp, bp
mov bx, myString
call printString
jmp $
printString:
pusha
mov ah , 0x0e
printStringA:
mov al , [bx]
cmp al, 0x00
je printStringB
int 0x10
add bx, 0x01
jmp printStringA
printStringB:
popa
ret
times 510 -( $ - $$ ) db 0
dw 0xaa55
这很好,但是如果我将字符串定义移到这里:
[BITS 16]
[org 0x7c00]
mov bp, 0x8000
mov sp, bp
myString:
db 'Hello World', 0x00
mov bx, myString
call printString
jmp $
printString:
pusha
mov ah , 0x0e
printStringA:
mov al , [bx]
cmp al, 0x00
je printStringB
int 0x10
add bx, 0x01
jmp printStringA
printStringB:
popa
ret
times 510 -( $ - $$ ) db 0
dw 0xaa55
它会打印出垃圾,如果有帮助,我会在 windows 下的 bochs 中运行它。
【问题讨论】:
-
想想我刚刚想通了,处理器可能认为字符串是代码,执行它并将事情搞砸了。如果我将字符串定义移过永无止境的循环,一切都很好
标签: nasm bootloader