让我们假设函数使用伪代码。
int abs_diff(int l, int r) {
int abs_diff = abs(l - r);
return abs_diff;
}
我能够在汇编器中实现此功能。
abs_diff:
sub $t1, $a0, $a1
sra $t2,$t1,31
xor $t1,$t1,$t2
sub $v0,$t1,$t2
jr $ra #Return
现在,我想在汇编器中实现此功能的扩展。新功能的伪代码为
int abs_diff_new(int r1, int g1, int b1, int r2, int g2, int b2) {
int abs_diff_new = abs(r1-r2) + abs(g1-g2) + abs(b1-b2);
return abs_diff_new;
}
由于此新功能,我不知道如何实现此功能 需要6个参数,但是MIPS仅提供4个寄存器($ a0- $ a3)来传递参数。如何修改我的abs_diff?
答案 0 :(得分:0)
调用具有四个以上参数的函数的约定是将多余的参数存储在内存中。有关更多详细信息,请参见this answer。
在调用abs_diff
之前,您需要存储所有其他参数:
sw $s0, 4($sp) # Assuming $s0 = g2
sw $s1, 8($sp) # Assuming $s1 = b2
然后您可以使用以下方法在abs_diff
内获取它们:
lw $t0, 20($sp) # Assuming you subtracted $sp by 16
lw $t1, 24($sp)
然后您可以使用$t0
和$t1
执行其余的计算。