我写了一些代码,但时间太长了。我想也许我可以通过将这个部分放在循环中来使我的程序更小一些。我尝试将0
更改为某些注册表,例如$f9
并将其递增,但它没有效果。
有人知道我该怎么做吗?
windfact: .float 1.201, 1.036, 2.320, 5.026, 6.321, 1.0215
newLine: .asciiz "\n"
la $t0, windfact # put address of list into $a1
l.s $f12, 0($t0)
li $v0, 2
syscall # This will print 1.192173
li $v0, 4 # system call code for print string
la $a0, newLine # load addr of newLine in $a0
syscall
l.s $f12, 4($t0)
li $v0, 2
syscall
li $v0, 4
la $a0, newLine
syscall
l.s $f12, 8($t0)
li $v0, 2
syscall
li $v0, 4
la $a0, newLine
syscall
l.s $f12, 12($t0)
li $v0, 2
syscall
li $v0, 4
la $a0, newLine
syscall
l.s $f12, 16($t0)
li $v0, 2
syscall
li $v0, 4
la $a0, newLine
syscall
l.s $f12, 20($t0)
li $v0, 2
syscall
li $v0, 4
la $a0, newLine
syscall
谢谢
答案 0 :(得分:0)
看起来你只需要迭代你的数组,将每个连续的值加载到$f12
。一种方法是将指针增加到数组中,而不是递增索引。
在C中,它就像在做
float *array_end = array+size; // keep this in a register to compare against
for(float *p = array ; p < array_end ; p++ )
do_stuff(*p);
与
相反for(int i=0 ; i < size ; i++ )
do_stuff(array[i]);
在您正在使用的ABI中,syscall
指令是否保留其输入寄存器?如果是这样,您只需要分别设置$f12
和$a0
,无论您是否完全展开(如现在)。
如果没有,你必须跨越系统调用将你的循环指针/计数器溢出到内存中。