我有这个代码,它告诉我在保存双倍时我在商店中有未对齐的地址。有人可以告诉我发生了什么事吗?具体来说,当我输入A(1,1)的第一个值时,我在第一个sdc1中收到错误消息。问题可能来自程序的其余部分>?错误消息表示异常发生在PC = 0x0040003c,存储区中的未对齐地址:0x1001009b并尝试在0x80000180执行非指令。我正在使用qtspim
.data
user_prompt: .asciiz "Please enter a values for: \n"
a11: .asciiz "A(1,1)= "
a12: .asciiz "A(1,2)= "
a21: .asciiz "A(2,1)= "
a22: .asciiz "A(2,2)= "
b11: .asciiz "B(1,1)= "
b12: .asciiz "B(1,2)= "
b21: .asciiz "B(2,1)= "
b22: .asciiz "B(2,2)= "
c11: .asciiz "C(1,1)= "
c12: .asciiz "C(1,2)= /n"
c21: .asciiz "C(2,1)= "
c22: .asciiz "C(2,2)= "
A: .space 32
B: .space 32
C: .space 32
#Text section
.text
.globl main
main:
la $a1, A
la $a2, B
la $a3, C
li $v0, 4
la $a0, user_prompt
syscall
#Ask for A(1,1)
li $v0 , 4
la $a0 , a11
syscall
#Read double
li $v0 , 7
syscall
#Store double
sdc1 $f0 , ($a1)
li $v0 , 4
la $a0 , a12
syscall
li $v0 , 7
syscall
sdc1 $f0 , 8($a1)
#Same for the rest
li $v0 , 4
la $a0 , a21
syscall
li $v0 , 7
syscall
sdc1 $f0 , 16($a1)
li $v0 , 4
la $a0 , a22
syscall
li $v0 , 7
syscall
sdc1 $f0 , 24($a1)
#Same for array B
li $v0 , 4
la $a0 , b11
syscall
li $v0 , 7
syscall
sdc1 $f0 , 0($a2)
li $v0 , 4
la $a0 , b12
syscall
li $v0 , 7
syscall
sdc1 $f0 , 8($a2)
li $v0 , 4
la $a0 , b21
syscall
li $v0 , 7
syscall
sdc1
$f0 , 16($a2)
li $v0 , 4
la $a0 , b22
syscall
li $v0 , 7
syscall
sdc1 $f0 , 24($a2)
#initializing indexes i,j,k
addi $s0, $zero, 0
addi $s1, $zero, 0
addi $s2, $zero, 0
li $t8, 3 #initializing length +1
addi $sp, $sp, -16
sw $s0, 0($sp)
sw $s1, 4($sp)
sw $s2, 8($sp)
while1:
beq $s0,$t8,exit1
sw $ra, 12($sp)
jal while2
addi $s0,$s0,1
j while1
while2:
sw $ra, 12($sp)
beq $s1,$t8,exit2
addi $s1,$s1,1
jal while3
addi $s1,$s1,1
j while2
while3:
beq $s2,$t8,exit3
mul $t0,$s0,2
add $t1,$t0,$s1
sll $t2,$t1,3
add $t3,$t2,$a1
add $t4,$t2,$a2
add $t5,$t2,$a3
ldc1 $f4, ($t3)
ldc1 $f6, ($t4)
ldc1 $f8, ($t5)
mul.d $f8,$f6,$f4
sdc1 $f8, ($t5)
addi $s2,$s2,1
j while3
exit1:
lw $s0, 0($sp)
addi $sp, $sp, 16
jr $ra
exit2:
lw $s1, 4($sp)
jr $ra
exit3:
lw $s1, 8($sp)
jr while
#Printing results
li $v0, 4
la $a0, c11
syscall
ldc1 $f12, ($a2)
li $v0, 3
syscall
li $v0, 4
la $a0, c12
syscall
ldc1 $f12, 8($a2)
li $v0, 3
syscall
li $v0, 4
la $a0, c21
syscall
ldc1 $f12, 16($a2)
li $v0, 3
syscall
li $v0, 4
la $a0, c22
syscall
ldc1 $f12, 24($a2)
li $v0, 3
syscall
#Ending program
li $v0, 10
syscall