$a0 - използва се за предаване на аргументи
$t0 - временен регистър, използван за lw от $a0
Ето моят код
.data
Str: .asciiz "please input words "
input: .space20
main:
la $a0, Str # asciiz loaded at $a0
li $v0, 4 # print string command
syscall # execute print string
la $a0, input # space for input
li $a1, 20 # space for input
li $v0, 8 # read string command
syscall # execute reading string
jal nextStep
nextStep:
lw $t0, 0($a0) # load first word from address $a0
move $a0, $t0 # move $t0 -> $a0
li $v0, 4 # print string command
syscall # execute print string
jr $ra
след изпълнението получавам грешка „извън граница на паметта“ при „преместване на $a0, $t0“.
Пробвах и с
and $a0, $t0, $a0
вместо преместване на ред от горното, но все още получавам същата грешка
Това, което искам да видя, е стойността на $t0 (от [lw $t0, 0($a0)]), отпечатана с помощта на syscall.
Например, при предположението, че потребителят винаги въвежда повече от една дума, моето очакване е, че когато потребителят въведе „1a2b3c4d5e6f“, $t0 ще съдържа „1a2b3c4d“ (една дума), тогава ще отпечата само тези стойности, а не почивка, ако надвишава.
Всяка помощ ще е благодарна.