Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 加法rA,rB,r0和加法rA,rB,0之间有什么区别?_Assembly_Mips - Fatal编程技术网

Assembly 加法rA,rB,r0和加法rA,rB,0之间有什么区别?

Assembly 加法rA,rB,r0和加法rA,rB,0之间有什么区别?,assembly,mips,Assembly,Mips,我听说这些是非常不同的,但为什么结果不同呢 添加rA、rB、r0 指令类型是R,其中包含0的r0,因此0被添加到rB中,并放置在将包含rB+0的rA中,对吗 ADDI rA,rB,0 这是一个指令类型I,但它与第一个指令类型相同,还是不一样?您必须查看特定处理器的实现。如果处理器在读取r0时知道它可以设置快捷方式并将其设为零,那么它可以比去寄存器文件获取r0的值更快。如果有大量寄存器文件活动迫使暂停,那么这将起作用,只有在多条指令上存在寄存器文件干扰时才会增加时钟。基本上,我怀疑从这个角度看有什

我听说这些是非常不同的,但为什么结果不同呢

添加rA、rB、r0

指令类型是R,其中包含0的
r0
,因此0被添加到rB中,并放置在将包含rB+0的rA中,对吗

ADDI rA,rB,0


这是一个指令类型I,但它与第一个指令类型相同,还是不一样?

您必须查看特定处理器的实现。如果处理器在读取r0时知道它可以设置快捷方式并将其设为零,那么它可以比去寄存器文件获取r0的值更快。如果有大量寄存器文件活动迫使暂停,那么这将起作用,只有在多条指令上存在寄存器文件干扰时才会增加时钟。基本上,我怀疑从这个角度看有什么不同

就功能而言,这两条指令是等效的,因为r0总是读取为零,所以两个操作的结果都是相同的

ra = rb + 0.

ADD和ADDI信号都有溢出,但是将零添加到rb中无法得到溢出,因此使用ADD/ADDU或ADDI/ADDIU都无关紧要。“为什么结果不同?”-为什么您认为会这样?结果是相同的,实现它们的方法是不同的。MIPS是一种RISC架构,因此
添加rx,ry,r0
添加rx,ry,0
都会在一个时钟周期内产生结果。换言之,结果在添加后的后续指令的
rx
中可用,而此
add
指令的两个版本都没有任何管道暂停。这两条指令具有相同的功能和相同的性能。对,这不是我所说的。我最近一直在读一本H和P的书。因为r0是只读的,我不知道我所想的情况是如何发生的,所以这不是问题。