Advertisement
BiRabittoh

Compito calcolatori elettronici

Feb 18th, 2019
510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. VETTORE: .space 96
  3. A: .space 24
  4.  
  5. msg1: .asciiz "Inserisci la dimensione minima di una stringa"
  6. msg2: .asciiz "%d) Inserire una stringa con almeno %d caratteri "
  7. msg3: .asciiz "Ripetizioni assenti. Inserisci un numero positivo "
  8. msg4: .asciiz "A[%d]= %d \n"
  9.  
  10. pars5: .space 8
  11. val1: .space 8
  12. val2: .space 8
  13.  
  14. pars3: .word 0
  15. inds3: .space 8
  16. dims3: .word 32
  17.  
  18. stack: .space 32
  19.  
  20. .code
  21. daddi $sp, $0, stack
  22. daddi $sp, $sp, 32
  23.  
  24. ;printf1
  25. daddi $t0, $0, msg1
  26. sd $t0, pars5($0)
  27. daddi r14, $0, pars5
  28. syscall 5
  29.  
  30. ;scanf
  31. jal InputUnsigned
  32. dadd $s3, $0, r1 ;num = $s3
  33.  
  34. ini_for1:
  35.     daddi $s0, $0, 0
  36.     daddi $s1, $0, 0
  37.     daddi $s2, $0, 0
  38. for1:
  39.     ;condizione di uscita
  40.     slti $t0, $s0, 3
  41.     beq $t0, $0, ini_for2
  42.    
  43.     do:
  44.         ;printf2
  45.         daddi $t0, $0, msg2
  46.         sd $t0, pars5($0)
  47.         daddi r14, $0, pars5
  48.         sd $s0, val1($0)
  49.         sd $s3, val2($0)
  50.         syscall 5
  51.        
  52.         ;scanf %s
  53.         daddi $t0, $s2, VETTORE
  54.         sd $t0, inds3($0)
  55.         daddi r14, $0, pars3
  56.         syscall 3
  57.        
  58.         ;condizione di uscita
  59.         slt $t0, r1, $s3
  60.         beq $t0, $0, fine_do
  61.         j do
  62.     fine_do:
  63.         ;chiamo la funzione
  64.         daddi $a0, $s2, VETTORE
  65.         dadd $a1, $0, r1
  66.         jal trova_prima_ripetizione
  67.         dadd $t1, $0, r1 ;pos = $t1
  68.        
  69.         ;if pos < 0
  70.         slti $t0, $t1, 0
  71.         beq $t0, $0, else1
  72.         ;printf msg3
  73.         daddi $t0, $0, msg3
  74.         sd $t0, pars5($0)
  75.         daddi r14, $0, pars5
  76.         syscall 5
  77.        
  78.         jal InputUnsigned
  79.         sd r1, A($s1)
  80.         j inc_for1
  81.        
  82.         else1:
  83.             sd $t1, A($s1)
  84.        
  85. inc_for1:
  86.     daddi $s0, $s0, 1
  87.     daddi $s1, $s1, 8
  88.     daddi $s2, $s2, 32
  89.     j for1
  90.  
  91. ini_for2:
  92.     daddi $s0, $0, 0
  93.     daddi $s1, $0, 0
  94.    
  95. for2:
  96.     ;condizione di uscita
  97.     slti $t0, $s0, 3
  98.     beq $t0, $0, fine
  99.    
  100.     ;printf msg4
  101.     daddi $t0, $0, msg4
  102.     sd $t0, pars5($0)
  103.     daddi r14, $0, pars5
  104.     sd $s0, val1($0)
  105.     ld $t0, A($s1)
  106.     sd $t0, val2($0)
  107.     syscall 5
  108.    
  109. inc_for2:
  110.     daddi $s0, $s0, 1
  111.     daddi $s1, $s1, 8
  112.     j for2
  113. fine:
  114. syscall 0
  115.  
  116. trova_prima_ripetizione:
  117.     daddi $sp, $sp, -32
  118.     sd $s0, 0($sp)
  119.     sd $s1, 8($sp)
  120.    
  121.     ini_for3:
  122.     daddi $s0, $0, 0 ; i = $s0
  123.     for3:
  124.         ;condizione di uscita
  125.         daddi $t0, $a1, -1
  126.         slt $t1, $s0, $t0
  127.         beq $t1, $0, return_1
  128.         ini_for4:
  129.             daddi $s1, $s0, 1 ; j = i + 1
  130.         for4:
  131.             ;condizione di uscita
  132.             slt $t0, $s1, $a1
  133.             beq $t0, $0, inc_for3
  134.            
  135.             dadd $t2, $s0, $a0
  136.             lbu $t0, 0($t2)
  137.             dadd $t3, $s1, $a0
  138.             lbu $t1, 0($t3)
  139.             beq $t0, $t1, return_j
  140.            
  141.         inc_for4:
  142.             daddi $s1, $s1, 1
  143.    
  144.     inc_for3:
  145.         daddi $s0, $s0, 1
  146.         j for3
  147.  
  148.     return_1:
  149.         daddi r1, $0, -1
  150.         j ripristino
  151.        
  152.     return_j:
  153.         daddi r1, $s0, 0
  154.    
  155.     ripristino:
  156.         ld $s0, 0($sp)
  157.         ld $s1, 8($sp)
  158.         daddi $sp, $sp, 32
  159.         jr $ra
  160.  
  161.     syscall 0
  162. #include InputUnsigned.s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement