说明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
注意: 我已经阅读了这个question
答案 0 :(得分:4)
在我的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)中。