本文主要是介绍x86 LES指令解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. SDM指令功能描述(LES) 总体描述:用32位或48位的数据加载16位ES段选择符和16或32位的通用寄存器值,其中通用寄存器在目的操作数中。LES (16or32)通用寄存器, (32or48)内存变量的地址
注意:LES指令不支持64位模式
2. 伪代码:
64位模式:
#UD
32位模式:
if(selector is not NULL)
{
if((selector指向gdt或者ldt超出了gdt或ldt的limit) or (描述符的意义说明不是数据段也不是可读的代码段) or (在(RPL>DPL 或 CPL>DPL)的前提下,段不是数据段也不是非一致性代码段))
{
#GP
}
else
{
ES选择符赋值ES段描述符(对软件不可见)赋值}}else(selector is NULL){ES=0ES段描述符(对软件不可见)=0
}
DEST=*(SRC)
16位实模式
ES=*(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("lesl %0, %%eax\t\n"::"m"(les));
}
bochs执行效果
这篇关于x86 LES指令解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!