各种MOV操作码有什么区别?

时间:2014-04-14 07:11:10

标签: assembly x86 opcode mov

在参考指南中,我看到MOV是操作码88,89,8A,......等。为什么一条指令有多个操作码?

3 个答案:

答案 0 :(得分:4)

这是因为这些指令与CPU的观点略有不同。虽然助记符是相同的,但操作数是不同的。例如,在this reference中,指令列清楚地显示了这些操作码之间的区别。

答案 1 :(得分:1)

它们适用于不同类型的来源和目的地。对于CPU,将8和16/32位值移入和移出寄存器和存储器位置之间存在很大差异,它被编码为不同的操作码。

List of opcodes

答案 2 :(得分:1)

CPU需要能够解码指令的含义。

由于存在多种不同类型操作数的移动,CPU需要知道如何解释它们。如果操作码相同,则无法判断以下位是寄存器号还是存储器地址。更不用说具有相同助记符的不同类型的指令实际上使用不同的字节数进行编码,因此CPU甚至无法分辨下一条指令的开始位置。

有关详细信息,请参阅Intel® 64 and IA-32 Architectures Software Developer’s Manual中的附录B.