繁体   English   中英

LEA & MOV 指令比较

[英]LEA & MOV instruction comparision

说明 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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM