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芯片的参考leamov ,而是仅由一个时钟周期(以及如果所述数据不是在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

    上一篇: LEA & MOV instruction comparision

    下一篇: Alternative syntax for the LEA instruction