如果我将字符串放入$ a0进行打印(main的第二行),一切都很好。如果我将其放入$ a1中(将$ a0更改为$ a1),QtSpim返回“内存地址超出范围”。
我可以看到QtSpim甚至在到达我的代码之前就开始填充那些寄存器(下面发布的行)。有谁知道这些寄存器的用途?我应该避免为我自己的代码使用参数寄存器吗?我是MIPS的新手,感谢您的帮助或建议。
谢谢!
QtSpim文本行显示寄存器已满:
[00400000] 8fa40000 lw $4, 0($29) ; 183: lw $a0 0($sp) # argc
[00400004] 27a50004 addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv
[00400008] 24a60004 addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp
我的代码:
.data
product:
.asciiz "The Booth's Algorithm Product is: "
multiplicand:
.asciiz "Enter the Multiplier: "
multiplier:
.asciiz "Enter the Multiplicand: "
counter:
.asciiz "\nThe Number of Additions and Subtractions is: "
.text
main:
li $v0, 4 # syscall code for printing string
la $a0, multiplicand # loads the string into a0
syscall
li $v0, 5 # syscall code for inputting integer
syscall
move $s0, $v0 # places the integer into s0