X86 LSS指令详解

SDM指令功能描述(LSS)
总体描述:
用32位或48位或64位的数据加载16位SS段选择符和16或32位或64位的通用寄存器值,其中通用寄存器在目的操作数中。
LSS (16or32or64)通用寄存器, (32or48or64)内存变量的地址

伪代码:
64位模式:
if(selector is NULL && ((RPL==3) or (RPL!=3 && RPL!=CPL)))
{
    #GP
}
else if(描述符不合法)
{
    #GP
}
else if((selector->index超出了所在表的limit) or
                   (RPL!=CPL) or
   (指向的描述符说明是不可写的数据段) or
   (DPL!=CPL))
{
    #GP
}
SS选择符赋值
SS描述符赋值
DEST=*(SRC)

32位模式:
if(selector is NULL)
{
    #GP
}
else if(index超出了表的limit限制 or 
      (selector->RPL != CPL) or
                  (DPL!=CPL))
{
    #GP
}
else if(描述符中信息说明段不存在)
{
    #SS
}
SS选择符赋值
SS描述符赋值
DEST=*(SRC)

16位实模式
SS=*(SRC+2)
DEST=*(SRC)

标志位影响:

相关异常:
GP:当显示或隐示的使用CS, DS, ES, FS, GS加上一个偏移作为内存访问地址时超出limit
SS:使用SS和一个指针访问内存超出ss段limit
UD:当使用了LOCK prefix的时候

示例代码:

struct lseg_st{
    long  a;
    int16_t b;
    };
void test()
{
    struct lseg_st lss;
    lss.a = 0xffffffff;
    lss.b = 0x08;

     __asm__ volatile
     (

             "lssl  %0, %%eax\t\n"
             ::"m"(les)
    );
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值