【发布时间】:2012-05-05 07:11:30
【问题描述】:
最近在学习如何编写引导扇区,下面是我正在学习的完整代码:
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 文件。与上一个没有什么不同:“你好操作系统!”也显示在屏幕上。我可以说第一行在这里什么都不做吗? org xxxx intheworld 有什么用?
【问题讨论】:
-
这正是书中所说的意思。如果您不理解它,您可能应该再次查看基础知识。特别是,您需要了解内存的工作原理。
-
正如nasm manual 所说:“ORG 指令的功能是指定原始地址,当程序加载到内存时,NASM 将假定该地址开始。”。 IE。你告诉汇编器一些它自己无法弄清楚的事情:程序将在什么地址被加载。
-
@Karl:你应该首先了解什么是帮助和善良,以及如何回答人们以启发他们,而不是仅仅生气。
-
所以你可以帮助他理解这些基础知识。如果你有时间写出这样无意义的评论,那么你就有(同样的)时间来写一些更有启发性的东西。不需要写一本书,只需在网络上的某个地方提供一些关于内存分段的解释的链接就足够了。为什么只评论无济于事?
标签: assembly operating-system x86 boot pc