Если я помещаю строку в $ 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