自制X86操作系统(1)-系统引导篇3(保护模式)
来源:互联网 发布:淘宝客服售后面试问题 编辑:程序博客网 时间:2024/05/17 08:20
最近忙着画X86主板没能及时写操作系统,时隔3月前面代码又复习下,应该到保护模式了。
OSLDR.ASM:
JMPBEGIN_OSLDRLABEL_GDT:DQ0;保留LABEL_CODE:DQ0X00C09A0000000000;C09A根据附表LABEL_VIDE:DQ0X00C0920B8000FFFF;C092根据附表,000B8000H为显存地址,界限FFFFHGdtPtrDW24;3x8字节=24DD0SelectorCODEEQULABEL_CODE-LABEL_GDTSelectorVIDEEQULABEL_VIDE-LABEL_GDTBEGIN_OSLDR:XOREAX,EAXMOVAX,CSMOVDS,AXMOVES,AXSHLEAX,4ADDEAX,CODE32_ADDR;把CODE32_ADDR物理地址存入LABEL_CODE指定位MOVWORD[LABEL_CODE + 2],AX;基地址0-15位SHREAX,16MOVBYTE[LABEL_CODE + 4],AL;基地址16-23位MOVBYTE[LABEL_CODE + 7],AH;基地址24-31位XOREAX,EAXMOVAX,DSSHLEAX,4;段基值x10H+偏移量ADDEAX,LABEL_GDT;EAX=LABEL_GDT物理地址MOVDWORD[GdtPtr+2],EAXLGDT[GdtPtr]CLIINAL,92HORAL,10BOUT92H,AL;开A20MOVEAX,CR0OREAX,1MOVCR0,EAX;打开保护模式标志位PE=1JMPDWORD SelectorCODE:0[BITS 32]CODE32_ADDR:MOVAX,SelectorVIDE;测试代码 跳入保护模式后在屏幕上显示OMOVES,AXXOREDI,EDIMOVEDI,800MOVAH,0CHMOVAL,'O'MOV[ES:EDI],AXJMPSHORT $
附图:
P位:1表示所描述的段存在(有效),为0表示所描述的段无效,使用该描述符会引起异常
DPL位:描述符特权级别,说明所描述段的特权级别
DT位:描述符类型位,1说明当前描述符为存储段描述符,0为系统描述符或门描述符.
TYPE位: 位0:表明描述符是否已被访问.把选择子装入段寄存器时,该位被标记为1 位3:0说明所描述段为数据段,1为可执行段(代码段)
当为数据段时
位1为W位,说明该数据段是否可写(0只读,1可写) 位2为ED位,说明该段的扩展方向(0向高位扩展,1向低位扩展)
当为代码段时
位1为R位,说明该执行段是否可读(0只执行,1可读) 位2为C位,0说明该段不是一致码段(普通代码段),1为一致码段
G位:为粒度位,0说明粒度为字节,1为4K字节.
D位: 在代码段中,D为1,表示使用32位地址,32/8位操作数;为0表示使用16位地址,16/8位操作数
在堆栈段中,D为1表示隐含操作(如PUSH/POP)使用ESP为堆栈指针,为0使用SP 在向低扩展的存储段中,D为1,表示段的上限为4G,为0上限为64K
实模式切换保护模式很简单,只要计算好跳转地址和定义好描述符表即可。
2013/07/07
- 自制X86操作系统(1)-系统引导篇3(保护模式)
- 自制X86操作系统(1)-系统引导篇1
- 自制X86操作系统(1)-系统引导篇2
- x86系统引导(3)
- x86系统引导(1)
- 操作系统引导--从实模式到保护模式
- X86保护模式编程总结(3)
- X86保护模式编程总结(1)
- x86系统引导(2)
- x86系统引导(4)
- x86系统引导(5)
- 80x86保护模式(3)
- 80x86保护模式(1)
- 自制操作系统--(3)
- 自己动手写操作系统80x86保护模式(4)--分页机制
- 自制操作系统---eposide 3 (特别篇)
- 30天自制操作系统------保护操作系统
- X86保护模式编程总结(2)
- Win7下复制文件提示0x80070057错误的解决方法
- uchome 数据字典详解
- 2013年暑假队内选拔赛题解3
- 2013年暑假队内选拔赛题解4
- ORACLE 11G RAC ASM磁盘全部丢失后的恢复
- 自制X86操作系统(1)-系统引导篇3(保护模式)
- experiment : 用OD下消息断点, 捕获按钮操作.
- 单车到飞船
- button1 cannot be resolved or is not a field
- poj 2653 Pick-up sticks
- Hardcoded string "Button", should use @string resource
- MySQL的concat,concat_ws,group_concat
- VMware vSphere 服务器虚拟化之二十三 桌面虚拟化之创建手动虚拟桌面池
- 【解决办法】ubuntu server 版的 ISO文件,在 Ultra ISO 打开,内容不对,写入到 启动U盘,也不能引导系统