关于我们 | 免责声明 | Tag标签 | 电脑软硬件余额宝5元红包免费领取网 - 关注电脑、网络和软件等操作技能技巧余额宝5元红包免费领取!

一个简单的磁盘引导程序,实模式VS保护模式

时间:2016-12-08 23:37??网站:电脑软硬件余额宝5元红包免费领取网???编辑:admin

一、简单的磁盘引导程序

?

简单的说明:余额宝5元红包免费领取加电后,BIOS检查硬件等等,BIOS调用19号中断加载磁盘引导程序。

以下用NASM编写的一个简单的磁盘引导程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;?? ?'$'表示当前代码行的地址,'$$'表示起始代码地址
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[bits 16]??????????????????????????????????? ;说明这是16位代码(可以不写)
org?? ?7c00h?? ??? ??? ????????????????? ;在运行时将此段程序加载到内存7c00h位置
jmp?? ?$?? ??? ??? ? ? ? ? ? ? ? ? ? ? ? ??? ;循环
times?? ?510 - ($ - $$) ?? ?0?? ? ;剩余部分填充0,总大小为512,为0xaa55预留2字节

dw?? ?0xaa55?? ??? ??? ??????????????? ;结束标志

二、实模式与保护模式

简单来理解,实模式运行在16位环境下,保护模式运行在32位环境下。32位环境中寻址空间可达4GB,除此之外,32位环境中可以很好的支持多任务。

从执行程序的角度来理解两种模式:

1、实模式

实模式下计算地址方式是通过“16位段地址(寄存器中)*16h+偏移”来实现的。

例如指令的寻址:CS*16h + IP

实模式

实模式

2、保护模式

保护模式下计算地址的方式是通过“GDT中存储的段地址*16h+偏移”来实现的。32位模式下,16位的段地址被用来寻找GDT的位置。

例如指令的寻址:CS-->GDT代码段位置*16h + IP

解释一下GDT(Global Descriptor Table),看一下他的结构:

GDT(Global Descriptor Table)

GDT(Global Descriptor Table)

从表中可以看出,GDT首先是一个数组结构,每一个条目存储了段的信息。下面就可以来理解保护模式下如何通过描述符表来进行地址计算了:

地址计算

地址计算

以上是实模式向保护模式转换的基本原理

标签(Tag):磁盘引导程序
------分隔线----------------------------
------分隔线----------------------------

相关文章