引导扇区内存
你需要通过谷歌预先了解的概念:memory offsets, pointers
目标:学习操作系统内存组成
请打开this document第14页, 并且查阅内存结构图
这节课的唯一目的是学习引导扇区保存在哪里
我很直白的告诉你,BIOS放在0x7C00
,但是一个错误的案例将更能看清这个事实
我们想在屏幕上打印一个X
,我们将采取4种不同的策略,然后看看哪些可以工作,为什么能工作
打开文件boot_sect_memory.asm
首先我们将X
定义成一个数据,并且使用一个label
the_secret:
db "X"
然后我们将尝试4种不同的方式去读取the_secret
mov al, the_secret
mov al, [the_secret]
mov al, the_secret + 0x7C00
mov al, 2d + 0x7C00
2d
是X
字节在二进制中实际所在的位置
看代码并且阅读注释
编译并运行代码,你应该看到一个类似1[2¢3X4X
的字符串,是1和2产生的随机垃圾二进制内容
如果你加上或者移除介绍,记住计算新的X
的新的字节偏移值,并且代替0x2d
除非你已经完全理解了引导扇区偏移和内存地址,否则不要继续到下一节
全局偏移
现在,在每个地方都偏移0x7C00
属实不方便,汇编可以对每个内存位置定义一个全局偏移(global offset),其命令为org
[org 0x7C00]
- 现在去打开
boot_sect_memory_org.asm
,你将看到用引导扇区打印数据的典型方法 - 编译并运行代码,你将看到
org
是如何印象每个之前的解决方案
阅读注释,以获取有关使用和不使用org
的完整解释