当我尝试将一些数字存储在字符串中时,我使用的第一种方法效果很好,但是第二种方法有一些错误。转到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