段寄存器

一、段寄存器有哪些?

    通常我们用汇编读写某一个地址时,如下

    mov  dword ptr ds:[0x123846],eax

    这时我们把eax的值往地址去写,写的地址是:

    ds.base+0x123846


    段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。


二、段寄存器的结构

    图形表示:


     结构体表示:

struct SegMent
{
	WORD Selector;	//16位Selecter	选择子
	WORD Atrributes;//16位Atrribute	属性
	DWORD Base;	//32位Base
	DWORD Limit;	//32位Limit
};

    总结:总共有96位,其中16位段选择器可见,其余80位不可见


三、段寄存器的读写

    ----读段寄存器

         比如  mov ax,es//只能读16位的可见部分

    ----写段寄存器

         比如  mov ds,ax//写时是写96位的

    引出问题,那么ax是16位的,送到ds中,那么ds中其余80位填写什么呢?

    答:段描述符

           当执行mov ds,ax时,CPU都会查表,根据ax的值查找GDT还是LDT!

   具体见GDTR与LDTR

   找到段描述符后,根据段描述符64位去填充寄存器中不可见部分的80位。(注意G,因段描述符中的Limit位数为20位即FFFFF,而段寄存器中的Limit属性位数为32!当G位为0时,则单位为字节,最大值为FFFFF,填充0X000FFFFF;当G位为1时,则单位为4KB,4KB即FFF(填充段寄存器中低12位),段描述符中的Limit位数填充高20。例如P位为1时段描述符中的Limit值为0X123,那么填充到段寄存器中为0X123FFFP位为1时段描述符中的Limit值为0XFFFFF,那么填充到段寄存器中为0XFFFFFFFF!)


段描述符示意图如下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值