Advertisement
rsvaco

etc pract 6

Nov 22nd, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. ##########################################################
  2. # Segmento de datos
  3. ##########################################################
  4.  
  5. .data 0x10000000
  6. reloj: .word 0x00173b3b # HH:MM:SS (3 bytes de menor peso)
  7.  
  8. cad_asteriscos: .asciiz "\n **************************************"
  9. cad_horas: .asciiz "\n Horas: "
  10. cad_minutos: .asciiz " Minutos: "
  11. cad_segundos: .asciiz " Segundos: "
  12. cad_reloj_en_s: .asciiz "\n Reloj en segundos: "
  13.  
  14. ##########################################################
  15. # Segmento de código
  16. ##########################################################
  17.  
  18. .globl __start
  19. .text 0x00400000
  20.  
  21. __start: la $a0, reloj
  22.  
  23. move $a0, $v0
  24. jal imprime_s
  25.  
  26. la $a0, reloj
  27. jal imprime_reloj
  28.  
  29. la $a0, reloj
  30. jal pasa_segundo # Incrementa el reloj en un segundo
  31. jal pasa_segundo # Incrementa el reloj en un segundo
  32.  
  33. la $a0, reloj
  34. jal imprime_reloj
  35.  
  36.  
  37. salir: li $v0, 10 # Código de exit (10)
  38. syscall # Última instrucción ejecutada
  39. .end
  40.  
  41.  
  42. ##########################################################
  43. # Subrutina que imprime el valor del reloj
  44. # Entrada: $a0 con la dirección de la variable reloj
  45. ##########################################################
  46.  
  47. imprime_reloj: move $t0, $a0
  48. la $a0, cad_asteriscos # Dirección de la cadena
  49. li $v0, 4 # Código de print_string
  50. syscall
  51.  
  52. la $a0, cad_horas # Dirección de la cadena
  53. li $v0, 4 # Código de print_string
  54. syscall
  55.  
  56. lbu $a0, 2($t0) # Lee el campo HH
  57. li $v0, 1 # Código de print_int
  58. syscall
  59.  
  60. la $a0, cad_minutos # Dirección de la cadena
  61. li $v0, 4 # Código de print_string
  62. syscall
  63.  
  64. lbu $a0, 1($t0) # Lee el campo MM
  65. li $v0, 1 # Código de print_int
  66. syscall
  67.  
  68. la $a0, cad_segundos # Dirección de la cadena
  69. li $v0, 4 # Código de print_string
  70. syscall
  71.  
  72. lbu $a0, 0($t0) # Lee el campo SS
  73. li $v0, 1 # Código de print_int
  74. syscall
  75.  
  76. la $a0, cad_asteriscos # Dirección de la cadena
  77. li $v0, 4 # Código de print_string
  78. syscall
  79. jr $ra
  80.  
  81. ##########################################################
  82. # Subrutina que imprime los segundos calculados
  83. # Entrada: $a0 con los segundos a imprimir
  84. ##########################################################
  85.  
  86. imprime_s: move $t0, $a0
  87. la $a0, cad_asteriscos # Dirección de la cadena
  88. li $v0, 4 # Código de print_string
  89. syscall
  90.  
  91.  
  92. la $a0, cad_reloj_en_s # Dirección de la cadena
  93. li $v0, 4 # Código de print_string
  94. syscall
  95.  
  96. move $a0, $t0 # Valor entero a imprimir
  97. li $v0, 1 # Código de print_int
  98. syscall
  99.  
  100. la $a0, cad_asteriscos # Dirección de la cadena
  101. li $v0, 4 # Código de print_string
  102. syscall
  103. jr $ra
  104.  
  105. ##########################################################
  106. # Subrutina que incrementa el reloj en una hora
  107. # Entrada: $a0 con la dirección del reloj
  108. # Salida: reloj incrementado en memoria
  109. # Nota: 23:MM:SS -> 00:MM:SS
  110. ##########################################################
  111.  
  112. pasa_hora: lbu $t0, 2($a0) # $t0 = HH
  113. addiu $t0, $t0, 1 # $t0 = HH++
  114. li $t1, 24
  115. beq $t0, $t1, H24 # Si HH==24 se pone HH a cero
  116. sb $t0, 2($a0) # Escribe HH++
  117. j fin_pasa_hora
  118.  
  119.  
  120. pasa_segundo: lbu $t0, 0($a0)
  121. addiu $t0, $t0, 1
  122. li $t1, 60
  123. beq $t0, $t1, S60
  124. sb $t0, 0($a0)
  125. j fin_pasa_segundo
  126.  
  127.  
  128. devuelve_reloj_en_s_sd: lb $t0, 0($a0)
  129. lb $t1, 1($a0)
  130. lb $t2, 2($a0)
  131. li $t4, 0
  132.  
  133. sll $t3, $t2, 11
  134. addu $t4, $t4, $t3
  135. sll $t3, $t2, 10
  136. addu $t4, $t4, $t3
  137. sll $t3, $t2, 9
  138. addu $t4, $t4, $t3
  139. sll $t3, $t2, 4
  140. addu $t4, $t4, $t3
  141.  
  142. sll $t3, $t1, 5
  143. addu $t4, $t4, $t3
  144. sll $t3, $t1, 4
  145. addu $t4, $t4, $t3
  146. sll $t3, $t1, 3
  147. addu $t4, $t4, $t3
  148. sll $t3, $t1, 2
  149. addu $t4, $t4, $t3
  150.  
  151. addu $t4, $t4, $t0
  152.  
  153. move $v0, $t4
  154.  
  155. jr $ra
  156.  
  157.  
  158. devuelve_reloj_en_s_srd: lb $t0, 0($a0)
  159. lb $t1, 1($a0)
  160. lb $t2, 2($a0)
  161. li $t4, 0
  162.  
  163. sll $t3, $t2, 11
  164. addu $t4, $t4, $t3
  165. sll $t3, $t2, 9
  166. subu $t4, $t4, $t3
  167. sll $t3, $t2, 5
  168. addu $t4, $t4, $t3
  169. sll $t3, $t2, 4
  170. subu $t4, $t4, $t3
  171.  
  172. sll $t3, $t1, 6
  173. addu $t4, $t4, $t3
  174. sll $t3, $t1, 2
  175. subu $t4, $t4, $t3
  176.  
  177. addu $t4, $t4, $t0
  178.  
  179. move $v0, $t4
  180.  
  181. jr $ra
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. H24: sb $zero, 2($a0) # Escribe HH a 0
  191. fin_pasa_hora: jr $ra
  192.  
  193. S60: sb $zero, 0($a0)
  194. fin_pasa_segundo: jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement