04-段描述符与段选择子

要点回顾:

上一节课我们讲过,当写一个段寄存器的时候,只给了一个16位的数,但段寄存器有96位,那剩下的80位从哪里来的?这个16位的数是随便写的吗?

1、GDT(全局描述符表) LDT(局部描述符表)
windows 只是用了GDT这个表,LDT没使用。
当我们执行类似MOV DS,AX指令时,CPU会查表,根据AX的值来决定

查找GDT还是LDT,查找表的什么位置,查出多少数据.
在这里插入图片描述
r指令 register 查看gdtr的地址
r gdtr 查看gdt这个表的地址32位
r gdtl 查看gdt这个表的大小16位
dd 8003f000 dword 4个字节一组
dq 8003f000 qword 8个字节一组

2、段描述符
在这里插入图片描述

3、段选择子

段选择子是一个16位的段描述符,该描述符指向了定义该段的段描述符.

在这里插入图片描述

RPL:请求特权级别

TI:
TI=0 查GDT表
TI=1 查LDT表

Index:
处理器将索引值乘以8
在加上GDT或者LDT的
基地址,就是要加载的
段描述符

4、加载段描述符至段寄存器

除了MOV指令,我们还可以使用LES、LSS、LDS、LFS、LGS指令修改寄存器.

CS不能通过上述的指令进行修改,CS为代码段,CS的改变会导致EIP的改变,要改CS,必须要保证CS与EIP一起改,后面会讲.

char buffer[6];					
__asm							
{			
	les ecx,fword ptr ds:[buffer] //高2个字节给es,低四个字节给ecx	
}

注意:RPL<=DPL(在数值上)

课后练习:

1、记住段描述符与段选择子的结构

2、使用LES、LDS等指令修改段寄存器

思考题:

段描述符共有64位,但需要填充的是80位,怎么填?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值