0

我试图对此发表评论以弄清楚它的作用

"$a0 是一个整数参数,而 $a1 是一个指向大型数组的指针(即:地址)。$a0 中的值可以是任何整数,并且 $a1 指向的数组的大小足够大(如只要您不在 $a1 之前取消引用内存,您就不会访问不属于您的内存)以使代码正常工作。”

最初只是将 31 添加到 t1 和 t0 然后循环开始,您正在执行一些操作,但后来我迷路了

有人可以帮帮我吗?

addi $t1 $zero 31
addi $t0 $zero 31
loop:srlv $t3 $a0 $t1
andi $t3 $t3 1
addi $t3 $t3 48
sub $t4 $t0 $t1
add $t2 $a1 $t4
sb $t3 0($t2)
beq $t1 $zero done
subi $t1 $t1 1
j loop
done:sb $zero 1($t2)
jr $ra
4

1 回答 1

0

在我看来,它正在创建$a0一个二进制值的字符串表示形式,并将其存储在$a1. 例如,如果$a0有值0x56(binary 01010110),你会得到字符串"01010110"$a1你实际上会得到所有 32 位,但为了简单起见,我在示例中省略了前 24 位)。

下面是代码在 C 中的样子:

for (t1 = 31; ; t1--) {
    a2 = &a1[31 - t1];
    *a2 = ((a0 >> t1) & 1) + '0':  // '0' == 48
    if (t1 == 0) break;
}
a2[1] = 0;  // NULL-terminator
于 2013-02-25T20:46:16.230 回答