Когда я пытаюсь сохранить некоторые числа в строке, первый способ, который я использовал, работает хорошо, но во втором способе есть некоторые ошибки.Когда он переходит к sw $ v0, ($ t0), возникает ошибка «Исключение во время выполнения в 0x0040002c: адрес магазина не выровнен по границе слова 0x1001005e».Я думаю, что нет никакой разницы между этими двумя способами.Я только начинаю изучать ассемблер, пожалуйста, помогите мне с ошибкой.
первый путь:
.data
array:
.space 1024
input_msg:
.ascii "Input number: "
space_str:
.ascii " "
.text
.globl main
main:
la $t6,array
move $t7 $zero
addi $t8 $zero 10
input:
la $a0 input_msg
li $v0 4
syscall
li $v0 5
syscall
move $t0 $t7
mul $t0 $t0 4
addu $t0 $t0 $t6
sw $v0 0($t0)
addi $t7 $t7 1
blt $t7 $t8 input
второй путь:
read: .asciiz "Input a, b, c, d\n"
operator: .space 16
.text
.globl main
main:
la $t0, operator# address of string operator
li $t1, 4 # cycle times
li $t2, 1 # counter
la $a0, read
li $v0, 4
syscall
input:
li $v0, 5
syscall
move $t3, $t0 # t3 is the current address of string
sw $v0, ($t0)
addu $t3, $t0, 4 # change the address
addu $t2, $t2, 1
move $t0, $t3
blt $t2, $t1, input