商店中未对齐的地址

时间:2017-08-19 19:33:26

标签: assembly storage mips qtspim

我有这个代码,它告诉我在保存双倍时我在商店中有未对齐的地址。有人可以告诉我发生了什么事吗?具体来说,当我输入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

0 个答案:

没有答案