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ù)類型
指令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ù)類型

