[英]How does assembly ORG instruction calculate offset?
我正在尝试创建一个简单的 BIOS 引导扇区,为此我使用了 x86 汇编语言。 我发现整个引导过程中的内存布局看起来像本文下面的图片。 我的想法是使用ORG汇编指令来通知汇编程序设置一个相对内存地址(在本例中为 0x7c00) 。 这样我就不必为当场计算内存地址而烦恼。 汇编代码如下所示:
[org 0x7C00]
mov ah, 0x0e
mov al, [0x09] ;this is the offset of 'the_secret'
int 0x10
the_secret:
db "X"
times 510 - ($-$$) db 0
dw 0xaa55
问题是,当我将这段代码汇编成二进制文件并启动引导过程时,终端中没有出现“X”。 我在这里犯的错误是什么?
最好让汇编程序为您计算偏移量。
[org 0x7C00]
xor ax,ax
mov ds,ax
mov ah, 0x0e
mov al, [the_secret] ;load the ascii code for 'X' into AL
int 0x10
JMP $ ;halt
the_secret:
db "X"
times 510 - ($-$$) db 0
dw 0xaa55
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.