调用sw过程

时间:2017-01-31 04:55:32

标签: mips

我才开始学习mips。我正在尝试编写一个简单的程序,将3个数字加在一起。程序应提示3次输入数字,然后输出总和。这是我写的

.data 
  instructions: .asciiz "Please enter a number : "
.text
  main: 
   li $t0, 0x00 # i = false
   li $t1, 0x00 #sum = 0

   while: # while(i < 3 )
     bgt $t0, 0x02, exit
     b prompt

   prompt:
     li $v0, 0x04 # set IO to output string
     la $a0, instructions #load the address of instructions into $a0 for IO
     syscall # print
     li $v0, 0x05
     syscall
     sw $v0, 0x0($t3) #address out of range 0x000000
     add $t1,$t1,$t2
     b while

   exit:
     li $v0,0x01
     move $a0, $t1
     syscall

错误发生在sw过程中。调试器告诉我$t3的值为0,但我需要从$v0读取值并将其存储在$t3中。我确定这是我对mips不了解的一些事情。

1 个答案:

答案 0 :(得分:0)

sw指令,而非程序。

无论如何,sw的目的是将寄存器的内容存储在内存中。听起来我只想将一个寄存器的内容复制到另一个寄存器,所以你应该使用的指令是move

move $t3,$v0    # $t3 = $v0

可以通过其他几种方式实现同​​样的目标,例如:

or $t3,$v0,$zero

但如果您刚刚开始使用MIPS程序集,我建议您使用move