[英]Sum of Absolute Differences in Assembler
让我们假设函数为伪代码。
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?
调用具有四个以上参数的函数的约定是将多余的参数存储在内存中。 有关更多详细信息,请参见此答案 。
在调用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
执行其余的计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.