一、磁盘引导程序(2)

本文详细介绍了实模式与保护模式的基本概念,通过一个简单的磁盘引导程序实例,解释了如何从实模式转换到保护模式,并深入探讨了两种模式在地址计算方式上的区别。重点突出了GDT在全球描述符表中的作用及其在地址计算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单的磁盘引导程序

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



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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值