LEA & MOV instruction comparision

流过昼夜 提交于 2019-12-02 01:38:20

On my 32-bit system, the instructions match opcodes like this:

8d 15 c8 90 04 08       lea    0x80490c8,%edx
ba c8 90 04 08          mov    $0x80490c8,%edx

So you use a whole extra byte when the code is loaded into memory if you use lea.

I found a reference to AMD chips at one point having lower latency for lea than for mov, but only by one clock cycle (and this will be immaterial if the data is not in L1 cache). I am not sure if that result holds for recent processors.

I have found lea useful when trying to add an offset to a base address like this:

lea message(,%esi,2), %ecx  # put address of message + 2 x ESI in ECX

whereas I can't do this:

mov $message(,%esi,2), %ecx  # fails on bad syntax

and this produces the wrong result:

mov message(,%esi,2), %ecx  # puts _content_ at address, not address, into ECX 

at least in my assembler (GNU as).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!