汇编语言 lea 是什么意思?

来源:百度知道 编辑:UC知道 时间:2024/05/01 03:45:53
-a100
0AFC:0100 mov bx,0400
0AFC:0103 mov si,003c
0AFC:0106 lea bx,[bx+si+0f62]
0AFC:010A int 3
0AFC:010B
-g=100

AX=0000 BX=139E CX=0000 DX=0000 SP=FFEE BP=0000 SI=003C DI=0000
DS=0AFC ES=0AFC SS=0AFC CS=0AFC IP=010A NV UP EI PL NZ NA PO NC
0AFC:010A CC INT 3
lea bx,[bx+si+0f62]这一句话解释一下
我所知道的是将有效地址传给 bx 但是为什么结果中bx 的值和bx+si+0f62中的结果一样啊
希望解释一下 什么是有效地址 物理地址 段地址 偏移量 以及它们之间的关系?
bx和bx+si+0f62 相加的结果一样。
bx+si+0f62=139e lea bx,[bxsi+0f62]后bx是139e
测试后[bx+si+0f62]值是 1c74
bx+si+0f62值是 0f62

LEA指令的功能是将源操作数、即存储单元的有效地址(偏移地址)传送到目的操作数。

LEA有两个操作数。

  1. 左边是目的操作数,表示操作结果保存在此,该指令目的操作数只能是8个通用寄存器之一。

  2. 右边的是源操作数,该指令的源操作数只能是一个存储单元,表达存储单元有多种寻址方式。

示例:LEA BX,[BX+SI+0F54H]

  [BX+SI+0F54H]采用相对基址变址的寻址方式表达存储单元,它表示的存储单元的有效地址是:BX内容加SI内容加0F54H。这个结果被传送到BX中。

LEA是取变量的地址

LEA另一用途就是代替乘法运算,比如LEA EAX,[EAX*4+EAX]就要比用MUL去实现EAX*5来得快捷

取地址中数值