[mips] : Wo ist der Wurm?

11/23/2014 16:00 Yo123#1
Code:
### Programmsegment: Matrix-Vektor-Multiplikation ###

# Verwendung der Register:
#
#   $s0: n
#   $s1: counter_i
#   $s2: counter_k
#   $s5: index_A
#   $s6: index_x
#   $s7: index_b
#   $f0: A[index_A] (= A[i][k])
#   $f2: x[index_x] (= x[k])
#   $f4: sum

	.text

	.globl main

main:	lw $s0, dim		# n = Matrixdimension

	move $s1,$s0         		# counter_i = n
	move $s5,$0        		# index_A   = 0
	move $s7,$0        		# index_b   = 0

loopi:	blez $s1, endi          # while (counter_i > 0)

	move $s2,$s0          		# counter_k = n
	mtc1 $zero, $f4		# sum = 0.0
	mtc1 $zero, $f5
	move $s6, $0         		# index_x = 0

loopk:	blez $s2, endk		# while (counter_k > 0)

	l.d  $f0, mat_A($s5)        	# lade $f0 mit A[index_A]
	l.d $f2, vec_x($s6)          	# lade $f2 mit x[index_x]

	add.d  $f4,$f4,$f4       			# sum +=
	mul.d $f4,$f0,$f2		       # A[index_A] * x[index_x]

	add $s5,$s5,1            	# index_A++
	add $s6,$s6,1             	# index_x++
	sub $s2,$s2,1             	# counter_k--

	j loopk

endk:	l.d $f4, vec_b($s7)                	# speichere sum in b[index_b]

	li $v0,2                 	# printf("%f", sum)
	move $a0,$s7
	syscall

	li $v0,4                     # printf("\n")
	la  $a0, hans
	syscall

	add $s7,$s7,1             	# index_b++
	sub $s1,$s1,1            		# counter_i--

	j loopi

endi:	li $v0, 10		# beende Programm
	syscall

### Datensegment ###

	.data

dim:	.word 5

mat_A:	.double 2.0, 1.0, 4.0, 2.0, 6.0
	.double 1.0, 2.0, 2.0, 4.0, 2.0
	.double 4.0, 2.0, 6.0, 1.0, 3.0
	.double 4.0, 2.0, 6.0, 2.0, 1.0
	.double 4.0, 3.0, 2.0, 2.0, 3.0

vec_x:	.double 1.0, 3.0, 5.0, 1.0, 3.0

vec_b:	.double 0.0, 0.0, 0.0, 0.0, 0.0

hans:	.asciiz "\n"
Quote:
Error in C:\Users\Stephen\Downloads\6_3.s line 34: Runtime exception at 0x00400034: address not aligned on doubleword boundary 0x10010009
kann mir jemand helfen wo da der wurm drin ist? hab zurzeit iwie den ein oder anderen hänger..
lg,

der Yo
11/24/2014 01:09 snow#2
#closed (on request)