ORG 0x7C00

来源:互联网 发布:淘宝最大的明星周边店 编辑:程序博客网 时间:2024/06/08 12:30

org 0x7c00是告诉编译器,这段代码是要加载到0x7c00处的。编译器在编译代码的时候如果涉及到变量寻址操作是会自动加上0x7c00这个基址的。

因为最终确定每条指令的地址其实是编译器做的事情,在链接的时候会自动的进行重定位和地址分配。这里不是说编译器加载代码到0x7C00,而是由BIOS来自动的将启动代码加载到0x7C00,但是我都到这里了,那么我每次寻址的话就得还加上这个基地址。

 

0x7c00的来源:0x7C00第一次出现的地方是在IBM PC 5150的BIOS处理int 19(19号中断)的时候。
IBM PC 5150是x86(32位)IBM PC/AT系列的祖先,这款PC于1981年发布,使用intel 8088(16位)的处理器和16KB的RAM内存,BIOS和微软的基本指令均放在该内存当中。
当打开电脑电源,BIOS开始自检,然后触发19号中断。在处理19号中断时,BIOS检测电脑是否具有软盘/硬盘/固定磁盘,如果电脑具有任何可以的磁盘,BIOS就把磁盘的第一个扇区(512B)加载到内存的0x7C00地址处。
现在你知道为什么在x86的文档中找不到0x7C00的相关信息了,因为它是与BIOS相关的。

原文中具有这样的一个表:

+——————— 0×0
| Interrupts vectors(中断向量表)
+——————— 0×400
| BIOS data area(BIOS的数据区域)
+——————— 0×5??
| OS load area(操作系统加载区域)
+——————— 0x7C00
| Boot sector(引导区域)
+——————— 0x7E00
| Boot data/stack(引导数据/堆栈)
+——————— 0x7FFF
| (not used)
+——————— (…)

 

原创粉丝点击