这个MIPS程序做了什么?

时间:2011-03-07 19:08:30

标签: 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    $t3, $t3, -1

bnez    $t3, fori       


 fin:


li  $v0, 10
syscall 

2 个答案:

答案 0 :(得分:1)

看起来它是根据空间中的第一项添加的,因为它不会从循环内部访问数组。

因此,例如,如果你输入一个代表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

答案 1 :(得分:0)

免责声明:我没有任何直接的MIPS经验,我只是使用过多种汇编语言。

那说,我认为程序所做的是通过重复加法来计算'arg'的平方 - 在这种情况下5 * 5 = 25.但是,$ t1中的结果似乎没有存储在任何地方,而是该程序刚刚退出。