LEA和MOV指令比较
指令1:
LEA DX, MESSAGE ; Move the address of MESSAGE in register DX
指令2:
MOV DX, OFFSET MESSAGE ; Move the address of MESSAGE in register DX
问题:
注意:我已经阅读过这个问题
在我的32位系统上,这些指令匹配如下的操作码:
8d 15 c8 90 04 08 lea 0x80490c8,%edx
ba c8 90 04 08 mov $0x80490c8,%edx
所以如果你使用lea
当代码被加载到内存中时你会使用一个额外的字节。
我在具有用于更低的等待时间的一个点发现AMD芯片的参考lea
比mov
,而是仅由一个时钟周期(以及如果所述数据不是在L1高速缓存,这将是不重要的)。 我不确定这个结果是否适用于最近的处理器。
当我尝试向这样一个基地址添加一个偏移量时,我发现lea
十分有用:
lea message(,%esi,2), %ecx # put address of message + 2 x ESI in ECX
而我不能这样做:
mov $message(,%esi,2), %ecx # fails on bad syntax
这会产生错误的结果:
mov message(,%esi,2), %ecx # puts _content_ at address, not address, into ECX
至少在我的汇编程序中(GNU as)。
链接地址: http://www.djcxy.com/p/12559.html