Программа продолжает показывать ошибку «Несогласованный адрес в хранилище: 0x100100d2»

#mips #qtspim

Вопрос:

Я должен написать программу, которая принимает определенное количество поплавков от пользователя и сохраняет их в массиве. Однако всякий раз, когда я пытаюсь сохранить поплавок, QtSpim(симулятор MIPS) продолжает говорить «Выровненный адрес в хранилище: 0x100100d2». Есть ли что-то неправильное в том, как я пытаюсь сохранить $f0 в 0($s3)?

                         .data  
arrayLen:         .asciiz "Specify how many numbers should be stored in the array(at most 12): " 
enterNum:         .asciiz "Enter a number: " 
rawArray:         .asciiz "The array contains the following: " 
currArray:        .asciiz "The array currently contains the following: " 
resArray:         .asciiz "The result array contains the following: " 
blankLine:        .asciiz "n"
floatArray:       .space 1000
                        .text
                        .globl    main    

main:
    la $a0, arrayLen    #load 'specify how many numbers' message 
    li $v0, 4           #print message
    syscall
    li $v0, 5           #read int (how many numbers) into v0
    syscall
    move $s0, $v0       #s0 holds the length of the array
    
    li $s1, 0           #s1 holds the index of the array
    la $s2, floatArray  #s2 holds the array
    
    Loop:
        slt $t1, $s1, $s0       #check if index(s1) is less than arrayLength(s0)
        beq $t1, $zero, Exit    #if not less than arrayLength exit program
        
        sll $t2, $s1, 2         #multiply index by 4 to get the Offset
        add $s3, $s2, $t2       #add offset to s2 to get floatArray[i](t3)
        
        
        
        la $a0, enterNum    #load 'enter a number' message 
        li $v0, 4           #print message
        syscall
        li $v0, 6           #read float (enter number) into f0
        syscall

        s.s $f0, 0($s3)   #store float into the array
        
        
        addi $s1, $s1, 1   #increment index
        
        j Loop            #jump back to start of loop
    
    Exit:
 

Комментарии:

1. s.s ( swc1 ) требует, чтобы адрес был выровнен по словам. Ваш floatArray не выровнен должным образом.

2. Как именно я бы выровнял адрес по словам?

3. Проверьте руководство, чтобы узнать, поддерживает ли ассемблер симулятора какую-либо .align директиву. В противном случае поместите floatArray сначала в раздел данных, перед любой строкой.

4. Размещение floatArray первым в разделе данных сработало. Спасибо тебе, Майкл!