X86 LDS指令解析

来源:互联网 发布:python难找工作 编辑:程序博客网 时间:2024/06/06 17:12

DM指令功能描述(LDS)

总体描述:

用32位或48位的数据加载16位DS段选择符和16或32位的通用寄存器值,其中通用寄存器在目的操作数中。

LDS (16or32)通用寄存器, (32or48)内存变量的地址

注意:LDS指令不支持64位模式

伪代码:

64位模式:

#UD

32位模式:

if(selector is not NULL){    if((selector指向gdt或者ldt超出了gdt或ldt的limit) or   (描述符的意义说明不是数据段也不是可读的代码段) or   (在(RPL>DPL 或 CPL>DPL)的前提下,段不是数据段也不是非一致性代码段))     {         GP     }     else     {         DS选择符赋值 DS段描述符(对软件不可见)赋值     } }  else(selector is NULL)  {      DS=0 DS段描述符(对软件不可见)=0  } 

16位实模式:
DS=(SRC+2) DEST=(SRC)

测试代码

struct lseg_st{    long  a;    int16_t b;    };void test(){    struct lseg_st les;    les.a = 0xffffffff;    les.b = 0x08;     __asm__ volatile     (             "ldsl  %0, %%eax\t\n"             ::"m"(les)    );}
原创粉丝点击