x86-32之80836机器硬件介绍
内存架构
80386有四种运行模式:实模式、保护模式、SMM模式、虚拟8086模式
- 实模式(Real Mode)
为了兼容8086的CPU操作模式,CPU加电后处于实模式运行状态,寻址方式为16位段寄存器和16位偏移寄存器组合寻址,能访问物理内存空间不超过1MB(0xFFFFF),不支持段页机制
8086:16位数据总线和20位地址总线决定段的最大长度不超过64KB,最大寻址空间为1MB
- 保护模式
支持内存分页机制,还提供了虚拟内存的支持
逻辑地址:即逻辑上的地址,实模式下由“段基地址+段内偏移”组成;保护模式下由“段选择符+段内偏移”组成。
线性地址:逻辑地址经分段机制后就成线性地址,它是平坦的;如果不启用分页,那么此线性地址即物理地址。
物理地址:线性地址经分页转换后就成了物理地址。
段机制启动,页机制未启动:逻辑地址->段机制处理->线性地址=物理地址
段机制和页机制都启动:逻辑地址->段机制处理->线性地址->页机制处理->物理地址
寄存器
通用寄存器
-
DEAX: 累加器
-
EBX: 基址寄存器
-
DECX: 计数器
-
EDX: 数据寄存器
-
ESI: 源地址指针寄存器
-
EDI: 目的地址指针寄存器
-
EBP: 基址指针寄存器
-
ESP: 堆栈指针寄存器
段寄存器(用于寻址)
-
CS: 代码段(Code Segment) 在实模式和保护模式含义不同
-
DS: 数据段(Data Segment)
-
ES: 附加数据段(Extra Segment)
-
SS: 堆栈段(Stack Segment)
-
FS: 附加段
-
GS: 附加段
指令指针寄存器EIP
EIP的低16位就是8086的IP,它存储的是下一条要执行指令
的内存地址
实模式下,CS和EIP共同完成对16位地址空间寻址
保护模式下,CS和EIP共同完成对32位地址空间寻址,EIP表示指令的段内偏移地址
标志寄存器EFlags
IF(Interrupt Flag) :中断允许标志位,由CLI,STI两条指令
来控制;设置IF使CPU可识别外部(可屏蔽)中断请求。复位
IF则禁止中断。IF 对不可屏蔽外部中断和故障中断的识别没
有任何作用。
CF,PF, ZF,…
操作系统启动流程
CPU加电后进入实模式,初始化寄存器(CS=0xF000 IP=0xFFF0 PC=CS*16+IP=0xFFFF0,0xFFFF0是BIOS的入口地址,该指令一般是跳转指令)BIOS开始执行:
在内存中建立中断向量表、BIOS数据区和中断服务程序(BIOS即基本I/O系统)
硬件自检,包括检测含操作系统的硬盘,
“INT 19”中断服务程序加载主引导扇区MBR(512字节)到内存的0x7C00,主引导扇区中的bootloader使能保护模式,开始支持段机制,从硬盘中读取kernel,然后跳转到OS的第一条指令,OS启动完成