【发布时间】:2017-05-02 22:58:45
【问题描述】:
我正在使用 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 中必须是字符串的地址
【问题讨论】:
-
不止一个问题。您必须更好地理解段:偏移地址,但引导加载程序加载在物理地址 0x07c00。您必须选择一个与该地址相等的 ORG 和段。如果您选择 ORG 0x7c00,那么您需要将段(在这种情况下为 ES)设置为零,因为 (0x0000ES,这对于您选择的 ORG 不正确。
-
其次,当使用
-f binNASM 输出时,您不想使用.data部分。将数据放在代码之后但在引导签名之前的text部分内。如果您使用section data,NASM实际上会将您的数据放在引导扇区之外的字节512之后。 -
您将 BL 设置为 0x00 。那是黑底黑字,所以不会出现输出。试试 0x07 吧?
-
最后。我认为您的意思是使用
db而不是dw,因为您有一串字符。将zeichen dw 'hello2'更改为zeichen db 'hello2' -
感谢您对其工作的帮助
标签: nasm x86-16 bootloader bios