MIPS汇编变量寄存器

时间:2014-07-22 20:14:38

标签: optimization assembly mips

我有一段代码,我想重复使用,而在一条指令中只更改一个寄存器。 $f18中的初始寄存器为coproc1,每次运行此代码时,我希望它使用下一个COP1寄存器(最多4次)。在这种情况下,我对内存和可用的GPR寄存器非常有限,所以我不想为此制作单独的子程序。

我知道我可以使用自修改代码来更改实际指令,但这样做似乎要求我知道相关行的确切地址。这使我的代码难以开发,因为在我完成之前,大小会不断波动。

是否可以通过标签+偏移量来引用内存地址? 使用极少数指令和附加寄存器有更好的方法吗?

calc_and_add_color:
srl       $t2,  $t2, $t0
andi      $s2,  $t2, 0x1F 
mtc1      $s2,  $f22        #f22 is now red/green/blue component
cvt.s.w   $f22, $f22
mul.s     $f25, $f22, $f18  #<<<F18 HERE IS WHAT I WANT TO CHANGE
round.w.s $f25, $f25
lh        $s2,  0x0($s1)
mfc1      $s5,  $f25
addu      $s5,  $s5, $s2    #add new red comp. to existing one 
andi      $s5,  $s5, 0x1F   #cap at 31
sh        $s2,  0x0($s1)    #store it
addiu     $s1,  $s1, 0x6C0  #next color
addiu     $s2,  $r0, 0x5    #bit shifter
andi      $s5,  $fp, 0x0003 #isolate counter
bnel      $s5,  $zero, calc_and_add_color #when fp reaches zero every color has been done
addiu     $fp,  $fp, -0x1

0 个答案:

没有答案