Advertisement
Heyjafer

Untitled

Jul 9th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. lis $4
  2. .word 4
  3. lis $11
  4. .word 1
  5. .import print
  6. sub $29, $30, $4 ; initialize frame pointer
  7. lis $12
  8. .word 8 ; $12 stores the total space we need
  9. sub $30, $30, $12 ; set the stack frame
  10. sw $1, 0($29) ; store first param
  11. sw $2, -4($29) ; store second param
  12. lw $3, 0($29) ; Load value of ID, a, into $3
  13. sw $3, -4($30) ; push register 3
  14. sub $30, $30, $4 ; update stack pointer
  15. lw $3, -4($29) ; Load value of ID, b, into $3
  16. add $30, $30, $4
  17. lw $5, -4($30) ; pop the top of the stack
  18. slt $3, $5, $3
  19. beq $3, $0, IF1
  20. lw $3, 0($29) ; Load value of ID, a, into $3
  21. sw $1, -4($30) ; push register 1
  22. sub $30, $30, $4 ; update stack pointer
  23. add $1, $3, $0 ; move expression from $3 to $1
  24. lis $10
  25. .word print
  26. sw $31, -4($30) ; push register 31
  27. sub $30, $30, $4 ; update stack pointer
  28. jalr $10 ; print procedure
  29. add $30, $30, $4
  30. lw $31, -4($30) ; restore $31 after procedure call
  31. add $30, $30, $4
  32. lw $1, -4($30) ; restore $1 after procedure call
  33. beq $0, $0, ELSE1
  34. IF1:
  35. lw $3, -4($29) ; Load value of ID, b, into $3
  36. sw $1, -4($30) ; push register 1
  37. sub $30, $30, $4 ; update stack pointer
  38. add $1, $3, $0 ; move expression from $3 to $1
  39. lis $10
  40. .word print
  41. sw $31, -4($30) ; push register 31
  42. sub $30, $30, $4 ; update stack pointer
  43. jalr $10 ; print procedure
  44. add $30, $30, $4
  45. lw $31, -4($30) ; restore $31 after procedure call
  46. add $30, $30, $4
  47. lw $1, -4($30) ; restore $1 after procedure call
  48. ELSE1:
  49. lis $3
  50. .word 0
  51. add $30, $29, $4 ; reset stack
  52. jr $31
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement