【发布时间】:2014-04-14 07:11:09
【问题描述】:
在参考指南中,我看到MOV 的操作码是 88、89、8A 等。为什么一条指令有多个操作码?
【问题讨论】:
在参考指南中,我看到MOV 的操作码是 88、89、8A 等。为什么一条指令有多个操作码?
【问题讨论】:
这是因为从 CPU 的角度来看,这些指令略有不同。虽然助记符相同,但操作数不同。比如this reference,指令栏清楚地显示了这些操作码之间的区别。
【讨论】:
它们适用于不同类型的来源和目的地。对于 CPU 而言,在注册表和内存位置之间移动 8 位和 16/32 位值之间存在很大差异,因此它被编码为不同的操作码。
【讨论】:
CPU 需要能够解码指令的含义。
由于不同类型的操作数有多种移动,CPU 需要知道如何解释它们。如果操作码相同,则无法判断以下位是寄存器号还是内存地址。更不用说具有相同助记符的不同类型的指令实际上使用不同的字节数进行编码,因此 CPU 甚至无法判断下一条指令从哪里开始。
详情见Intel® 64 and IA-32 Architectures Software Developer’s Manual中的附录B。
【讨论】: