能力值:
( LV3,RANK:20 )
|
-
-
2 楼
LEA 传操作数地址。。Load Effectiv Address 还是英文好理解点。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
有个函数
_Test proc
local @var
ret
_Test endp
请楼主告诉我,如何在函数里取得@war的地址?如果你能够回答,就知道lea的作用了
|
能力值:
(RANK:260 )
|
-
-
4 楼
只学过几天汇编语言,不要胡乱说话。
在你的例子中
lea eax, dword ptr ss:[esp+44]
谁能解释下这条指令
假如 SS=1000H,ESP =1000H,[2044] = 12345678H,EAX = 5000H
这条指令执行过后,EAX是多少 ?
这条指令执行过后EAX = ESP+0x44 == 0x1044,而不是你说的0x2044。
LEA是INTEL颇为得意的一条指令(虽然大多数程序员并不以为然)。在INTEL OPTIMIZATION REFERFENCE MANUAL中,特别提到了这条指令的好处。
0.LEA指令具有单时钟周期,执行效率很高。
1.它是CPU地址生成单元参与运算的,而不是ALU参与运算的,所以在流水线上不会与上下文的算术逻辑指令产生流水相关
2.INTEL指令集中不存在很多RISC机器所具有的三操作数算术运算指令,比如像ARM的"add r0,r1,r2",而LEA指令恰好提供了同样的功能,以模拟“三元算术逻辑指令”。
举个例子,要计算两个寄存器的和,但又不想破坏原来的值,那么可以执行lea ebx ,[eax+edx], 这条指令,执行的就是 ebx = eax + edx 这条加法运算。如果用add指令,则不可能一条指令内完成。
3.在汇编语言程序设计中,在需要取得一个变量地址时,使用LEA是很方便的。而MOV指令则常常出错,因为在微软MASM汇编语法中,label和variable是不同的。
|
能力值:
(RANK:350 )
|
-
-
5 楼
lea eax,[esp+44]的功能就是eax=esp+44
这样的格式出现
是因为mov指令不支持mov reg,reg+immed这样的格式
当然也可以用lea来进行快速加法、乘法......
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我也觉得LEA不是必须的
|
能力值:
( LV9,RANK:170 )
|
-
-
7 楼
赞一个,这次书呆彭回答得很专业。
确实,lea 不在 ALU 里执行,而是在 AGU (address generation unit) 里执行
ALU 与 AGU 是并行的整数运算单元,将巧妙地 lea 与 add 分开并行执行,很大程度提高吞吐量。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我也觉得LEA不是必须的
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
菜鸟学习中。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
书呆彭 应该是专门教汇编的教授吧,见解非常祥细,学习中。。。
顺便再建议下论坛里的表情符能多弄点,有时说不出来的话,一个表情就OK
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
暂时不理解
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
lea传送的地址
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
学习了,赞一个!!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
学写了,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
受教了,汇编不太懂,正在学习中
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
地址传送指令 用lea比用mov 更简便么
|
能力值:
( LV4,RANK:50 )
|
-
-
17 楼
专业啊。一个lea有这么多讲究。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
强大。学习中。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
就像5楼说的那样子
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
有效地址传送指令 LEA
格式: LEA OPRD1,OPRD2
功能: 将源操作数给出的有效地址传送到指定的的寄存器中
说明:
1. OPRD1 为目的操作数,可为任意一个16位的通用寄存器.
OPRD2 为源操作数,可为变量名、标号或地址表达式.
示例: LEA BX,DATA1
LEA DX,BETA[BX+SI]
LEA BX BX,[BP],[DI]
2. 本指令对标志位无影响。
偶也正在学习中
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
书呆彭 你亮了
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
书呆彭讲的经典
|
能力值:
( LV3,RANK:20 )
|
-
-
23 楼
lea eax, dword ptr ss:[esp+44]
如果楼主非要用MOV指令来代替,得分为两句
mov eax,esp
add eax,44
相当于小学数学里面的定义一样,先括号,后解括号外面的,lea,间接传送.mov是直接传送.不知道我的回答是否正确.求楼下指正
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
谢谢书呆彭大师的讲解,学习了
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
学习 理解中
|
|
|