Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- vettore1: .word 0:100
- vettore2: .word 0:100
- vettoreRis: .word 0:200
- dim1: .word 0 # dimensione vettore 1
- dim2: .word 0 # dimensione vettore 2
- .eqv $i, $s0
- .eqv $vett1, $s1
- .eqv $vett2, $s2
- .text
- main:
- la $vett1, vettore1
- li $i, 0 # dimensione vettore1
- loopv1: li $v0, 5
- syscall
- beq $v0, -1, fineVettore1 # $v0 contiene il numero letto in input
- sw $v0, 0($vett1)
- addi $vett1, $vett1, 4 # passa all'elemento successivo
- addi $i, $i, 1 # aumenta dimensione
- j loopv1
- fineVettore1:
- sw $i, dim1 # salva la dimensione del primo vettore in dim1
- la $vett2, vettore2
- li $i, 0 # dimensione vettore2
- loopv2: li $v0, 5
- syscall
- # $v0 contiene il numero letto in input
- beq $v0, -1, fineVettore2
- sw $v0, 0($vett2)
- addi $vett2, $vett2, 4 # passa all'elemento successivo
- addi $i, $i, 1 # aumenta dimensione
- j loopv2
- fineVettore2:
- sw $i, dim2 # salva la dimensione del secondo vettore in dim2
- la $a0, vettore1
- la $a1, vettore2
- lw $a2, dim1
- lw $a3, dim2
- la $s7, vettoreRis
- jal merge
- move $t0, $v0
- li $a0, '\n'
- li $v0, 11
- syscall
- move $a0, $t0
- li $v0, 1
- syscall
- li $v0, 10
- syscall
- .eqv $x, $a0
- .eqv $y, $a1
- .eqv $n, $a2 # dim x
- .eqv $m, $a3 # dim y
- .eqv $z, $s7
- merge:
- subi $sp, $sp, 4
- sw $ra, 0($sp)
- bnez $n, controllaY
- bnez $m, x_finito
- # vettori finiti
- # caso base
- li $v0, 0
- j return
- x_finito:
- lw $t1, ($y)
- sw $t1, 0($z)
- move $s5, $a0
- move $a0, $t1
- li $v0, 1
- syscall
- li $a0, ' '
- li $v0, 11
- syscall
- move $a0, $s5
- addi $y, $y, 4
- addi $z, $z, 4
- subi $m, $m, 1
- jal merge
- addi $v0, $v0, 1
- j return
- controllaY:
- bnez $m, confronta
- # y finito ma x ancora non finito
- lw $t1, ($x)
- sw $t1, 0($z)
- move $s5, $a0
- move $a0, $t1
- li $v0, 1
- syscall
- li $a0, ' '
- li $v0, 11
- syscall
- move $a0, $s5
- addi $x, $x, 4
- addi $z, $z, 4
- subi $n, $n, 1
- jal merge
- addi $v0, $v0, 1
- j return
- confronta:
- lw $t0, 0($x)
- lw $t1, 0($y)
- bge $t0, $t1, altrimenti
- # x < y
- sw $t0, 0($z)
- move $s5, $a0
- move $a0, $t0
- li $v0, 1
- syscall
- li $a0, ' '
- li $v0, 11
- syscall
- move $a0, $s5
- addi $x, $x, 4
- addi $z, $z, 4
- subi $n, $n, 1
- jal merge
- addi $v0, $v0, 1
- j return
- altrimenti:
- lw $t1, ($y)
- sw $t1, 0($z)
- move $s5, $a0
- move $a0, $t1
- li $v0, 1
- syscall
- li $a0, ' '
- li $v0, 11
- syscall
- move $a0, $s5
- addi $y, $y, 4
- addi $z, $z, 4
- subi $m, $m, 1
- jal merge
- addi $v0, $v0, 1
- j return
- return:
- lw $ra , 0($sp)
- addi $sp, $sp, 4
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement