Guest User

Untitled

a guest
Jul 15th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. .text
  2. .align 2
  3. .globl main
  4. main:
  5. li $v0, 5
  6. syscall
  7. addi $s0, $v0, 0 #в s0 -- количество элементов массивов
  8. li $t0, 0 #счетчик"
  9. l0: #заполнение первого массива
  10. li $v0, 5 #считать с клавиатуры элемент массива arr1
  11. syscall
  12. sb $v0, arr1 + 0($t0) #записать его в память
  13. addi $t0, $t0, 1 #увеличить счетчик
  14. bne $t0, $s0, l0 #если счетчик не равен $s0, продолжить
  15. li $t0, 0 #обнуление счетчика
  16. l01: #заполнение второго массива
  17. li $v0, 5 #считать с клавиатуры элемент массива arr2
  18. syscall
  19. sb $v0, arr2 + 0($t0) #записать его в память
  20. addi $t0, $t0, 1 #увеличить счетчик
  21. bne $t0, $s0, l01 #если счетчик не равен $s0, продолжить
  22. li $t0, 0 #обнуление счетчика
  23. li $v0, 1 #записать в v0 единицу -- номер сикролла для последующего вывода массивов
  24.  
  25. #подготовка регистров, в которые будут записаны минимумы массивов (t1 и t2)
  26. lb $t1, arr1 + 0($t0) #читать из памяти первый элемент arr1, записать его в t1
  27. lb $t2, arr2 + 0($t0) #читать из памяти первый элемент arr2, записать его в t2
  28. li $t0, 1 #в t0 поместить 1, чтобы начинать счетчик не с нуля. Нулевые элементы уже в v1 и v2
  29.  
  30. l02: #поиск минимального элемента в массиве arr1
  31. lb $a0, arr1 + 0($t0) #читать из памяти элемент arr1
  32. bltu $a0, $t1, if1 #перейти к метке if1 если найден элемент меньше минимума
  33. branch1: ##метка безусловного перехода из ветки условного оператора, в которой меняется минимум
  34. addi $t0, $t0, 1 #увеличить счетчик
  35. bne $t0, $s0, l02 #пока не дойдем до конца массива arr1
  36. l03: #поиск минимального элемента в массиве arr2
  37. lb $a0, arr2 + 0($t0) #читать из памяти элемент arr2
  38. bltu $a0, $t2, if2 #перейти к метке if2 если найден элемент меньше минимума
  39. branch2: #метка безусловного перехода из ветки условного оператора, в которой меняется минимум
  40. addi $t0, $t0, 1 #увеличить счетчик
  41. bne $t0, $s0, l03 #пока не дойдем до конца массива arr2
  42. addu $s1, $t1, $t2 #сумма минимумов
  43. sra $s1, $s2, 1 #деление пополам
  44. addi $a0, $t1, 0 #вывод минимума arr1
  45. syscall
  46. addi $a0, $t2, 0 #вывод минимума arr2
  47. syscall
  48. jr $ra #конец
  49. .data
  50. .align 4
  51. arr1:
  52. .space 120
  53. arr2:
  54. .space 120
  55. if1:
  56. addi $t1, $a0, 0 #делаем минимумом arr1 то, что в a0
  57. b branch1
  58.  
  59. if2:
  60. addi $t2, $a0, 0 #делаем минимумом arr2 то, что в a0
  61. b branch2
Add Comment
Please, Sign In to add comment