lea

lea

LEA是微機8086/8088系列的一條指令,取自英語Load effective address——取有效地址,也就是取偏移地址。在微機8086/8088中有20位物理地址,由16位段基址向左偏移4位再與偏移地址之和得到。地址傳送指令之一。

基本介紹

  • 中文名:取有效地址
  • 外文名:Load effective address
  • 縮寫:lea
簡介,指令格式,舉例,LEA與MOV指令,

簡介

lea指令用於把源運算元的地址偏移量傳送目的運算元。源運算元一定要是一個存貯器運算元,而召的運算元可以是任何的16位的通用暫存器,包括指針暫存器/變址暫存器。lea指令允許源運算元被下標標出,但是不允許使用帶有OFFSET操作符的MOV指令。另外,後面的操作一定要使用被定義的段中的變數偏移量。然而,如果這組僅僅能夠通過最後的ASSUME偽指令操作存取的話,lea指令將把它當作一組偏移量。

指令格式

如下:
LEA reg16,mem
LEA指令將存儲器運算元mem的4位16進制偏移地址送到指定的暫存器。這裡,源運算元必須是存儲器運算元,目標運算元必須是16位通用暫存器。因該暫存器常用來作為地址指針,故在此最好選用四個間址暫存器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, (51000H)=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與MOV指令

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的偏移地址。

相關詞條

熱門詞條

聯絡我們