问题描述
我有点被注释为Linux内核,arch/x86/include/asm/nops.h.它指出,
I guess the author implied the machine instructions ('89 F6' and '8D 76 00', respectively) there rather than assembly instructions. It follows from the description of LEA
in Intel Software Developer's Manual Vol 2A that the latter instruction (lea 0x00(%rsi), %esi
) does the same as the the former, mov %esi,%esi
.
So this reduces to the question, whether mov %esi,%esi
is actually a no-op on x86-64.
mov
does not change flags. This kind of mov
does not change memory either. It seems, if it changes something besides %rip
, that should be general purpose registers. But I have no clue how it can change the contents of %rsi
or whatever. If you manipulate the lower half of a general purpose register, the upper half should not change, right?
mov %esi, %esi
zeros out the high 32 bits of %rsi, and is therefore not a no-op on x86_64.
这篇关于是MOV%ESI,ESI%无操作或不x86-64的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!