PC技術(shù)輔導(dǎo):取有效地址指令

字號:

4、取有效地址指令LEA(Load Effective Address)
    指令LEA是把一個內(nèi)存變量的有效地址送給指定的寄存器。其指令格式如下:
    LEA Reg, Mem
    該指令通常用來對指針或變址寄存器BX、DI或SI等置初值之用。其功能如右圖所示。
    例如:
    圖5.4 LEA指令的功能示意圖
    …
    BUFFERDB 100 DUP(?)
    …
    LEABX, BUFFER     ;把字節(jié)變量BUFFER在數(shù)據(jù)段內(nèi)的偏移量送給BX
    …
    問題:指令“LEA BX BUFFER”和“MOV BX, OFFSET BUFFER”的執(zhí)行效果是一樣的嗎?指令“LEA BX,[BX+200]”和“MOV BX,OFFSET [BX+200]”二者都正確嗎?
    5、取段寄存器指令(Load Segment Instruction)
    該組指令的功能是把內(nèi)存單元的一個“低字”傳送給指令中指定的16位寄存器,把隨后的一個“高字”傳給相應(yīng)的段寄存器(DS、ES、FS、GS和SS)。其指令格式如下:
    LDS/LES/LFS/LGS/LSS Reg, Mem
    指令LDS(Load Data Segment Register)和LES(Load Extra Segment Register)在8086CPU中就存在,而LFS和LGS(Load Extra Segment Register)、LSS(Load Stack Segment Register)是80386及其以后CPU中才有的指令。
    若Reg是16位寄存器,那么,Men必須是32位指針;若Reg是32位寄存器,那么,Men必須是48位指針,其低32位給指令中指定的寄存器,高16位給指令中的段寄存器。指令的執(zhí)行結(jié)果如圖5.5所示。
    (a) 32位指針
    (b) 48位指針
    圖5.5、LDS指令的執(zhí)行步驟示意圖
    例如:
    …
    POINTER DD 12345678H
    …
    LDSBX, POINTER
    …
    指令的執(zhí)行結(jié)果如圖5.5所示。各寄存器的內(nèi)容分別為:(BX)=5678H,(DS)=1234H。
    下面控件是學(xué)習(xí)和掌握MOV、MOVSX/MOVZX、XCHG、LEA、LDS/LES/LFS/LGS/LSS指令的,它可檢查用戶輸入這些指令的合法性,并對合法的指令顯示其執(zhí)行的結(jié)果。
    注意:如果指令中含有表示內(nèi)存單元的尋址方式,那么其控件中的"內(nèi)存單元的類型"即表示該指令中內(nèi)存單元的數(shù)據(jù)類型