Guest User

Untitled

a guest
Jan 21st, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. # Your code goes below this line
  2. .data
  3. squiggleString:
  4. .asciiz ""
  5.  
  6. .text
  7.  
  8. squiggle:
  9. addi $sp, $sp, -36 # allocate stack space -- default of 24 here
  10. sw $a0, 24($sp) # save the starting address of the string
  11. sw $ra, 20($sp) # save return address
  12. sw $fp, 16($sp) # save frame pointer of caller
  13. sw $s0, 12($sp)
  14. sw $s1, 8($sp)
  15. sw $s2, 4($sp)
  16. sw $s3, 0($sp)
  17. addiu $fp, $sp, 32 # setup frame pointer for squiggle
  18.  
  19. addi $sp, $sp, -44
  20.  
  21. add $s0, $zero, $zero #i = 0
  22.  
  23. SquiggleLoopOddBegin:
  24. add $s1, $a0, $s0 #get offset for string character
  25. lb $s1, 0($s1) #$s1 = current char
  26. beq $s1, 0, SquiggleLoopOddEnd #exit loop if end of string
  27. beq $s0, 0, noOddcheck
  28. add $t0, $a0, $s0 #get offset for string character
  29. addi $t0, $t0, -1
  30. lb $t0, 0($t0) #$s1 = current char
  31. beq $t0, 0, SquiggleLoopOddEnd #exit loop if end of string
  32. noOddcheck:
  33. la $s2, squiggleString
  34. add $s2, $s2, $s0 #get offset for squigglestring
  35. sb $s1, 0($s2)
  36. addi $s3, $zero, 0x20 #space char
  37. sb $s3, 1($s2)
  38.  
  39. addi $s0, $s0, 2
  40. j SquiggleLoopOddBegin
  41. SquiggleLoopOddEnd:
  42.  
  43. # Preserve $a0
  44. addiu $sp, $sp, -4
  45. sw $a0, 0($sp)
  46.  
  47. la $a0, squiggleString
  48. add $a1, $a0, $s0
  49.  
  50. jal printLine
  51.  
  52. # Restore $a0
  53. lw $a0, 0($sp)
  54. addiu $sp, $sp, 4
  55.  
  56. addi $s0, $zero, 1
  57.  
  58. SquiggleLoopEvenBegin:
  59. add $s1, $a0, $s0 #get offset for string character
  60. lb $s1, 0($s1) #$s1 = current char
  61. beq $s1, 0, SquiggleLoopEvenEnd #exit loop if end of string
  62. beq $s0, 1, noEvencheck
  63. add $t0, $a0, $s0 #get offset for string character
  64. addi $t0, $t0, -1
  65. lb $t0, 0($t0) #$s1 = current char
  66. beq $t0, 0, SquiggleLoopEvenEnd #exit loop if end of string
  67. noEvencheck:
  68. la $s2, squiggleString
  69. add $s2, $s2, $s0 #get offset for squigglestring
  70. addi $s3, $zero, 0x20 #space char
  71. sb $s3, -1($s2)
  72. sb $s1, 0($s2)
  73. addi $s0, $s0, 2
  74. j SquiggleLoopEvenBegin
  75. SquiggleLoopEvenEnd:
  76.  
  77. # Preserve $a0
  78. addiu $sp, $sp, -4
  79. sw $a0, 0($sp)
  80.  
  81. la $a0, squiggleString
  82.  
  83. add $a1, $a0, $s0
  84.  
  85. jal printLine
  86.  
  87. # Restore $a0
  88. lw $a0, 0($sp)
  89. addiu $sp, $sp, 4
  90.  
  91. add $s0, $zero, $zero
  92. SquiggleCount:
  93. add $s1, $a0, $s0 #get offset for string character
  94. lb $s1, 0($s1) #$s1 = current char
  95. beq $s1, 0, SquiggleCountEnd #exit loop if end of string
  96.  
  97. addi $s0, $s0, 1
  98. j SquiggleCount
  99. SquiggleCountEnd:
  100.  
  101.  
  102. add $v0, $zero, $s0
  103.  
  104. Epilogue:
  105. addiu $sp, $sp, 44
  106. lw $a0, 24($sp)
  107. lw $ra, 20($sp)
  108. lw $fp, 16($sp)
  109. lw $s0, 12($sp)
  110. lw $s1, 8($sp)
  111. lw $s2, 4($sp)
  112. lw $s3, 0($sp)
  113. addiu $sp, $sp, 36
  114. jal $ra
Add Comment
Please, Sign In to add comment