MIPS - 存储整数数组根据用户输入

问题描述:

我想用户输入存储到一个数组,但是当我使用SW我得到一个错误“存储地址的绑定字未对齐”。我的目标是从阵列10个整数读,但之后,我输入的第一个数字,我得到的SW命令错误。我不知道我在做什么错我花了几个小时试图弄清楚。任何帮助将不胜感激,并显着有用。MIPS - 存储整数数组根据用户输入

 .data 

mess: .asciiz " Enter 10 numbers to be stored in the array. " 
array: .space 40 #10 element integer array 
    .globl main 
    .text 
main: 
    jal read 
    b done 
read: 
    la $t0, 0 #count variable 
    b readLoop 
    jr $ra 

readLoop: 
    beq $t0, 40, read #branch if equal to 40, 10 items 
    li $v0, 4  #Print string 
    la $a0, mess  #load prompt 
    syscall 
    li $v0, 5  #read int 
    syscall 
    sw $v0, array  #store input in array ERROR HERE 
    addi $t0, $t0, 4 #add by 4 to count 
    b readLoop 
print: 

done: 

这对我有效。我不知道为什么它没有上述

.data 
list: .space 16 
.globl main 
.text 

main: 

    li $v0, 5 
    syscall 
    sw $v0, list 

    move $a0, $v0 
    li $v0, 1 
    syscall 

争取你的数组分配空间,你为你的数据片段串分配空间之前:

array: .space 40 #10 element integer array 
    mess: .asciiz " Enter 10 numbers to be stored in the array. " 

如果分配字符串第一阵列可以在由4和铅是不是整除的地址开始一个字对准误差

工作试试这个:

... 
.p2align 2 
array: .space 40 #10 element integer array 
... 
+0

这并没有改变什么尽管如此,感谢你的回应。 –

+1

您是否收到编译错误? '.p2align 2'应该对齐上这的2(2^2 = 4在这里)的功率的地址下面的代码/数据。如果你给“mess”字符串添加一到三个额外字符会怎么样?这也可以修正'array'的对齐方式。 –

  • 这家店应该是

    SW $ V0,数组($ T0)

  • 替换la $t0, 0作者:li $t0, 0

  • 设置上面mess

而且数组,当你达到10项,重新启动阅读并覆盖之前的值。

正确的阵列输入代码

.data 
    myarray:.space 40  
    st:.asciiz "Enter the 10 Elements" 

.text  
    li $v0,4 
    la $a0,st 
    syscall 
    jal fun 
    li $v0,10 
    syscall 

fun:   
    li $v0,5 
    syscall 
    beq $t0,40,exit 
    sw $v0,myarray($t0) 
    add $t0,$t0,4 
    j fun 

exit: 
    jr $ra 
+1

请使用markdown格式来提高可读性。并请添加一些解释,以帮助打击*是免费代码编写服务的误解。 – Yunnosch