这个MIPS程序做什么?

这个MIPS程序做什么?,mips,Mips,我知道程序加载了.word 5的地址,这是初始值,我对程序的实际操作感到困惑。是比较单词的堆叠还是添加 .data arg: .word 5 .text .globl main main: la $t3, arg lw $t2, 0($t3) lw $t3, 0($t3) addi $t1, $zero, 0 beqz $t2, fin fori: add $t1, $t1, $t2 addi

我知道程序加载了.word 5的地址,这是初始值,我对程序的实际操作感到困惑。是比较单词的堆叠还是添加

.data   

 arg:   .word 5 
.text

.globl main

main:

la  $t3, arg    

lw  $t2, 0($t3) 

lw  $t3, 0($t3)


addi    $t1, $zero, 0

beqz    $t2, fin        


  fori:


add $t1, $t1, $t2   

addi    $t3, $t3, -1

bnez    $t3, fori       


 fin:


li  $v0, 10
syscall 

免责声明:我没有任何直接的MIPS经验,我只是熟悉一些汇编语言


这就是说,我认为程序所做的是通过重复加法计算‘arg’的平方——在本例中为5*5=25。但是,$t1中的结果似乎没有存储在任何地方,相反,程序只是退出。

看起来它基于空间中的第一项进行加法,因为它没有从循环内部访问数组

因此,例如,如果您输入一个代表ascii值5的字符(而不是'5'本身iirc),您可能会看到如下内容:

    int t2 = 5, t3 = 5, t1 = 0;
    do {
         t1 += t2;
         t3 -= 1;
    } while(t3 > 0);
有人已经回答了,但我将提供我所做的翻译:

.data   

 arg:   .word 5 
.text

.globl main

main:

la  $t3, arg    # load-address of arg into t3
lw  $t2, 0($t3) # load-word from the address in t3 + 0 offset, like t3[0]
lw  $t3, 0($t3) # same but to t3

addi    $t1, $zero, 0 # initialize t1 to 0? weird they don't use li
beqz    $t2, fin # if t2 is zero jump to fin:


  fori:


add $t1, $t1, $t2       # t1 = t1 + t2
addi    $t3, $t3, -1    # t3 -= 1
bnez    $t3, fori       # if(t3 != 0) goto fori


 fin:


li  $v0, 10    # load immediate 10 into v0, which is the syscall to terminate the program
syscall

美好的但是,我不认为程序执行的是与
return 10
等价的操作-据我所知,
10
表示要执行的系统调用是“exit program”系统调用。可能$t1中的值被用作作为退出代码?Derp返回的值。是的,根据我查到的笔记终止程序。