LEA是微機8086/8088系列的一條指令,取自英語Load effect address——取有效地址,也就是取偏移地址。在微機8086/8088中有20位物理地址,由16位段基址向左偏移4位再與偏移地址之和得到。地址傳送指令之一。
取偏移地址指令
指令格式如下:
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](相對基址加變址尋址)[1]
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中