#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 первым в разделе данных сработало. Спасибо тебе, Майкл!