最近我在学习如何编写引导扇区,这是我正在学习的完整代码:
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS!"
times 510-($-$$) db 0
dw 0xaa55
如果您知道如何启动系统,这是一个非常简单的代码。结果是屏幕上显示一行
Hello OS!
,唯一不知道的是第一行:org 07c00h
,书上告诉我这行代码让编译器把地址定位到7c00h的地方,但是解释是非常模棱两可,我真的不知道这里有什么用。 org 07c00h
行在这里做什么?我试图删除该行,并使用 nasm 创建一个 bin
文件,然后使用 bochs 来启动 bin 文件。与上一个没有什么不同:“你好 OS!”也显示在屏幕上。我可以说第一行在这里什么都不做吗? org xxxx
intheworld 有什么用?
最佳答案
它是您一步一步获得汇编器和链接器的地方。组织告诉汇编器,它告诉链接器(在这些情况下通常是同一个程序)在物理内存空间中放置后面的代码。当您使用 C 编译器或其他一些高级语言编译器时,您通常有单独的编译和链接步骤(尽管编译器经常在幕后为您调用链接器)。源代码被编译为位置无关的目标文件,其中一些指令未实现,等待链接步骤。链接器从用户那里获取描述内存空间的对象和链接描述文件或信息,然后从那里编码该内存空间的指令。
User786653 设置得很好,它告诉汇编器一些它自己无法确定这些指令所在的内存空间/地址的信息,以防需要在指令中进行位置相关编码。如果它是包含地址信息的二进制文件,例如 elf、srec、ihex 等,它还会在输出二进制文件中使用该信息。
关于assembly - "org xxxx"在汇编中有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10301467/