天天看點

X86 LDS指令解析

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)
    );
}
           

繼續閱讀