Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.82 KB | None | 0 0
  1. .data
  2. #read file
  3. obuffer : .space 22
  4. buffer: .space 32
  5. Time: .space 11
  6.  
  7. TIME_1: .space 11
  8. TIME_2: .space 11
  9.  
  10. date1: .word 1,1,1
  11. date2: .word 1,1,1
  12.  
  13. StrLeapYear: .space 9 # luu 2 nam nhuan gan nhat vao trong string
  14. leapYear: .word 0,0 #luu 2 nam nhuan gan nhat
  15.  
  16. fin : .asciiz "input.txt"
  17. fout : .asciiz "output.txt"
  18.  
  19. errorInput: .asciiz "Loi File Input.\n"
  20. #Thu ngay--------------------------
  21. mon: .asciiz "Monday"
  22. tue: .asciiz " Tuesday"
  23. web: .asciiz "Wednesday"
  24. thur: .asciiz "Thursday"
  25. fri: .asciiz "Friday"
  26. sat: .asciiz "Saturday"
  27. sun: .asciiz "Sunday"
  28. #Can---------------------------
  29. Giap: .asciiz " Giap"
  30. At: .asciiz " At"
  31. Binh: .asciiz " Binh"
  32. Dinh: .asciiz " Dinh"
  33. Mau: .asciiz " Mau"
  34. Ky: .asciiz " Ky"
  35. Canh: .asciiz " Canh"
  36. Tan: .asciiz " Tan"
  37. Nham: .asciiz " Nham"
  38. Quy: .asciiz " Quy"
  39. Can: .word Giap,At,Binh,Dinh,Mau,Ky,Canh,Tan,Nham,Quy
  40. #Chi---------------------------
  41. Ty: .asciiz " Ty"
  42. Suu: .asciiz " Suu"
  43. Dan: .asciiz " Dan"
  44. Meo: .asciiz " Meo"
  45. Thin:.asciiz " Thin"
  46. Ngo: .asciiz " Ngo"
  47. Mui: .asciiz " Mui"
  48. Than: .asciiz " Than"
  49. Dau: .asciiz " Dau"
  50. Tuat: .asciiz " Tuat"
  51. Hoi: .asciiz " Hoi"
  52. Chi: .word Ty,Suu,Dan,Meo,Thin,Ty,Ngo,Mui,Than,Dau,Tuat,Hoi
  53.  
  54. CanChi.Result: .space 20
  55.  
  56. # menu
  57. MENU: .asciiz "\n----------Ban hay chon 1 trong cac thao tac duoi day----------\n"
  58. option1: .asciiz "1. Xuat chuoi TIME theo dinh dang DD/MM/YYYY\n"
  59. option2: .asciiz "2. Chuyen doi chuoi TIME thanh mot trong cac dinh dang sau:\n"
  60. option2a: .asciiz "\tA. MM/DD/YYYY\n"
  61. option2b: .asciiz "\tB. Month DD, YYYY\n"
  62. option2c: .asciiz "\tC. DD Month, YYYY\n"
  63. option3: .asciiz "3. Kiem tra nam vua nhap co phai la nam nhuan hay khong: \n"
  64. option4: .asciiz "4. Ngay vua nhap la ngay thu may trong tuan\n"
  65. option5: .asciiz "5. Cho biet ngay vua nhap la ngay thu may ke tu 01/01/0001\n"
  66. option6: .asciiz "6. Cho biet Can Chi cua nam vua nhap\n"
  67. option7: .asciiz "7. Cho biet khoang thoi gian tu chuoi Time_1 va Time_2\n"
  68. option8: .asciiz "8. Cho biet 2 nam nhuan gan nhat voi TIME\n"
  69. option9: .asciiz "9. nhap input tu file input.txt xuat ket qua toan bo cac chuc nang tren ra file output.txt\n"
  70. stuff: .asciiz "---------------------------------------------------------------\n"
  71. option: .asciiz "Lua chon: "
  72. type: .asciiz "Loai (A/B/C): "
  73. result: .asciiz "\nKet qua: "
  74. m_continue: .asciiz "\nChon (1) de tiep tuc, (0) de thoat: "
  75. newline: .asciiz "\r\n"
  76.  
  77. ArrayOption: .word do1,do2,do3,do4,do5,do6,do7,do8,do9
  78. # nhaptime va convert
  79. msgNgay: .asciiz "nhap ngay DAY (DD): "
  80. msgThang: .asciiz "nhap thang MONTH (MM): "
  81. msgNam: .asciiz "nhap nam YEAR (YYYY): "
  82. errMsg: .asciiz "Ngay khong hop le !"
  83. kq_convert: .space 20
  84. typeMsg: .asciiz "Nhap type: "
  85. .text
  86.  
  87. main:
  88. Running:
  89. jal Menu
  90.  
  91. la $a0, m_continue
  92. li $v0, 4
  93. syscall
  94.  
  95. li $v0, 5
  96. syscall
  97. beq $v0, $0, Exit
  98. j Running
  99. #---
  100. #uncomment ben duoi de test thay doi ham nhap
  101. #la $s2, Time <- truyen bien vao cho nay, time1, time2, time3..
  102. #jal nhapTime
  103.  
  104. #la $a0, Time
  105. #li $v0, 4
  106. #syscall
  107. #---
  108.  
  109. Exit:
  110. li $v0,10
  111. syscall
  112.  
  113.  
  114. #Ham----------------------------
  115. Menu:
  116. addi $sp, $sp, -4
  117. sw $ra, 0($sp)
  118.  
  119. #####################NHAP TIME################################ Them vao day
  120. la $s2, Time #la bien time vao $s2 de nhap
  121. jal nhapTime
  122.  
  123. li $v0, 4
  124. la $a0, MENU
  125. syscall
  126.  
  127. la $a0, option1
  128. syscall
  129.  
  130. la $a0, option2
  131. syscall
  132.  
  133. la $a0, option2a
  134. syscall
  135.  
  136. la $a0, option2b
  137. syscall
  138.  
  139. la $a0, option2c
  140. syscall
  141.  
  142. la $a0, option3
  143. syscall
  144.  
  145. la $a0, option4
  146. syscall
  147.  
  148. la $a0, option5
  149. syscall
  150.  
  151. la $a0, option6
  152. syscall
  153.  
  154. la $a0, option7
  155. syscall
  156.  
  157. la $a0, option8
  158. syscall
  159.  
  160. la $a0, option9
  161. syscall
  162.  
  163. la $a0, stuff
  164. syscall
  165.  
  166. la $a0, option
  167. syscall
  168.  
  169. la $v0, 5
  170. syscall
  171.  
  172. addi $v0, $v0, -1
  173. sll $v0, $v0, 2
  174. la $t0, ArrayOption
  175. add $t0, $t0, $v0
  176. lw $t0, ($t0)
  177. jr $t0
  178.  
  179.  
  180. do1:
  181. li $a0,1
  182. li $v0,1
  183. syscall
  184. j Menu.End
  185.  
  186. do2:
  187. li $v0, 4
  188. la $a0, typeMsg
  189. syscall
  190.  
  191. li $v0, 12
  192. syscall
  193.  
  194. jal convert
  195. la $a0, kq_convert
  196. li $v0, 4
  197. syscall
  198.  
  199. j Menu.End
  200.  
  201. do3:
  202. li $a0,3
  203. li $v0,1
  204. syscall
  205. j Menu.End
  206.  
  207. do4:
  208. la $a0,Time
  209. jal WeekDay
  210. move $a0,$v0
  211. li $v0,4
  212. syscall
  213. j Menu.End
  214.  
  215. do5:
  216. li $a0,5
  217. li $v0,1
  218. syscall
  219. j Menu.End
  220.  
  221. do6:
  222. li $a0,6
  223. li $v0,1
  224. syscall
  225. j Menu.End
  226.  
  227. do7:
  228. la $s2, TIME_2
  229. jal nhapTime
  230. li $a0,'\n'
  231. li $v0,11
  232. syscall
  233. la $a0,Time
  234. la $a1,TIME_2
  235. jal DateDiff
  236. move $a0,$v0
  237. li $v0,1
  238. syscall
  239. j Menu.End
  240.  
  241. do8:
  242. la $a0,Time
  243. jal LeapYearNearly
  244. move $a0,$v0
  245. li $v0,4
  246. syscall
  247. j Menu.End
  248.  
  249. do9:
  250.  
  251. #Read File --> obuffer
  252. la $a0,fin
  253. jal File.Read
  254.  
  255. #Tach obuffer -> TIME_1 , TIME_2
  256. la $a0,obuffer
  257. la $a1,TIME_1
  258. la $a2,TIME_2
  259.  
  260. jal Time.Split
  261.  
  262. la $a0,TIME_1
  263. jal TIME.Default
  264.  
  265. la $a0,TIME_2
  266. jal TIME.Default
  267.  
  268. la $a0,fout
  269. jal File.Write
  270.  
  271. la $a0,TIME_1
  272. jal Month
  273. move $a0,$v0
  274. li $v0,1
  275. syscall
  276.  
  277.  
  278. j Menu.End
  279.  
  280.  
  281.  
  282. Menu.End:
  283. lw $ra, 0($sp)
  284.  
  285. addi $sp, $sp, 4
  286. jr $ra
  287.  
  288.  
  289.  
  290. #$a0 = Time(dd mm yyyy)
  291. #return $a0 = Time (dd/mm/yyyy)
  292. TIME.Default:
  293. addi $sp,$sp,-12
  294. sw $ra,0($sp)
  295. sw $a0,4($sp)
  296. sw $t0,8($sp)
  297.  
  298. li $t0,'\\'
  299.  
  300. sb $t0,2($a0)
  301. sb $t0,5($a0)
  302.  
  303. lw $ra,0($sp)
  304. lw $a0,4($sp)
  305. lw $t0,8($sp)
  306. addi $sp,$sp,12
  307. jr $ra
  308.  
  309.  
  310. #$a0 = file name output
  311. File.Write:
  312. #open file for wirte
  313. addi $sp,$sp,-16
  314. sw $ra,0($sp)
  315. sw $a0,4($sp)
  316. sw $s6,8($sp)
  317. sw $v0,12($sp)
  318.  
  319. li $v0,13
  320. li $a1,1
  321. li $a2,0
  322. syscall
  323. bltz $v0,ERROR
  324. move $s6,$v0
  325. #write file
  326. la $a1,TIME_1
  327. jal fputs
  328.  
  329. la $a1,newline
  330. jal fputs
  331.  
  332. la $a1,TIME_2
  333. jal fputs
  334.  
  335. #close file
  336. li $v0,16
  337. move $a0,$s6
  338. syscall
  339.  
  340. lw $ra,0($sp)
  341. lw $a0,4($sp)
  342. lw $s6,8($sp)
  343. lw $v0,12($sp)
  344. addi $sp,$sp,16
  345. jr $ra
  346.  
  347. #$a0 = fileName Input
  348. #KQ = obuffer
  349. File.Read:
  350. subi $sp,$sp,24
  351. sw $ra,0($sp)
  352. sw $s6,4($sp)
  353. sw $v0,8($sp)
  354. sw $a0,12($sp)
  355. sw $a1,16($sp)
  356. sw $a2,20($sp)
  357. #open file
  358. li $v0,13
  359. li $a1,0
  360. li $a2,0
  361. syscall
  362.  
  363. bltz $v0,ERROR
  364. move $s6,$v0
  365. #read file
  366. li $v0,14
  367. move $a0,$s6
  368. la $a1,obuffer
  369. li $a2,22
  370. syscall
  371. #lose file
  372. li $v0,16
  373. move $a0,$s6
  374. syscall
  375.  
  376. lw $ra,0($sp)
  377. lw $s6,4($sp)
  378. lw $v0,8($sp)
  379. lw $a0,12($sp)
  380. lw $a1,16($sp)
  381. lw $a2,20($sp)
  382. addi $sp,$sp,24
  383. jr $ra
  384. ERROR:
  385. li $v0,4
  386. la $a0,errorInput
  387.  
  388. li $v0,10
  389. syscall
  390.  
  391. #$a0 = obuffer
  392. #$a1 = TIME_1
  393. #$a2 = TIME_2
  394.  
  395. Time.Split:
  396. subi $sp,$sp,24
  397. sw $ra,0($sp)
  398. sw $a0, 4($sp)
  399. sw $a1, 8($sp)
  400. sw $a2, 12($sp)
  401. sw $t0,16($sp)
  402. sw $t2,20($sp)
  403.  
  404. #Lay TIME_1
  405. li $t0,10
  406. loopTime_1:
  407. beq $t0,$0,loopTime_1.Out
  408. lb $t2,0($a0)
  409. sb $t2,0($a1)
  410. addi $a0,$a0,1
  411. addi $a1,$a1,1
  412. subi $t0,$t0,1
  413.  
  414. j loopTime_1
  415. loopTime_1.Out:
  416.  
  417.  
  418.  
  419. #lay TIME_2
  420. li $t0,10
  421. addi $a0,$a0,2
  422. loopTime_2:
  423. beq $t0,$0,loopTime_2.Out
  424. lb $t2,0($a0)
  425. sb $t2,0($a2)
  426. addi $a0,$a0,1
  427. addi $a2,$a2,1
  428. subi $t0,$t0,1
  429.  
  430. j loopTime_2
  431. loopTime_2.Out:
  432.  
  433. lw $ra,0($sp)
  434. lw $a0, 4($sp)
  435. lw $a1, 8($sp)
  436. lw $a2, 12($sp)
  437. lw $t0,16($sp)
  438. lw $t2,20($sp)
  439. addi $sp,$sp,24
  440. jr $ra
  441.  
  442.  
  443. #$a1 = string
  444. fputs:
  445. subi $sp,$sp,12
  446. sw $ra,0($sp)
  447. sw $v0,4($sp)
  448. sw $a2,8($sp)
  449. move $a2,$a1 # get buffer address
  450.  
  451. fputs_loop:
  452. lb $t0,0($a2) # get next character -- is it EOS?
  453. addiu $a2,$a2,1 # pre-increment pointer
  454. bnez $t0,fputs_loop # no, loop
  455.  
  456. subu $a2,$a2,$a1 # get strlen + 1
  457. subiu $a2,$a2,1 # compensate for pre-increment
  458.  
  459. move $a0,$s6 # get file descriptor
  460. li $v0,15 # syscall for write to file
  461. syscall
  462.  
  463. lw $ra,0($sp)
  464. lw $v0,4($sp)
  465. lw $a2,8($sp)
  466. addi $sp,$sp,12
  467. jr $ra # return
  468.  
  469.  
  470. #$a0 = source1, $a2 = source2 ,$a1 = Destination
  471. Str.Concatenate:
  472. subi $sp,$sp,20
  473. sw $ra,0($sp)
  474. sw $a0,4($sp)
  475. sw $a1,8($sp)
  476. sw $a2,12($sp)
  477. sw $v0,16($sp)
  478. # Copy first string to result buffer
  479. jal Str.Copier
  480. nop
  481. # Concatenate second string on result buffer
  482. la $a0, ($a2)
  483. or $a1, $v0, $zero
  484. jal Str.Copier
  485. lw $ra,0($sp)
  486. lw $a0,4($sp)
  487. lw $a1,8($sp)
  488. lw $a2,12($sp)
  489. lw $v0,16($sp)
  490. addi $sp,$sp,20
  491. jr $ra
  492.  
  493.  
  494. #$a0 = source1 $a1 = Destination
  495. #$v0 = result
  496. Str.Copier:
  497. subi $sp,$sp,12
  498. sw $ra,0($sp)
  499. sw $t0,4($sp)
  500. sw $t1,8($sp)
  501.  
  502. or $t0, $a0, $zero # Source
  503. or $t1, $a1, $zero # Destination
  504.  
  505. loopCopier:
  506. lb $t2, 0($t0)
  507. beq $t2, $zero, loopCopier.out
  508. addiu $t0, $t0, 1
  509. sb $t2, 0($t1)
  510. addiu $t1, $t1, 1
  511. b loopCopier
  512. loopCopier.out:
  513. or $v0, $t1, $zero # Return last position on result buffer
  514. lw $ra,0($sp)
  515. lw $t0,4($sp)
  516. lw $t1,8($sp)
  517. addi $sp,$sp,12
  518. jr $ra
  519.  
  520. #$a3 = nam
  521. #KQ = CanChi.Result
  522. CanChi:
  523. subi $sp,$sp,16
  524. sw $ra,0($sp)
  525. sw $t0,4($sp)
  526. sw $t1,8($sp)
  527. sw $3,12($sp)
  528.  
  529.  
  530. #tinh toan can = (nam + 6 )%10
  531. move $t0,$a3
  532. addi $t0,$t0,6
  533. li $t3,10
  534. div $t0,$t3
  535. mfhi $t0
  536.  
  537. #tinh toan chi = (nam + 8) %12
  538. move $t1,$a3
  539. addi $t1,$t1,8
  540. li $t3,12
  541. div $t1,$t3
  542. mfhi $t1
  543.  
  544. #Nhan can * 4 , Chi * 4
  545.  
  546. li $t3,4
  547. mult $t3,$t1
  548. mflo $t1
  549.  
  550. mult $t3,$t0
  551. mflo $t0
  552.  
  553. #Point address arry Can,Chi
  554. la $t3,Can
  555. la $t4,Chi
  556.  
  557. #lay vi tri tuong ung
  558. add $t3,$t3,$t0
  559. add $t4,$t4,$t1
  560.  
  561. la $a0,($t3)
  562. lw $a2, ($t4)
  563. la $a1, CanChi.Result
  564.  
  565. jal Str.Concatenate
  566.  
  567.  
  568. lw $ra,0($sp)
  569. lw $t0,4($sp)
  570. lw $t1,8($sp)
  571. lw $3,12($sp)
  572. addi $sp,$sp,16
  573. jr $ra
  574.  
  575. #----------------BHUY
  576. .globl nhapTime
  577. #ngay nhap se luu vao $15, dang int
  578. #thang nhap se luu vao $14, dang int
  579. #nam nhap se luu vao $10, dang int
  580. #void nhapTime
  581. nhapTime:
  582. sw $15, -4($sp)
  583. sw $14, -8($sp)
  584. sw $10, -12($sp)
  585. sw $ra, -16($sp)
  586. sw $2, -20($sp)
  587. sw $4, -24($sp)
  588.  
  589. li $2, 4
  590. la $4, msgNgay
  591. syscall
  592. li $2, 5
  593. syscall
  594. move $15, $2
  595.  
  596.  
  597. li $2, 4
  598. la $4, msgThang
  599. syscall
  600. li $2, 5
  601. syscall
  602. move $14, $2
  603.  
  604.  
  605. li $2, 4
  606. la $4, msgNam
  607. syscall
  608. li $2, 5
  609. syscall
  610. move $10, $2
  611.  
  612. sw $15, -80($sp)
  613. sw $14, -84($sp)
  614. sw $10, -88($sp)
  615.  
  616. jal check
  617.  
  618. lw $15, -4($sp)
  619. lw $14, -8($sp)
  620. lw $10, -12($sp)
  621. lw $ra, -16($sp)
  622. lw $2, -20($sp)
  623. lw $4, -24($sp)
  624. jr $ra
  625.  
  626. .globl LeapYear
  627. #bool is_leap_year(int year)
  628. #a0 = year
  629. #v0 = result
  630. LeapYear:
  631. li $v0, 0 # mac dinh k nhuan
  632.  
  633. li $t0, 4 # t0 = 4
  634. divu $a0, $t0 # year/4
  635. mfhi $t1 # tim so du
  636. bne $t1, $zero, exit # khong chia het cho 4
  637.  
  638. li $t0, 100 # $t0 = 100
  639. div $a0, $t0 # year/100
  640. mfhi $t1
  641. bne $t1, $zero, set_true # k chia het cho 100 (year < 100)
  642.  
  643. # chia het cho 100
  644. # va chia het cho 400 thi ok
  645. li $t0, 400 # $t0 = 400
  646. divu $a0, $t0 # year/400
  647. mfhi $t1
  648. bne $t1, $zero, exit # k chia het cho 400
  649. set_true:
  650. addi $v0, $v0, 1 # true
  651. exit:
  652. jr $ra #return
  653.  
  654. .globl slNgay
  655. #int slNgay(int thang, int nam)
  656. #thang = $14
  657. #nam = $10
  658.  
  659. slNgay:
  660. move $s1, $ra
  661. beq $14, 1, slngay31
  662. beq $14, 3, slngay31
  663. beq $14, 5, slngay31
  664. beq $14, 7, slngay31
  665. beq $14, 8, slngay31
  666. beq $14, 10, slngay31
  667. beq $14, 12, slngay31
  668.  
  669. beq $14, 4, slngay30
  670. beq $14, 6, slngay30
  671. beq $14, 9, slngay30
  672. beq $14, 11, slngay30
  673.  
  674. slngaythang2:
  675. move $a0, $10
  676. jal LeapYear
  677. beq $v0, 0, thang2khongnhuan
  678.  
  679. beq $v0, 1, thang2nhuan
  680.  
  681. thang2nhuan:
  682. li $a0, 29
  683. move $ra, $s1
  684. jr $ra
  685.  
  686. thang2khongnhuan:
  687. li $a0, 28
  688. move $ra, $s1
  689. jr $ra
  690.  
  691. slngay31:
  692. li $a0, 31
  693. jr $ra
  694.  
  695. slngay30:
  696. li $a0, 30
  697. jr $ra
  698.  
  699.  
  700. .globl check
  701. # check(int ngay, int thang, int nam)
  702. # false thi exit program
  703. # true thi bien TIME se mang gia tri cua ngay vua nhap, addr bien time auto gan vao $a0
  704. check:
  705. sw $ra, -48($sp)
  706. sw $t1, -56($sp)
  707. sw $t5, -60($sp)
  708.  
  709. #kiem tra nam 0k
  710. sgt $t1, $10, $zero
  711. beqz $t1, false
  712.  
  713. #kiem tra thang 0k
  714. li $t5, 0 #thang > 0
  715. sgt $t1, $14, $t5
  716. beqz $t1, false
  717.  
  718. li $t5, 13 #thang < 13
  719. slt $t1, $14, $t5
  720. beqz $t1, false
  721.  
  722. #kiem tra ngay
  723. li $t5, 0
  724. sgt $t1, $15, $t5 #if ngay > 0 -> t1 = 1
  725. beqz $t1, false #if t1 = 0 -> ngay < 1 -> false
  726.  
  727. jal slNgay
  728. #a0 = slngay
  729. #neu ngay > a0 return false
  730.  
  731.  
  732. ble $15, $a0, true
  733.  
  734. false:
  735. la $a0, errMsg
  736. li $v0, 4
  737. syscall
  738.  
  739. li $v0, 10
  740. syscall
  741. #li $a0, 0
  742. #move $ra, $s0
  743. #jr $ra
  744. true:
  745. sw $s1, -64($sp)
  746. sw $a0, -68($sp)
  747. sw $t4, -72($sp)
  748. sw $s0, -76($sp)
  749.  
  750. # neu true thi bat dau luu vao time
  751. la $s1, ($s2)
  752. lw $15, -80($sp)
  753. lw $14, -84($sp)
  754. lw $10, -88($sp)
  755. move $a0, $15
  756. jal itoa
  757.  
  758. lb $t4, 1($s0)
  759. beq $t4, '\0', nex1
  760. bne $t4, '\0', nex0
  761. nex0:
  762. lb $t4, 0($s0)
  763. sb $t4, ($s1) # luu vao time
  764. add $s1, $s1, 1 # len 1 o
  765.  
  766. lb $t4, 1($s0)
  767. sb $t4, ($s1) # luu vao time
  768. add $s1, $s1, 1 # len 1 o
  769. j slash1
  770. nex1:
  771. li $t4, '0'
  772. sb $t4, ($s1)
  773. add $s1, $s1, 1
  774.  
  775. lb $t4, 0($s0)
  776. sb $t4, ($s1) # luu vao time
  777. add $s1, $s1, 1 # len 1 o
  778.  
  779. slash1:
  780. li $t4, '/'
  781. sb $t4, ($s1)
  782. add $s1, $s1, 1
  783.  
  784. move $a0, $14
  785. jal itoa
  786.  
  787. lb $t4, 1($s0)
  788. beq $t4, '\0', nex3 # neu gap null thi nex
  789. bne $t4, '\0', nex2
  790. nex2:
  791. lb $t4, 0($s0)
  792. sb $t4, ($s1) # luu vao time
  793. add $s1, $s1, 1 # len 1 o
  794.  
  795. lb $t4, 1($s0)
  796. sb $t4, ($s1) # luu vao time
  797. add $s1, $s1, 1 # len 1 o
  798. j slash2
  799. nex3:
  800. li $t4, '0'
  801. sb $t4, ($s1)
  802. add $s1, $s1, 1
  803.  
  804. lb $t4, 0($s0)
  805. sb $t4, ($s1) # luu vao time
  806. add $s1, $s1, 1 # len 1 o
  807.  
  808. slash2:
  809. li $t4, '/'
  810. sb $t4, ($s1)
  811. add $s1, $s1, 1
  812.  
  813. move $a0, $10
  814. jal itoa
  815.  
  816. blt $10, 10, less10
  817. blt $10, 100, less100
  818. blt $10, 1000, less1000
  819. blt $10, 10000, less10000
  820. less10:
  821. li $t4, '0'
  822. sb $t4, ($s1) # luu vao time
  823. add $s1, $s1, 1 # len 1 o
  824.  
  825. li $t4, '0'
  826. sb $t4, ($s1) # luu vao time
  827. add $s1, $s1, 1 # len 1 o
  828.  
  829. li $t4, '0'
  830. sb $t4, ($s1) # luu vao time
  831. add $s1, $s1, 1 # len 1 o
  832.  
  833. lb $t4, 0($s0)
  834. sb $t4, ($s1) # luu vao time
  835. add $s1, $s1, 1 # len 1 o
  836.  
  837. addi $s1, $s1, 1
  838. li $t4, '\0' #null terminator
  839. sb $t4, ($s1) #endstring
  840. j here
  841. less100:
  842. li $t4, '0'
  843. sb $t4, ($s1) # luu vao time
  844. add $s1, $s1, 1 # len 1 o
  845.  
  846. li $t4, '0'
  847. sb $t4, ($s1) # luu vao time
  848. add $s1, $s1, 1 # len 1 o
  849.  
  850. lb $t4, 0($s0)
  851. sb $t4, ($s1) # luu vao time
  852. add $s1, $s1, 1 # len 1 o
  853.  
  854. lb $t4, 1($s0)
  855. sb $t4, ($s1) # luu vao time
  856. add $s1, $s1, 1 # len 1 o
  857.  
  858. addi $s1, $s1, 1
  859. li $t4, '\0' #null terminator
  860. sb $t4, ($s1) #endstring
  861. j here
  862. less1000:
  863. li $t4, '0'
  864. sb $t4, ($s1) # luu vao time
  865. add $s1, $s1, 1 # len 1 o
  866.  
  867. lb $t4, 0($s0)
  868. sb $t4, ($s1) # luu vao time
  869. add $s1, $s1, 1 # len 1 o
  870.  
  871. lb $t4, 1($s0)
  872. sb $t4, ($s1) # luu vao time
  873. add $s1, $s1, 1 # len 1 o
  874.  
  875. lb $t4, 2($s0)
  876. sb $t4, ($s1) # luu vao time
  877. add $s1, $s1, 1 # len 1 o
  878.  
  879. addi $s1, $s1, 1
  880. li $t4, '\0' #null terminator
  881. sb $t4, ($s1) #endstring
  882. j here
  883. less10000:
  884. lb $t4, 0($s0)
  885. sb $t4, ($s1) # luu vao time
  886. add $s1, $s1, 1 # len 1 o
  887.  
  888. lb $t4, 1($s0)
  889. sb $t4, ($s1) # luu vao time
  890. add $s1, $s1, 1 # len 1 o
  891.  
  892. lb $t4, 2($s0)
  893. sb $t4, ($s1) # luu vao time
  894. add $s1, $s1, 1 # len 1 o
  895.  
  896. lb $t4, 3($s0)
  897. sb $t4, ($s1) # luu vao time
  898. add $s1, $s1, 1 # len 1 o
  899.  
  900. addi $s1, $s1, 1
  901. li $t4, '\0' #null terminator
  902. sb $t4, ($s1) #endstring
  903.  
  904. here:
  905. lw $ra, -48($sp)
  906. lw $t1, -56($sp)
  907. lw $t5, -60($sp)
  908. lw $s1, -64($sp)
  909. lw $a0, -68($sp)
  910. lw $t4, -72($sp)
  911. lw $s0, -76($sp)
  912. jr $ra
  913.  
  914. .globl itoa
  915. # a0 = num
  916. # s0 = addr cua return value
  917. # char* itoa(int n)
  918. itoa:
  919. sw $ra, -28($sp)
  920. sw $t0, -32($sp)
  921. sw $t3, -36($sp)
  922. sw $t4, -40($sp)
  923.  
  924. la $t0, buffer # load buf
  925. add $t0, $t0, 30 # seek the end
  926. sb $0, 1($t0) # null-terminated str
  927. sb $t1, ($t0) # init. with ascii 0
  928. li $t3, 10 # t3 = 10
  929. beq $a0, $0, end_itoa # =0 thi end
  930.  
  931. loop_itoa:
  932. div $a0, $t3 # a /= 10
  933. mflo $a0
  934. mfhi $t4 # lay mod =
  935. add $t4, $t4, '0' # int -> char
  936. sb $t4, ($t0) # luu vao buf
  937. sub $t0, $t0, 1 # lui buf ve 1 o
  938. bne $a0, $0, loop_itoa # neu chua = 0 thi tiep tuc
  939. addi $t0, $t0, 1 # len buf 1 o de ve dung' vi tri
  940.  
  941. end_itoa:
  942. move $s0, $t0 # tra dia chi str ve s0
  943. lw $ra, -28($sp)
  944. lw $t0, -32($sp)
  945. lw $t3, -36($sp)
  946. lw $t4, -40($sp)
  947. jr $ra
  948.  
  949. .globl convert
  950.  
  951. convert:
  952. sw $ra, -44($sp)
  953. sw $a1, -52($sp)
  954. sw $13, -92($sp)
  955. # ngay $15
  956. # thang $14
  957. # nam $10
  958. # type $13
  959.  
  960. #li $13, 'A'
  961.  
  962. beq $v0, 'A', A
  963. beq $v0, 'B', B
  964. beq $v0, 'C', C
  965.  
  966. A:
  967. lw $15, -80($sp)
  968. lw $14, -84($sp)
  969. lw $10, -88($sp)
  970. la $a1, kq_convert
  971. move $a0, $14
  972. jal itoa
  973.  
  974. lb $t4, 0($s0)
  975. sb $t4, ($a1) # luu vao time
  976. add $a1, $a1, 1 # len 1 o
  977.  
  978. lb $t4, 1($s0)
  979. beq $t4, '\0', cnex1
  980. sb $t4, ($a1) # luu vao time
  981. add $a1, $a1, 1 # len 1 o
  982. cnex1:
  983. li $t4, '/'
  984. sb $t4, ($a1)
  985. add $a1, $a1, 1
  986.  
  987. move $a0, $15
  988. jal itoa
  989.  
  990. lb $t4, 0($s0)
  991. sb $t4, ($a1) # luu vao time
  992. add $a1, $a1, 1 # len 1 o
  993.  
  994. lb $t4, 1($s0)
  995. beq $t4, '\0', cnex2 # neu gap null thi nex
  996. sb $t4, ($a1) # luu vao time
  997. add $a1, $a1, 1 # len 1 o
  998. cnex2:
  999. li $t4, '/'
  1000. sb $t4, ($a1)
  1001. add $a1, $a1, 1
  1002.  
  1003. move $a0, $10
  1004. jal itoa
  1005.  
  1006. lb $t4, 0($s0)
  1007. sb $t4, ($a1) # luu vao time
  1008. add $a1, $a1, 1 # len 1 o
  1009.  
  1010. lb $t4, 1($s0)
  1011. sb $t4, ($a1) # luu vao time
  1012. add $a1, $a1, 1 # len 1 o
  1013.  
  1014. lb $t4, 2($s0)
  1015. sb $t4, ($a1) # luu vao time
  1016. add $a1, $a1, 1 # len 1 o
  1017.  
  1018. lb $t4, 3($s0)
  1019. sb $t4, ($a1) # luu vao time
  1020. add $a1, $a1, 1 # len 1 o
  1021.  
  1022. addi $a1, $a1, 1
  1023. li $t4, '\0' #null terminator
  1024. sb $t4, ($a1)
  1025.  
  1026. lw $ra, -44($sp)
  1027. lw $a1, -52($sp)
  1028. lw $13, -92($sp)
  1029. jr $ra
  1030. B:#s3s4s7t7 free
  1031. lw $15, -80($sp)
  1032. lw $14, -84($sp)
  1033. lw $10, -88($sp)
  1034. la $a1, kq_convert
  1035. beq $14, 1, thang1
  1036. beq $14, 2, thang2
  1037. beq $14, 3, thang3
  1038. beq $14, 4, thang4
  1039. beq $14, 5, thang5
  1040. beq $14, 6, thang6
  1041. beq $14, 7, thang7
  1042. beq $14, 8, thang8
  1043. beq $14, 9, thang9
  1044. beq $14, 10, thang10
  1045. beq $14, 11, thang11
  1046. beq $14, 12, thang12
  1047.  
  1048. thang1:#kq=a1
  1049. li $t4, 'J'
  1050. sb $t4, ($a1)
  1051. add $a1, $a1, 1
  1052.  
  1053. li $t4, 'a'
  1054. sb $t4, ($a1)
  1055. add $a1, $a1, 1
  1056.  
  1057. li $t4, 'n'
  1058. sb $t4, ($a1)
  1059. add $a1, $a1, 1
  1060. j next
  1061. thang2:
  1062. li $t4, 'F'
  1063. sb $t4, ($a1)
  1064. add $a1, $a1, 1
  1065.  
  1066. li $t4, 'e'
  1067. sb $t4, ($a1)
  1068. add $a1, $a1, 1
  1069.  
  1070. li $t4, 'b'
  1071. sb $t4, ($a1)
  1072. add $a1, $a1, 1
  1073. j next
  1074. thang3:
  1075. li $t4, 'M'
  1076. sb $t4, ($a1)
  1077. add $a1, $a1, 1
  1078.  
  1079. li $t4, 'a'
  1080. sb $t4, ($a1)
  1081. add $a1, $a1, 1
  1082.  
  1083. li $t4, 'r'
  1084. sb $t4, ($a1)
  1085. add $a1, $a1, 1
  1086. j next
  1087. thang4:
  1088. li $t4, 'A'
  1089. sb $t4, ($a1)
  1090. add $a1, $a1, 1
  1091. li $t4, 'p'
  1092. sb $t4, ($a1)
  1093. add $a1, $a1, 1
  1094. li $t4, 'r'
  1095. sb $t4, ($a1)
  1096. add $a1, $a1, 1
  1097. j next
  1098. thang5:
  1099. li $t4, 'M'
  1100. sb $t4, ($a1)
  1101. add $a1, $a1, 1
  1102. li $t4, 'a'
  1103. sb $t4, ($a1)
  1104. add $a1, $a1, 1
  1105. li $t4, 'y'
  1106. sb $t4, ($a1)
  1107. add $a1, $a1, 1
  1108. j next
  1109. thang6:
  1110. li $t4, 'J'
  1111. sb $t4, ($a1)
  1112. add $a1, $a1, 1
  1113. li $t4, 'u'
  1114. sb $t4, ($a1)
  1115. add $a1, $a1, 1
  1116. li $t4, 'n'
  1117. sb $t4, ($a1)
  1118. add $a1, $a1, 1
  1119. j next
  1120. thang7:
  1121. li $t4, 'J'
  1122. sb $t4, ($a1)
  1123. add $a1, $a1, 1
  1124. li $t4, 'u'
  1125. sb $t4, ($a1)
  1126. add $a1, $a1, 1
  1127. li $t4, 'l'
  1128. sb $t4, ($a1)
  1129. add $a1, $a1, 1
  1130. j next
  1131. thang8:
  1132. li $t4, 'A'
  1133. sb $t4, ($a1)
  1134. add $a1, $a1, 1
  1135. li $t4, 'u'
  1136. sb $t4, ($a1)
  1137. add $a1, $a1, 1
  1138. li $t4, 'g'
  1139. sb $t4, ($a1)
  1140. add $a1, $a1, 1
  1141. j next
  1142. thang9:
  1143. li $t4, 'S'
  1144. sb $t4, ($a1)
  1145. add $a1, $a1, 1
  1146. li $t4, 'e'
  1147. sb $t4, ($a1)
  1148. add $a1, $a1, 1
  1149. li $t4, 'p'
  1150. sb $t4, ($a1)
  1151. add $a1, $a1, 1
  1152. j next
  1153. thang10:
  1154. li $t4, 'O'
  1155. sb $t4, ($a1)
  1156. add $a1, $a1, 1
  1157. li $t4, 'c'
  1158. sb $t4, ($a1)
  1159. add $a1, $a1, 1
  1160. li $t4, 't'
  1161. sb $t4, ($a1)
  1162. add $a1, $a1, 1
  1163. j next
  1164. thang11:
  1165. li $t4, 'N'
  1166. sb $t4, ($a1)
  1167. add $a1, $a1, 1
  1168. li $t4, 'o'
  1169. sb $t4, ($a1)
  1170. add $a1, $a1, 1
  1171. li $t4, 'v'
  1172. sb $t4, ($a1)
  1173. add $a1, $a1, 1
  1174. j next
  1175. thang12:
  1176. li $t4, 'D'
  1177. sb $t4, ($a1)
  1178. add $a1, $a1, 1
  1179. li $t4, 'e'
  1180. sb $t4, ($a1)
  1181. add $a1, $a1, 1
  1182. li $t4, 'c'
  1183. sb $t4, ($a1)
  1184. add $a1, $a1, 1
  1185.  
  1186. next:
  1187.  
  1188. li $t4, ' '
  1189. sb $t4, ($a1)
  1190. add $a1, $a1, 1
  1191.  
  1192. move $a0, $15
  1193. jal itoa
  1194.  
  1195. lb $t4, 0($s0)
  1196. sb $t4, ($a1) # luu vao time
  1197. add $a1, $a1, 1 # len 1 o
  1198.  
  1199. lb $t4, 1($s0)
  1200. beq $t4, '\0', Bnex
  1201. sb $t4, ($a1) # luu vao time
  1202. add $a1, $a1, 1 # len 1 o
  1203. Bnex:
  1204.  
  1205. li $t4, ','
  1206. sb $t4, ($a1)
  1207. add $a1, $a1, 1
  1208.  
  1209. li $t4, ' '
  1210. sb $t4, ($a1)
  1211. add $a1, $a1, 1
  1212.  
  1213. move $a0, $10
  1214. jal itoa
  1215.  
  1216. lb $t4, 0($s0)
  1217. sb $t4, ($a1) # luu vao time
  1218. add $a1, $a1, 1 # len 1 o
  1219.  
  1220. lb $t4, 1($s0)
  1221. sb $t4, ($a1) # luu vao time
  1222. add $a1, $a1, 1 # len 1 o
  1223.  
  1224. lb $t4, 2($s0)
  1225. sb $t4, ($a1) # luu vao time
  1226. add $a1, $a1, 1 # len 1 o
  1227.  
  1228. lb $t4, 3($s0)
  1229. sb $t4, ($a1) # luu vao time
  1230. add $a1, $a1, 1 # len 1 o
  1231.  
  1232. addi $a1, $a1, 1
  1233. li $t4, '\0' #null terminator
  1234. sb $t4, ($a1)
  1235.  
  1236. lw $ra, -44($sp)
  1237. lw $a1, -52($sp)
  1238. lw $13, -92($sp)
  1239. jr $ra
  1240. C:
  1241. lw $15, -80($sp)
  1242. lw $14, -84($sp)
  1243. lw $10, -88($sp)
  1244. la $a1, kq_convert
  1245. move $a0, $15
  1246. jal itoa
  1247.  
  1248. lb $t4, 0($s0)
  1249. sb $t4, ($a1) # luu vao time
  1250. add $a1, $a1, 1 # len 1 o
  1251.  
  1252. lb $t4, 1($s0)
  1253. beq $t4, '\0', Cnex
  1254. sb $t4, ($a1) # luu vao time
  1255. add $a1, $a1, 1 # len 1 o
  1256. Cnex:
  1257. li $t4, ' '
  1258. sb $t4, ($a1)
  1259. add $a1, $a1, 1
  1260.  
  1261. beq $14, 1, thang1C
  1262. beq $14, 2, thang2C
  1263. beq $14, 3, thang3C
  1264. beq $14, 4, thang4C
  1265. beq $14, 5, thang5C
  1266. beq $14, 6, thang6C
  1267. beq $14, 7, thang7C
  1268. beq $14, 8, thang8C
  1269. beq $14, 9, thang9C
  1270. beq $14, 10, thang10C
  1271. beq $14, 11, thang11C
  1272. beq $14, 12, thang12C
  1273.  
  1274. thang1C:#kq=a1
  1275. li $t4, 'J'
  1276. sb $t4, ($a1)
  1277. add $a1, $a1, 1
  1278.  
  1279. li $t4, 'a'
  1280. sb $t4, ($a1)
  1281. add $a1, $a1, 1
  1282.  
  1283. li $t4, 'n'
  1284. sb $t4, ($a1)
  1285. add $a1, $a1, 1
  1286. j nextC
  1287. thang2C:
  1288. li $t4, 'F'
  1289. sb $t4, ($a1)
  1290. add $a1, $a1, 1
  1291.  
  1292. li $t4, 'e'
  1293. sb $t4, ($a1)
  1294. add $a1, $a1, 1
  1295.  
  1296. li $t4, 'b'
  1297. sb $t4, ($a1)
  1298. add $a1, $a1, 1
  1299. j nextC
  1300. thang3C:
  1301. li $t4, 'M'
  1302. sb $t4, ($a1)
  1303. add $a1, $a1, 1
  1304.  
  1305. li $t4, 'a'
  1306. sb $t4, ($a1)
  1307. add $a1, $a1, 1
  1308.  
  1309. li $t4, 'r'
  1310. sb $t4, ($a1)
  1311. add $a1, $a1, 1
  1312. j nextC
  1313. thang4C:
  1314. li $t4, 'A'
  1315. sb $t4, ($a1)
  1316. add $a1, $a1, 1
  1317. li $t4, 'p'
  1318. sb $t4, ($a1)
  1319. add $a1, $a1, 1
  1320. li $t4, 'r'
  1321. sb $t4, ($a1)
  1322. add $a1, $a1, 1
  1323. j nextC
  1324. thang5C:
  1325. li $t4, 'M'
  1326. sb $t4, ($a1)
  1327. add $a1, $a1, 1
  1328. li $t4, 'a'
  1329. sb $t4, ($a1)
  1330. add $a1, $a1, 1
  1331. li $t4, 'y'
  1332. sb $t4, ($a1)
  1333. add $a1, $a1, 1
  1334. j nextC
  1335. thang6C:
  1336. li $t4, 'J'
  1337. sb $t4, ($a1)
  1338. add $a1, $a1, 1
  1339. li $t4, 'u'
  1340. sb $t4, ($a1)
  1341. add $a1, $a1, 1
  1342. li $t4, 'n'
  1343. sb $t4, ($a1)
  1344. add $a1, $a1, 1
  1345. j nextC
  1346. thang7C:
  1347. li $t4, 'J'
  1348. sb $t4, ($a1)
  1349. add $a1, $a1, 1
  1350. li $t4, 'u'
  1351. sb $t4, ($a1)
  1352. add $a1, $a1, 1
  1353. li $t4, 'l'
  1354. sb $t4, ($a1)
  1355. add $a1, $a1, 1
  1356. j nextC
  1357. thang8C:
  1358. li $t4, 'A'
  1359. sb $t4, ($a1)
  1360. add $a1, $a1, 1
  1361. li $t4, 'u'
  1362. sb $t4, ($a1)
  1363. add $a1, $a1, 1
  1364. li $t4, 'g'
  1365. sb $t4, ($a1)
  1366. add $a1, $a1, 1
  1367. j nextC
  1368. thang9C:
  1369. li $t4, 'S'
  1370. sb $t4, ($a1)
  1371. add $a1, $a1, 1
  1372. li $t4, 'e'
  1373. sb $t4, ($a1)
  1374. add $a1, $a1, 1
  1375. li $t4, 'p'
  1376. sb $t4, ($a1)
  1377. add $a1, $a1, 1
  1378. j nextC
  1379. thang10C:
  1380. li $t4, 'O'
  1381. sb $t4, ($a1)
  1382. add $a1, $a1, 1
  1383. li $t4, 'c'
  1384. sb $t4, ($a1)
  1385. add $a1, $a1, 1
  1386. li $t4, 't'
  1387. sb $t4, ($a1)
  1388. add $a1, $a1, 1
  1389. j nextC
  1390. thang11C:
  1391. li $t4, 'N'
  1392. sb $t4, ($a1)
  1393. add $a1, $a1, 1
  1394. li $t4, 'o'
  1395. sb $t4, ($a1)
  1396. add $a1, $a1, 1
  1397. li $t4, 'v'
  1398. sb $t4, ($a1)
  1399. add $a1, $a1, 1
  1400. j nextC
  1401. thang12C:
  1402. li $t4, 'D'
  1403. sb $t4, ($a1)
  1404. add $a1, $a1, 1
  1405. li $t4, 'e'
  1406. sb $t4, ($a1)
  1407. add $a1, $a1, 1
  1408. li $t4, 'c'
  1409. sb $t4, ($a1)
  1410. add $a1, $a1, 1
  1411.  
  1412. nextC:
  1413. li $t4, ','
  1414. sb $t4, ($a1)
  1415. add $a1, $a1, 1
  1416.  
  1417. li $t4, ' '
  1418. sb $t4, ($a1)
  1419. add $a1, $a1, 1
  1420.  
  1421.  
  1422.  
  1423. move $a0, $10
  1424. jal itoa
  1425.  
  1426. lb $t4, 0($s0)
  1427. sb $t4, ($a1) # luu vao time
  1428. add $a1, $a1, 1 # len 1 o
  1429.  
  1430. lb $t4, 1($s0)
  1431. sb $t4, ($a1) # luu vao time
  1432. add $a1, $a1, 1 # len 1 o
  1433.  
  1434. lb $t4, 2($s0)
  1435. sb $t4, ($a1) # luu vao time
  1436. add $a1, $a1, 1 # len 1 o
  1437.  
  1438. lb $t4, 3($s0)
  1439. sb $t4, ($a1) # luu vao time
  1440. add $a1, $a1, 1 # len 1 o
  1441.  
  1442. addi $a1, $a1, 1
  1443. li $t4, '\0' #null terminator
  1444. sb $t4, ($a1)
  1445.  
  1446. lw $ra, -44($sp)
  1447. lw $a1, -52($sp)
  1448. lw $13, -92($sp)
  1449. jr $ra
  1450. #---------------------------------Anh huy
  1451. Day: # Ngay cua time: $a0 = time
  1452. addi $sp, $sp, -12
  1453. sw $t0, ($sp)
  1454. sw $t1, 4($sp)
  1455. sw $t2, 8($sp)
  1456.  
  1457. li $t0, '0'
  1458. li $t1, 10
  1459.  
  1460. lb $t2, ($a0)
  1461. sub $t2, $t2, $t0
  1462. mult $t1, $t2
  1463. mflo $v0
  1464.  
  1465. lb $t2, 1($a0)
  1466. sub $t2, $t2, $t0
  1467. add $v0, $v0, $t2
  1468.  
  1469. lw $t0, ($sp)
  1470. lw $t1, 4($sp)
  1471. lw $t2, 8($sp)
  1472. addi $sp, $sp, 12
  1473.  
  1474. jr $ra
  1475.  
  1476. Month: # Thang cua time: $a0 = time
  1477. addi $sp, $sp, -12
  1478. sw $t0, ($sp)
  1479. sw $t1, 4($sp)
  1480. sw $t2, 8($sp)
  1481.  
  1482. li $t0, '0'
  1483. li $t1, 10
  1484.  
  1485. lb $t2, 3($a0)
  1486. sub $t2, $t2, $t0
  1487. mult $t1, $t2
  1488. mflo $v0
  1489.  
  1490. lb $t2, 4($a0)
  1491. sub $t2, $t2, $t0
  1492. add $v0, $v0, $t2
  1493.  
  1494. lw $t0, ($sp)
  1495. lw $t1, 4($sp)
  1496. lw $t2, 8($sp)
  1497. addi $sp, $sp, 12
  1498.  
  1499. jr $ra
  1500.  
  1501. Year: # Nam cua time: $a0 = time
  1502. addi $sp, $sp, -12
  1503. sw $t0, ($sp)
  1504. sw $t1, 4($sp)
  1505. sw $t2, 8($sp)
  1506.  
  1507. li $t0, '0'
  1508.  
  1509. lb $t1, 6($a0)
  1510. sub $t1, $t1, $t0
  1511. li $t2, 1000
  1512. mult $t2, $t1
  1513. mflo $v0
  1514.  
  1515. lb $t1, 7($a0)
  1516. sub $t1, $t1, $t0
  1517. li $t2, 100
  1518. mult $t2, $t1
  1519. mflo $t1
  1520. add $v0, $v0, $t1
  1521.  
  1522. lb $t1, 8($a0)
  1523. sub $t1, $t1, $t0
  1524. li $t2, 10
  1525. mult $t2, $t1
  1526. mflo $t1
  1527. add $v0, $v0, $t1
  1528.  
  1529. lb $t1, 9($a0)
  1530. sub $t1, $t1, $t0
  1531. add $v0, $v0, $t1
  1532.  
  1533. lw $t0, ($sp)
  1534. lw $t1, 4($sp)
  1535. lw $t2, 8($sp)
  1536. addi $sp, $sp, 12
  1537.  
  1538. jr $ra
  1539. WeekDay:
  1540. #dua du lieu data vao date1
  1541. la $t7,date1
  1542. jal Day
  1543. sw $v0, ($t7)
  1544. jal Month
  1545. sw $v0, 4($t7)
  1546. jal Year
  1547. sw $v0, 8($t7)
  1548. move $s5,$ra
  1549. la $a0,date1
  1550. jal DayofDate
  1551. move $t0,$v0
  1552. subi $t0,$t0,366 # do cong DayofDate phia tren tinh ra du 366(do cong thuc)
  1553. li $t1,7
  1554. div $t0,$t1
  1555. mfhi $t2
  1556. beq $t2,0,B0
  1557. beq $t2,1,B1
  1558. beq $t2,2,B2
  1559. beq $t2,3,B3
  1560. beq $t2,4,B4
  1561. beq $t2,5,B5
  1562. beq $t2,6,B6
  1563. B0: la $v0,mon
  1564. j B7
  1565. B1: la $v0,tue
  1566. j B7
  1567. B2: la $v0,web
  1568. j B7
  1569. B3: la $v0,thur
  1570. j B7
  1571. B4: la $v0,fri
  1572. j B7
  1573. B5: la $v0,sat
  1574. j B7
  1575. B6: la $v0,sun
  1576. B7: jr $s5
  1577. DateDiff:
  1578. move $s1, $ra
  1579. #dua du lieu data vao date1
  1580. la $t7,date1
  1581. jal Day
  1582. sw $v0, ($t7)
  1583. jal Month
  1584. sw $v0, 4($t7)
  1585. jal Year
  1586. sw $v0, 8($t7)
  1587. #dua du lieu data vao date2
  1588. move $a0,$a1
  1589. la $t7,date2
  1590. jal Day
  1591. sw $v0, ($t7)
  1592. jal Month
  1593. sw $v0, 4($t7)
  1594. jal Year
  1595. sw $v0, 8($t7)
  1596. #year1 = t0, year2 = t1
  1597. la $a0,date1
  1598. jal DayofDate
  1599. move $s3,$v0
  1600. la $a0,date2
  1601. jal DayofDate
  1602. move $s4,$v0
  1603. sub $s3,$s3,$s4
  1604. abs $v0,$s3
  1605. jr $s1
  1606. DayofDate:
  1607. move $s0,$a0
  1608. move $s2,$ra
  1609. li $t2,0
  1610. li $t3,0
  1611. lw $t4,8($s0)
  1612. CountLeapYear:
  1613.  
  1614. #
  1615. lw $t4,8($s0)
  1616. lw $t3,4($s0)
  1617. ble $t3,2,D1
  1618. j D2
  1619. D1: subi $t4,$t4,1
  1620. D2:
  1621. #years / 4 - years / 100 + years / 400
  1622. li $t0,4
  1623. div $t4,$t0
  1624. mflo $t2
  1625. li $t0,100
  1626. div $t4,$t0
  1627. mflo $t3
  1628. sub $t2,$t2,$t3
  1629. li $t0,400
  1630. div $t4,$t0
  1631. mflo $t3
  1632. add $t2,$t2,$t3
  1633. #
  1634. li $t3,1
  1635. DayofMonth:
  1636. li $t1,31
  1637. beq $t3,4,L1
  1638. beq $t3,6,L1
  1639. beq $t3,9,L1
  1640. beq $t3,11,L1
  1641. beq $t3,2,L2
  1642. j TOP
  1643. L1: li $t1,30 # ham tam
  1644. j TOP
  1645. L2: li $t1,28
  1646. TOP: lw $t4,4($s0)
  1647. beq $t3,$t4,L3
  1648. add $t2,$t1,$t2
  1649. addi $t3,$t3,1
  1650. j DayofMonth
  1651. L3:
  1652. lw $t4,($s0)
  1653. add $t2,$t4,$t2
  1654. lw $t4,8($s0)
  1655. li $t3,365
  1656. mult $t3,$t4
  1657. mflo $t3
  1658. add $t2,$t3,$t2
  1659. move $v0,$t2
  1660. jr $s2
  1661. LeapYearNearly: #$a0; char*time
  1662. #luu dia chi tra ve
  1663. move $t6,$ra
  1664. #lay data tu char*time vao trong date1 de su dung
  1665. la $t7,date1
  1666. jal Day
  1667. sw $v0, ($t7)
  1668. jal Month
  1669. sw $v0, 4($t7)
  1670. jal Year
  1671. sw $v0, 8($t7)
  1672. la $t0,date1
  1673. lw $s1,8($t0) # year
  1674. li $t2,0
  1675. li $t3,1
  1676. ASC: add $t4,$s1,$t3
  1677. move $a0,$t4
  1678. jal LeapYear
  1679. beq $v0,1,StoreA
  1680. j DEC
  1681. DEC: sub $t4,$s1,$t3
  1682. move $a0,$t4
  1683. jal LeapYear
  1684. beq $v0,1,StoreD
  1685. T1:
  1686. addi $t3,$t3,1
  1687. j ASC
  1688. StoreA: move $t7,$ra
  1689. la $t5,leapYear
  1690. add $t5,$t5,$t2
  1691. sw $t4,($t5)
  1692. addi $t2,$t2,4
  1693. beq $t2,8, Return
  1694. addi $t7,$t7,1
  1695. j DEC
  1696. StoreD: la $t5,leapYear
  1697. add $t5,$t5,$t2
  1698. sw $t4,($t5)
  1699. addi $t2,$t2,4
  1700. beq $t2,8, Return
  1701. j T1
  1702. Return:
  1703. la $t7,StrLeapYear
  1704. la $t5,leapYear
  1705. lw $t0,($t5) #vd: 2019
  1706. li $t1,10
  1707. div $t0,$t1#2019%10
  1708. mfhi $t2
  1709. addi $t2,$t2,48
  1710. sb $t2,3($t7)
  1711. div $t0,$t1#2019/10 = 201
  1712. mflo $t0
  1713. div $t0,$t1#201%10
  1714. mfhi $t2
  1715. addi $t2,$t2,48
  1716. sb $t2,2($t7)
  1717. div $t0,$t1#201/10 = 20
  1718. mflo $t0
  1719. div $t0,$t1#20%10
  1720. mfhi $t2
  1721. addi $t2,$t2,48
  1722. sb $t2,1($t7)
  1723. div $t0,$t1#20/10 = 2
  1724. mflo $t0
  1725. addi $t0,$t0,48
  1726. sb $t0,($t7)
  1727. #them khaong trong
  1728. li $t2,45
  1729. sb $t2,4($t7)
  1730. # them so nhuan thu 2
  1731. lw $t0,4($t5) #vd: 2019
  1732. li $t1,10
  1733. div $t0,$t1#2019%10
  1734. mfhi $t2
  1735. addi $t2,$t2,48
  1736. sb $t2,8($t7)
  1737. div $t0,$t1#2019/10 = 201
  1738. mflo $t0
  1739. div $t0,$t1#201%10
  1740. mfhi $t2
  1741. addi $t2,$t2,48
  1742. sb $t2,7($t7)
  1743. div $t0,$t1#201/10 = 20
  1744. mflo $t0
  1745. div $t0,$t1#20%10
  1746. mfhi $t2
  1747. addi $t2,$t2,48
  1748. sb $t2,6($t7)
  1749. div $t0,$t1#20/10 = 2
  1750. mflo $t0
  1751. addi $t0,$t0,48
  1752. sb $t0,5($t7)
  1753. la $v0,StrLeapYear
  1754. jr $t6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement