MIPS错误:使用sw时,存储地址未在字边界0x1001005e上对齐

时间:2019-02-27 10:38:17

标签: assembly mips

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

0 个答案:

没有答案