2016-04-28 15 views
0

Ich versuche, den geraden Inhalt eines Arrays in das andere Array zu kopieren. Mein Code läuft ohne Probleme, aber die Werte, die aus dem Array gedruckt werden, sind 000000 und nicht die Werte des Arrays.Array zu Array MIPS

Mein Ziel ist es, die geraden Zahlen von Array0 zu Array1 zu kopieren und sie auf dem Bildschirm zu drucken.

Mein Code:

.data 
array0: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 
length: .word 10 
array1: .space 20 
nl: .asciiz "" 
label: .asciiz "Values: " 

.text 
.globl main 
main: 

lw $t2, length 
move $t0, $zero 
move $t1, $zero 
move $t2, $zero 
move $t3, $zero 

la $a0, label 
li $v0, 4 
syscall 

start: 
lw $t5, array0($t0) 
andi $t4, $t5, 1 
beq $t4, 0, even 
addi $t1, $t1, 1 
addi, $t0, $t0, 4 
blt $t1, $t2, start 
j end 

even: 
sw $t5, array1($t3) 
addi $t1, $t1, 1 
addi $t0, $t0, 4 
addi $t3, $t3, 4 
blt $t1, $t2, start 

end: 
lw $a0, array1($t6) 
li $v0, 1 
syscall 

la $a0, nl 
la $v0, 4 
syscall 

addi $t6, $t6, 4 
bne $t6, 20, end 
li $v0, 10 
syscall 

.end main 
+0

Sie haben 'length' nach' $ t2' geladen und dann '$ t2' durch' $ zero' überschrieben. Bist du sicher, dass du das willst? – MikeCAT

Antwort

0

Sie setzen den Wert von $t2 auf Null nach length zu $t2 geladen. Das erste Element des Arrays wird ausgewertet, ist aber nicht gerade. Dann ist 1 < 0 falsch und der Sprung $ blt $ t1, $ t2, Start is not taken. After that, the jump j Ende is taken and the contents of array1` wird gedruckt.

Entfernen Sie einfach das Löschen von Längeninformation

move $t2, $zero 

und die auch Inhalt gedruckt wird.