将值存储在$ a0中就可以了,将其存储在$ a1中可以使“内存越界”

时间:2019-02-06 08:49:30

标签: assembly memory mips qtspim

如果我将字符串放入$ 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

0 个答案:

没有答案