lea
lea
:
,
指令存儲器操制偏移址送指寄存器。,源操必須存儲器操,標操必須寄存器。該寄存器常用來作為地址指針,故在此最好選用四個間址寄存器BX,BP,SI,DI之一。
LEA 取有效地址指令(Load Effective Address )
指令格式:LEA 目的,源
指令功能:取源操作數地址的偏移量,並把它傳送到目的操作數所在的單元。如:
LEA BX ,BUFFER
LEA AX,[BX][DI](j基址加變址定址)
LEA DX,DATA [BX][SI](相對基址加變址定址)
LEA 指令要求源操作數必須是存儲單元,而且目的操作數必須是一個除段寄存器之外的16位或32位寄存器。當目的操作數是16位通用寄存器時,那麼只裝入有效地址的低16位。使用時要注意它與MOV指令的區別,MOV指令傳送的一般是源操作數中的內容而不是地址。
例1 假設:SI=1000H , DS=5000H, (1000H)=1234H
執行指令 LEA BX , [SI]后,BX=1000H
執行指令 MOV BX , [SI]后,BX=1234H
有時,LEA指令也可用取偏移地址的MOV指令替代。
例2 下面兩條指令就是等價的,他們都取TABLE的偏移地址,然後送到BX中,即
LEA BX,TABLE
MOV BX,OFFSET TABLE
但有些時候,必須使用LEA指令來完成某些功能,不能用MOV指令來實現,必須使用下面指令:
LEA BX, 6[DI]
解釋:某數組含20個元素,每個元素佔一個位元組,序號為0~19。設DI指向數組開頭處,如果把序號為6的元素的偏移地址送到BX中
工程上的LEA是抗震時的錨固長度
lea指令用於把源操作數的地址偏移量傳送目的操作數。源操作數一定要是一個存貯器操作數,而召的操作數可以是任何的16位的通用寄存器,包括指針寄存器/變址寄存器。lea指令允許源操作數被下標標出,但是不允許使用帶有OFFSET操作符的MOV指令。另外,後面的操作一定要使用被定義的段中的變數偏移量。然而,如果這組僅僅能夠通過最後的ASSUME偽指令操作存取的話,lea指令將把它當作一組偏移量。
LEA指令和MOV指令一樣是移動數據,但是與MOV不同的是,它移動的是“[ ]”裡面的內容,例如:LEA EAX,[ECX]中,執行這條指令相當於MOV EAX,ECX。而MOV EAX,[ECX]是把“[ ]”裡面的數據當成是內存地址編號,取地址裡面的內容。
注意LEA指令與MOV指令的區別,比較下面兩條指令: LEA BX, BUFFER MOV BX, BUFFER
前者將存儲器變數BUFFER的偏移地址送到BX,而後者將存儲器變數BUFFER的內容(兩個位元組)傳送到BX。當然也可以用MOV指令來得到存儲器的偏移地址,例如以下兩條指令的效果相同: LEA BX, BUFFER MOV BX, OFFSET BUFFER
其中,OFFSET BUFFER表示存儲器變數BUFFER的偏移地址。