繁体   English   中英

汇编程序中的绝对差异之和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM