保护模式编程

本文详细介绍了80286微处理器在保护模式下新增的高级语言指令和控制保护指令,如PUSHA/POPA、BOUND、ENTER/LEAVE等,以及LAR、LSL、LGDT/LIDT、SGDT/SIDT、LLDT、SLDT、LTR、STR、LMSW、SMSW、ARPL、CLTS、VERR/VERW等指令的功能、语法和使用场景,帮助理解保护模式编程的基本操作和流程。
摘要由CSDN通过智能技术生成

随着80286微处理器体系结构的重大变化,它的指令系统也得到了增强和补充,x86的发展进入了保护模式阶段。首先,介绍一下新增加的一些指令:

一、新增高级语言指令

1.       PUSHA/POPA指令

 

功能: 压入所有通用寄存器

语法: PUSHA/POPA

 

该指令是重点指令,用于将通用寄存器的内容压入堆栈,这些寄存器按以下顺序存储到堆栈: AXCXDXBXSP(原始值)、BPSI DI(如果操作数大小属性为 16)。POPA指令执行它的逆操作。SP 寄存器压入的值是它在第一个寄存器压入之前的值。

 

在实地址模式中,如果执行 PUSHA 指令时,SP 寄存器为 13 5,则处理器会由于堆栈空间不足而关闭,产生此情况的异常。

 

2.       BOUND指令

 

功能: 检查数组下标边界

语法: BOUND r16, m16&16

 

该指令用于确定第一个操作数(数组下标)是否在第二个操作数(边界操作数)指定的数组边界内。数组下标是寄存器中的有符号整数。边界操作数是内存位置,它包含一对有符号双字整数(操作数大小属性为 32 时)或一对有符号字整数(操作数大小属性为 16 时)。第一个双字(或字)是数组的下限,第二个双字(或字)是数组的上限。数组下标必须大于或等于下限,且小于或等于上限加上操作数大小(以字节计)。如果下标不在边界内,则会发出超出 BOUND 范围异常 (#BR) 的信号。(生成此异常时,保存的返回指令指针将指向 BOUND 指令)。

 

边界限制数据结构(包含数组上限与下限的两个字或双字)通常就放在数组本身的前面,这样从数组开始处偏移一定的量就可以找到此限制的地址。由于数组的地址已经在寄存器中,因此这种做法可以避免花费额外的总线周期去获取数组边界的有效地址。

 

3.       ENTER指令

 

功能: 生成过程参数的堆栈帧

语法: ENTER imm16,imm8

 

为过程创建堆栈帧。第一个操作数(大小操作数)指定堆栈帧的大小(即堆栈上给过程分配的动态存储空间字节数)。第二个操作数(嵌套层数操作数)给出过程的词法嵌套层级(0 31)。嵌套层级确定要从上一帧复制到新堆栈帧“显示区”的堆栈帧指针数。这两个操作数都是立即数。

 

堆栈大小属性确定是由 BP16 位)还是 EBP32 位)寄存器指定当前帧指针,以及是由 SP16 位)还是 ESP32 位)指定堆栈指针。

 

ENTER 与伴随的 LEAVE 指令提供用于支持块结构语言。ENTER 指令(使用时)通常是过程中的第一条指令,用于为过程建立新的堆栈帧。然后,在过程的末尾(就在 RET 指令的前面),使用 LEAVE 指令释放堆栈帧。

 

如果嵌套层级为 0,则处理器将帧指针从 BP 寄存器压入堆栈,将当前堆栈指针从 SP 寄存器复制到 BP 寄存器,并将当前堆栈指针值减去大小操作数中的值之后的结果加载到 SP 寄存器。如果嵌套层级大于或等于 1,则处理器在调整堆栈指针之前,先将其它帧指针压入堆栈。这些额外的帧指针为被调用过程访问堆栈上的其它嵌套帧提供访问点。

 

4.       LEAVE指令

 

功能: 高级过程退出

语法: LEAVE

 

释放早先的 ENTER 指令设置的堆栈帧。LEAVE 指令将帧指针(在 EBP 寄存器中)复制到堆栈指针寄存器 (ESP),从而释放分配给堆栈帧的堆栈空间。然后,旧的帧指针(由 ENTER 指令保存的调用过程的帧指针)从堆栈弹入 EBP 寄存器,从而恢复调用过程的堆栈帧。

 

LEAVE 指令后面通常执行 RET 指令,以便将程序控制权返回给调用过程。

 

二、控制保护指令

 

接下来就要进入保护模式编程了。注意,保护模式编程并不是什么高深莫测的东西,而是16条只能在保护模式先执行的指令。

 

1.       LAR指令

 

功能: 加载访问权限字节

语法: LAR r16,r/m16

说明: r16 FF00H 掩码 r/m16

 

从第二个操作数(源操作数)指定的段描述符将访问权限加载到第一个操作数(目标操作数),并设置 FLAGS 寄存器中的 ZF 标志。源操作数(可以是寄存器或内存位置)包含要访问的段描述符的段选择器。目标操作数是通用寄存器。

 

作为加载过程的一部分,处理器会执行访问检查。加载到目标寄存器之后,软件就可以在访问权限信息上执行附加的检查。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值