Advertisement
Guest User

Untitled

a guest
Jun 28th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. vettore1: .word 0:100
  3. vettore2: .word 0:100
  4. vettoreRis: .word 0:200
  5. dim1: .word 0   # dimensione vettore 1
  6. dim2: .word 0   # dimensione vettore 2
  7. .eqv $i, $s0
  8. .eqv $vett1, $s1
  9. .eqv $vett2, $s2
  10. .text
  11. main:
  12.     la $vett1, vettore1
  13.     li $i, 0            # dimensione vettore1
  14. loopv1: li $v0, 5
  15.     syscall
  16.     beq $v0, -1, fineVettore1   # $v0 contiene il numero letto in input
  17.     sw $v0, 0($vett1)
  18.     addi $vett1, $vett1, 4      # passa all'elemento successivo
  19.     addi $i, $i, 1          # aumenta dimensione
  20.     j loopv1
  21. fineVettore1:
  22.     sw $i, dim1         # salva la dimensione del primo vettore in dim1
  23.     la $vett2, vettore2
  24.     li $i, 0 # dimensione vettore2
  25. loopv2: li $v0, 5
  26.     syscall
  27.     # $v0 contiene il numero letto in input
  28.     beq $v0, -1, fineVettore2
  29.     sw $v0, 0($vett2)
  30.     addi $vett2, $vett2, 4      # passa all'elemento successivo
  31.     addi $i, $i, 1          # aumenta dimensione
  32.     j loopv2   
  33. fineVettore2:
  34.     sw $i, dim2         # salva la dimensione del secondo vettore in dim2
  35.     la $a0, vettore1
  36.     la $a1, vettore2
  37.     lw $a2, dim1
  38.     lw $a3, dim2
  39.     la $s7, vettoreRis 
  40.     jal merge
  41.     move $t0, $v0
  42.     li $a0, '\n'
  43.     li $v0, 11
  44.     syscall
  45.     move $a0, $t0
  46.     li $v0, 1
  47.     syscall
  48.     li $v0, 10
  49.     syscall
  50. .eqv $x, $a0
  51. .eqv $y, $a1
  52. .eqv $n, $a2    # dim x
  53. .eqv $m, $a3    # dim y
  54. .eqv $z, $s7
  55. merge:
  56.     subi $sp, $sp, 4
  57.     sw $ra, 0($sp) 
  58.     bnez $n, controllaY
  59.     bnez $m, x_finito
  60.     # vettori finiti
  61.     # caso base
  62.     li $v0, 0
  63.     j return
  64. x_finito:
  65.     lw $t1, ($y)
  66.     sw $t1, 0($z)
  67.     move $s5, $a0
  68.     move $a0, $t1
  69.     li $v0, 1
  70.     syscall
  71.     li $a0, ' '
  72.     li $v0, 11
  73.     syscall
  74.     move $a0, $s5
  75.     addi $y, $y, 4
  76.     addi $z, $z, 4
  77.     subi $m, $m, 1
  78.     jal merge
  79.     addi $v0, $v0, 1
  80.     j return
  81. controllaY:
  82.     bnez $m, confronta
  83.     # y finito ma x ancora non finito
  84.     lw $t1, ($x)
  85.     sw $t1, 0($z)
  86.     move $s5, $a0
  87.     move $a0, $t1
  88.     li $v0, 1
  89.     syscall
  90.     li $a0, ' '
  91.     li $v0, 11
  92.     syscall
  93.     move $a0, $s5
  94.     addi $x, $x, 4
  95.     addi $z, $z, 4
  96.     subi $n, $n, 1
  97.     jal merge
  98.     addi $v0, $v0, 1
  99.     j return
  100. confronta:
  101.     lw $t0, 0($x)
  102.     lw $t1, 0($y)
  103.     bge $t0, $t1, altrimenti
  104.     # x < y
  105.     sw $t0, 0($z)
  106.     move $s5, $a0
  107.     move $a0, $t0
  108.     li $v0, 1
  109.     syscall
  110.     li $a0, ' '
  111.     li $v0, 11
  112.     syscall
  113.     move $a0, $s5
  114.     addi $x, $x, 4
  115.     addi $z, $z, 4
  116.     subi $n, $n, 1
  117.     jal merge
  118.     addi $v0, $v0, 1
  119.     j return
  120. altrimenti:
  121.     lw $t1, ($y)
  122.     sw $t1, 0($z)
  123.     move $s5, $a0
  124.     move $a0, $t1
  125.     li $v0, 1
  126.     syscall
  127.     li $a0, ' '
  128.     li $v0, 11
  129.     syscall
  130.     move $a0, $s5
  131.     addi $y, $y, 4
  132.     addi $z, $z, 4
  133.     subi $m, $m, 1
  134.     jal merge
  135.     addi $v0, $v0, 1
  136.     j return
  137. return:
  138.     lw $ra , 0($sp)
  139.     addi $sp, $sp, 4
  140.     jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement