Сохранение значения в $ a0 прекрасно, хранение в $ a1 дает «память за пределами» - PullRequest
0 голосов
/ 06 февраля 2019

Если я помещаю строку в $ a0 для печати (2-я строка основной), все в порядке.Если вместо этого поместить его в $ 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
...