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 = ;
les.b = ;
__asm__ volatile
(
"ldsl %0, %%eax\t\n"
::"m"(les)
);
}