Instruction 1:
LEA DX, MESSAGE ; Move the address of MESSAGE in register DX
Instruction 2:
MOV DX, OFFSET MESSAGE ; Move the address of MESSAGE in register DX
问题:
-
上述说明是否相同?他们似乎工作方式相似,但我刚刚开始编程程序集,所以我不能说 .
-
如果它们都相似,那么上面哪一个是更好的方法来完成上述任务?
注意:我已经读过这个question
1 回答
在我的32位系统上,指令匹配这样的操作码:
因此,如果使用
lea
,则在代码加载到内存时使用一个额外的字节 .我发现对AMD芯片的引用一度具有较低的延迟
lea
而不是mov
,但只有一个时钟周期(如果数据不在L1缓存中,这将是无关紧要的) . 我不确定这个结果是否适用于最近的处理器 .我发现
lea
在尝试向基址添加偏移时非常有用,如下所示:而我不能这样做:
这会产生错误的结果:
至少在我的汇编程序(GNU as)中 .