xkickass
18-07-2017, 16:31
Salve a tutti, dovrei fare un programma che effettua il confronto della lunghezza di due liste. Stampa 1 se uguali e 0 se diversi.
Mi chiedevo se così fosse corretto e se ci fosse un modo per migliorare il tutto:
.data
a: .word 2,c
c: .word 6,d
d: .word 5,e
e: .word 1,f
f: .word 2,g
g: .word 7,0
h: .word 2,i
i: .word 1,l
l: .word 6,m
m: .word 7,n
n: .word 2,o
o: .word 1,p
p: .word 5,0
.text
la $a0,a
la $a1,h
addi $v0,$zero, 0
jal ric
move $a0,$v0
li $v0,1
syscall
li $v0,10
syscall
ric:
beq $a0,$a1,uguali
bne $a0,$zero,test2
addi $v0,$zero,0
jr $ra
test2:
bne $a1,$zero,loop
addi $v0,$v0,0
jr $ra
uguali:
bne $a0,$zero,loop
addi $v0,$zero,1
jr $ra
loop:
addi $sp,$sp,-4
lw $a0,4($a0)
lw $a1,4($a1)
sw $ra,0($sp)
jal ric
addi $sp,$sp,4
lw $ra,0($sp)
jr $ra
Edit: È solo un'esercitazione e allo stesso tempo una curiosità dato che su MIPS abbiamo sempre utilizzato la ricorsione su singoli elementi, quindi ho difficoltà ad utilizzarla su più elementi nella stessa funzione.
Mi chiedevo se così fosse corretto e se ci fosse un modo per migliorare il tutto:
.data
a: .word 2,c
c: .word 6,d
d: .word 5,e
e: .word 1,f
f: .word 2,g
g: .word 7,0
h: .word 2,i
i: .word 1,l
l: .word 6,m
m: .word 7,n
n: .word 2,o
o: .word 1,p
p: .word 5,0
.text
la $a0,a
la $a1,h
addi $v0,$zero, 0
jal ric
move $a0,$v0
li $v0,1
syscall
li $v0,10
syscall
ric:
beq $a0,$a1,uguali
bne $a0,$zero,test2
addi $v0,$zero,0
jr $ra
test2:
bne $a1,$zero,loop
addi $v0,$v0,0
jr $ra
uguali:
bne $a0,$zero,loop
addi $v0,$zero,1
jr $ra
loop:
addi $sp,$sp,-4
lw $a0,4($a0)
lw $a1,4($a1)
sw $ra,0($sp)
jal ric
addi $sp,$sp,4
lw $ra,0($sp)
jr $ra
Edit: È solo un'esercitazione e allo stesso tempo una curiosità dato che su MIPS abbiamo sempre utilizzato la ricorsione su singoli elementi, quindi ho difficoltà ad utilizzarla su più elementi nella stessa funzione.