Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.43 KB | None | 0 0
  1. .data
  2. msgNgay: .asciiz "nhap ngay DAY (DD): "
  3. msgThang: .asciiz "nhap thang MONTH (MM): "
  4. msgNam: .asciiz "nhap nam YEAR (YYYY): "
  5. errMsg: .asciiz "Ngay khong hop le !"
  6. TIME: .space 11
  7. buffer: .space 32
  8.  
  9. .text
  10. .globl main
  11. main:
  12. jal nhapTime
  13.  
  14. la $a0, TIME
  15. li $v0, 4
  16. syscall
  17.  
  18. li $v0, 10
  19. syscall
  20.  
  21. .globl nhapTime
  22. #void nhapTime
  23. nhapTime:
  24. sw $ra, ($sp)
  25. #nhap ngay luu vao t0
  26. li $2, 4
  27. la $4, msgNgay
  28. syscall
  29. li $2, 5
  30. syscall
  31. move $15, $2
  32.  
  33. #nhap thang luu vao t6
  34. li $2, 4
  35. la $4, msgThang
  36. syscall
  37. li $2, 5
  38. syscall
  39. move $14, $2
  40.  
  41. #nhap nam luu vao t2
  42. li $2, 4
  43. la $4, msgNam
  44. syscall
  45. li $2, 5
  46. syscall
  47. move $10, $2
  48.  
  49. jal check
  50.  
  51. lw $ra, ($sp)
  52. jr $ra
  53.  
  54. .globl is_leap_year
  55. #bool is_leap_year(int year)
  56. #a0 = year
  57. is_leap_year:
  58. li $v0, 0 # mac dinh k nhuan
  59.  
  60. li $t0, 4 # t0 = 4
  61. divu $a0, $t0 # year/4
  62. mfhi $t1 # tim so du
  63. bne $t1, $zero, exit # khong chia het cho 4
  64.  
  65. li $t0, 100 # $t0 = 100
  66. div $a0, $t0 # year/100
  67. mfhi $t1
  68. bne $t1, $zero, set_true # k chia het cho 100 (year < 100)
  69.  
  70. # chia het cho 100
  71. # va chia het cho 400 thi ok
  72. li $t0, 400 # $t0 = 400
  73. divu $a0, $t0 # year/400
  74. mfhi $t1
  75. bne $t1, $zero, exit # k chia het cho 400
  76. set_true:
  77. addi $v0, $v0, 1 # true
  78. exit:
  79. jr $ra #return
  80.  
  81. .globl slNgay
  82. #int slNgay(int thang, int nam)
  83. #thang = $14
  84. #nam = $10
  85.  
  86. slNgay:
  87. move $s1, $ra
  88. beq $14, 1, slngay31
  89. beq $14, 3, slngay31
  90. beq $14, 5, slngay31
  91. beq $14, 7, slngay31
  92. beq $14, 8, slngay31
  93. beq $14, 10, slngay31
  94. beq $14, 12, slngay31
  95.  
  96. beq $14, 4, slngay30
  97. beq $14, 6, slngay30
  98. beq $14, 9, slngay30
  99. beq $14, 11, slngay30
  100.  
  101. slngaythang2:
  102. move $a0, $10
  103. jal is_leap_year
  104. beq $v0, 0, thang2khongnhuan
  105.  
  106. beq $v0, 1, thang2nhuan
  107.  
  108. thang2nhuan:
  109. li $a0, 29
  110. move $ra, $s1
  111. jr $ra
  112.  
  113. thang2khongnhuan:
  114. li $a0, 28
  115. move $ra, $s1
  116. jr $ra
  117.  
  118. slngay31:
  119. li $a0, 31
  120. jr $ra
  121.  
  122. slngay30:
  123. li $a0, 30
  124. jr $ra
  125.  
  126.  
  127. .globl check
  128. # check(int ngay, int thang, int nam)
  129. # false thi exit program
  130. # true thi bien TIME se mang gia tri cua ngay vua nhap, addr bien time auto gan vao $a0
  131. check:
  132.  
  133. move $t9, $ra
  134. #kiem tra nam 0k
  135. sgt $t1, $10, $zero
  136. beqz $t1, false
  137.  
  138. #kiem tra thang 0k
  139. li $t5, 0 #thang > 0
  140. sgt $t1, $14, $t5
  141. beqz $t1, false
  142.  
  143. li $t5, 13 #thang < 13
  144. slt $t1, $14, $t5
  145. beqz $t1, false
  146.  
  147. #kiem tra ngay
  148. li $t5, 0
  149. sgt $t1, $15, $t5 #if ngay > 0 -> t1 = 1
  150. beqz $t1, false #if t1 = 0 -> ngay < 1 -> false
  151.  
  152. jal slNgay
  153. #a0 = slngay
  154. #neu ngay > a0 return false
  155.  
  156.  
  157. ble $15, $a0, true
  158.  
  159. false:
  160. la $a0, errMsg
  161. li $v0, 4
  162. syscall
  163.  
  164. li $v0, 10
  165. syscall
  166. #li $a0, 0
  167. #move $ra, $s0
  168. #jr $ra
  169. true:
  170. # neu true thi bat dau luu vao time
  171. la $s1, TIME
  172.  
  173. move $a0, $15
  174. jal itoa
  175.  
  176. lb $t4, 0($s0)
  177.  
  178. sb $t4, ($s1) # luu vao time
  179. add $s1, $s1, 1 # len 1 o
  180.  
  181. lb $t4, 1($s0)
  182. beq $t4, '\0', nxt1
  183. sb $t4, ($s1) # luu vao time
  184. add $s1, $s1, 1 # len 1 o
  185.  
  186. nxt1:
  187. li $t4, '/'
  188. sb $t4, ($s1)
  189. add $s1, $s1, 1
  190.  
  191. move $a0, $14
  192. jal itoa
  193.  
  194. lb $t4, 0($s0)
  195. sb $t4, ($s1) # luu vao time
  196. add $s1, $s1, 1 # len 1 o
  197.  
  198. lb $t4, 1($s0)
  199. beq $t4, '\0', nxt2 # neu gap null thi nex
  200. sb $t4, ($s1) # luu vao time
  201. add $s1, $s1, 1 # len 1 o
  202. nxt2:
  203. li $t4, '/'
  204. sb $t4, ($s1)
  205. add $s1, $s1, 1
  206.  
  207. move $a0, $10
  208. jal itoa
  209.  
  210. lb $t4, 0($s0)
  211. sb $t4, ($s1) # luu vao time
  212. add $s1, $s1, 1 # len 1 o
  213.  
  214. lb $t4, 1($s0)
  215. sb $t4, ($s1) # luu vao time
  216. add $s1, $s1, 1 # len 1 o
  217.  
  218. lb $t4, 2($s0)
  219. sb $t4, ($s1) # luu vao time
  220. add $s1, $s1, 1 # len 1 o
  221.  
  222. lb $t4, 3($s0)
  223. sb $t4, ($s1) # luu vao time
  224. add $s1, $s1, 1 # len 1 o
  225.  
  226. addi $s1, $s1, 1
  227. li $t4, '\0' #null terminator
  228. sb $t4, ($s1)
  229.  
  230. move $ra, $t9
  231. jr $ra
  232.  
  233. .globl itoa
  234. # a0 = num
  235. # s0 = addr cua return value
  236. # char* itoa(int n)
  237. itoa:
  238. move $s5, $ra
  239. la $t0, buffer # load buf
  240. add $t0, $t0, 30 # seek the end
  241. sb $0, 1($t0) # null-terminated str
  242. sb $t1, ($t0) # init. with ascii 0
  243. li $t3, 10 # t3 = 10
  244. beq $a0, $0, end_itoa # =0 thi end
  245.  
  246. loop_itoa:
  247. div $a0, $t3 # a /= 10
  248. mflo $a0
  249. mfhi $t4 # lay mod =
  250. add $t4, $t4, '0' # int -> char
  251. sb $t4, ($t0) # luu vao buf
  252. sub $t0, $t0, 1 # lui buf ve 1 o
  253. bne $a0, $0, loop_itoa # neu chua = 0 thi tiep tuc
  254. addi $t0, $t0, 1 # len buf 1 o de ve dung' vi tri
  255.  
  256. end_itoa:
  257. move $s0, $t0 # tra dia chi str ve s0
  258. move $ra, $s5
  259. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement