0 操作系统 - 魔法吟唱开始
本文是笔者结合阅读书籍整理的笔记加作者自己的总结
0x0 计算机启动
启动过程(按下电源键)
- 上电在加载程序
- 启动BIOS程序
关于计算机内存几个问题
- 由计算机地址总线确定,最大运行内存
- 并不是最大内存就是可使用的内存,一部分内存需要留给 外部接口,例如显示适配器...
0x1 Bios如何启动
上电后CS寄存器和IP寄存器会初始化为指向BIOS 的地址
段地址 * 16 + 偏移地址
段地址为什么要乘以16(十六进制 10)
如果寄存器都是 8位寄存器 , 那么 两个寄存器 也就是16位,8086CPU的计算机架构里有20根地址总线。 也就是说最大支持2的20次方。
那么问题来了:
- 如果想访问 1M 也就是 2的20次方的地址 。
- 表达不出来,所以需要扩展乘一下16(十进制)。变成可表达20位。
BIos作了什么:
检查系统的各项硬件,最后一项校验0盘0道0扇区.
- 如果扇区摸为是 0x55,0xaa确定为存在引导程序MBR
- jmp 0:0x7c00
0x2 MBR 系统引导
- 在BIOS结束检查后会跳转到0x7C00 地址
MBR的任务:
- MBR的任务是加载某个程序到指定位置,程序一般是内核加载器
MBR大小限制:
- 一般是512字节,因为一个扇区就是512字节
- 扇区最后两个字节必须是0x55,0xaa
Nasm 汇编小知识
$
- 代表本行地址
$$ - 本Section的地址
section vstart = **
- **代表当前区块开始的内存地址
Linux dd命令
dd if=要读取的文件 of= 要输写入的文件 bs= 块的大小 count =拷贝块的个数 [seek=要跳过多少块] conv = 如何转换文件
附录
- Llinux 安装dosbox
apt install dosbox
0x3 汇编 aboutVstar(NASM)
section vstar=xxx解释
- 基于xxx地址进行编码,后面的指令基于xxx地址的相对位置
编译器以相对于文件开头偏移来编址的好处是利于重定位