Assembly 为什么';是否存在MIPS的子操作码?

Assembly 为什么';是否存在MIPS的子操作码?,assembly,mips,cpu-architecture,instructions,instruction-set,Assembly,Mips,Cpu Architecture,Instructions,Instruction Set,我对汇编语言非常陌生。我正在阅读有关MIPS体系结构的书籍,了解到您有addi操作码,但没有subi操作码。为什么我们没有一个subi操作码?当你创建一个指令集时,你会受到一些约束,比如你可以创建的指令总数。MIPS创建者意识到不需要subi(因为可以使用2的补码用addi添加负数),他们只是决定放弃该指令。这可能是为了节省指令的数量,或者仅仅是因为不需要它。这两个addi和addiu都将16位有符号立即数作为操作数,因此添加单独的subi和subiu操作码是没有意义的。非常感谢。所以他们遵循了

我对汇编语言非常陌生。我正在阅读有关MIPS体系结构的书籍,了解到您有
addi
操作码,但没有
subi
操作码。为什么我们没有一个
subi
操作码?

当你创建一个指令集时,你会受到一些约束,比如你可以创建的指令总数。MIPS创建者意识到不需要
subi
(因为可以使用2的补码用
addi
添加负数),他们只是决定放弃该指令。这可能是为了节省指令的数量,或者仅仅是因为不需要它。

这两个
addi
addiu
都将16位有符号立即数作为操作数,因此添加单独的
subi
subiu
操作码是没有意义的。

非常感谢。所以他们遵循了这个规则,即“少即是多”。@justanother程序员——可能就是这样。祝MIPS好运!是一本学习计算机体系结构的好书(圣经),如果你想练习MIPS汇编,那么是一个不错的工具。为什么需要“sub”呢?我们不能使用“添加”来执行任何“sub”操作吗complement@mskd96是的,您可以通过这种方式执行
sub
,因此严格来说这不是必需的。但是,除非有另一个重要的操作可以通过包含
sub
而从ISA中省略,否则将其包含在ISA中并不是有害的。@mskd96您忘记了Patterson和Hennessy的设计原则之一:“快速处理常见情况”
sub
subi
更常见,即时数大于32767,所以这就是引入指令的原因,否则我们可以有一个完整的指令集,并且执行普通操作的速度非常慢。“好的设计需要好的折衷”他们可以很容易地在汇编程序中添加一个映射到同一硬件指令的subi操作码。@Bo任何一个像样的MIPS汇编程序都支持subi助记符(发出addi)。@Bo Persson:那么它就不是一个操作码,但伪指令:)只是一个问题:
addi
符号中的立即数在添加到寄存器时是否扩展?@user35443:是的,同样适用于
ADDIU
ADDIU
addi
的区别在于它不会引发溢出异常)接近重复。一些MIPS汇编程序将
subi
实现为伪指令。(包括火星模拟器,但不包括SPIM。)