现在的位置: 首页 > 技术文章 > 基础知识 > 正文

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

2013年12月09日 基础知识 ⁄ 共 1135字 ⁄ 字号 暂无评论 ⁄ 阅读 56 次

一、简单的磁盘引导程序

简单的说明:计算机加电后,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首先是一个数组结构,每一个条目存储了段的信息。下面就可以来理解保护模式下如何通过描述符表来进行地址计算了:

地址计算

地址计算

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

给我留言

留言无头像?



×