各种体系结构的基本指令之间有很多的相似之处,这里我们以MIPS的基本指令为基准,对比另外的指令集。
MIPS主要指令
几乎所有的体系结构都可以找到跟MIPS基本指令相似的指令,就像图9到图13所示的这样。指令可以分为四类:数据传输(图9);算术,逻辑(图10);控制(图11);浮点指令(图12)。第五类(图13)是寄存器使用的约定和各个体系结构的伪指令。如果一条MIPS基本指令在另外的体系结构中需要顺序的几条指令来替代,在图9到13中用分号来连接。(为了防止混淆,在这里,目的寄存器总是最左边的那个,不一定跟各个指令集中原本的用法一样。)图14到图17罗列的是嵌入式RISC中等价的指令。嵌入式RISC中一般不会定义浮点指令。
图9:MIPS对应的桌面RISC数据传输指令。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。在这个图中,半字是16bit,一个字是32个bit。注意在Alpha中,LDS将单精度浮点转换成双精度浮点,并且填满了整个64位寄存器。
图10:MIPS对应的桌面RISC算术/逻辑指令。破折号代表那个体系结构没有对应的指令,或者说不是几条指令就可以得到等价的操作。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。在算术/逻辑类指令中,除了SPARC的体系结构都用不同的指令助记符来标明一个立即数操作。SPARC直接提供多个立即数版本的指令(当然,它们是独立的操作符)。
图11:MIPS对应的桌面RISC控制指令。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。
图12:MIPS对应的桌面RISC浮点指令。破折号代表那个体系结构没有对应的指令,或者说不是几条指令就可以得到等价的操作。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。
图14:MIPS对应的嵌入式指令传输指令。等价MIPS指令的几条顺序指令,由分号分隔。注意的是嵌入式RISC一般没有浮点指令定义。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。破折号说明存在32位指令,但是不存在16位指令。
图15:MIPS对应的嵌入式RISC算术/逻辑指令。破折号代表那个体系结构没有对应的指令,或者说不是几条指令就可以得到等价的操作。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。上标1说明存在32位指令,但是不存在16位指令。上标2代表只存在16位的模式中。ARM在所有数据操作指令中都可以移位,所以上标3代表是move指令的一个变种,比如LSR3。
图16:MIPS对应的嵌入式RISC控制指令。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。破折号1说明存在32位指令,但是不存在16指令。上标2代表只存在16位的模式中。