Guest User

Untitled

a guest
Jan 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. # Your code goes below this line
  2. .data
  3. squiggleStringO:
  4. .asciiz ""
  5.  
  6. squiggleStringE:
  7. .asciiz ""
  8.  
  9. .text
  10.  
  11. squiggle:
  12. addi $sp, $sp, -36 # allocate stack space -- default of 24 here
  13. sw $a0, 24($sp) # save the starting address of the string
  14. sw $ra, 20($sp) # save return address
  15. sw $fp, 16($sp) # save frame pointer of caller
  16. sw $s0, 12($sp)
  17. sw $s1, 8($sp)
  18. sw $s2, 4($sp)
  19. sw $s3, 0($sp)
  20. addiu $fp, $sp, 32 # setup frame pointer for squiggle
  21.  
  22. #addi $sp, $sp, -88
  23.  
  24. add $s0, $zero, $zero #i = 0
  25.  
  26.  
  27. SquiggleLoopOddBegin:
  28. add $s1, $a0, $s0 #get offset for string character
  29. lb $s1, 0($s1) #$s1 = current char
  30. beq $s1, 0, SquiggleLoopOddEnd #exit loop if end of string
  31. beq $s0, 0, noOddcheck #dont want to check at the end
  32. add $t0, $a0, $s0 #get offset for string character
  33. addi $t0, $t0, -1 #checks one space back, in case the null was skipped over
  34. lb $t0, 0($t0) #$s1 = current char
  35. beq $t0, 0, SquiggleLoopOddEnd #exit loop if end of string
  36. noOddcheck:
  37. la $s2, squiggleStringO
  38. add $s2, $s2, $s0 #offset
  39. sb $s1, 0($s2) #saves char
  40. addi $s3, $zero, 0x20 #space char
  41. sb $s3, 1($s2) #saves space
  42.  
  43. addi $s0, $s0, 2 #count+=2
  44. j SquiggleLoopOddBegin
  45. SquiggleLoopOddEnd:
  46.  
  47. la $s2, squiggleStringO
  48. add $s2, $s2, $s0 #get offset for squigglestring
  49. add $s1, $zero, $zero
  50. sb $s1, 0($s2) #adds null at the end
  51.  
  52. # Preserve $a0
  53. addiu $sp, $sp, -4
  54. sw $a0, 0($sp)
  55. addi $s0, $s0, 1
  56. la $a0, squiggleStringO
  57. add $a1, $a0, $s0
  58.  
  59. jal printLine
  60.  
  61. # Restore $a0
  62. lw $a0, 0($sp)
  63. addiu $sp, $sp, 4
  64.  
  65. addi $s0, $zero, 1 #i = 1
  66.  
  67. SquiggleLoopEvenBegin:
  68. add $s1, $a0, $s0 #get offset for string character
  69. lb $s1, 0($s1) #$s1 = current char
  70. beq $s1, 0, SquiggleLoopEvenEnd #exit loop if end of string
  71. beq $s0, 1, noEvencheck #sont want to check if at beginning
  72. add $t0, $a0, $s0 #get offset for string character
  73. addi $t0, $t0, -1 #checks if skipped over the null character
  74. lb $t0, 0($t0) #$s1 = current char
  75. beq $t0, 0, SquiggleLoopEvenEnd #exit loop if end of string
  76. noEvencheck:
  77. la $s2, squiggleStringE
  78. add $s2, $s2, $s0 #get offset for squigglestring
  79. addi $s3, $zero, 0x20 #space char
  80. sb $s3, -1($s2) #adds space
  81. sb $s1, 0($s2) #adds char
  82. addi $s0, $s0, 2 # i += 2
  83. j SquiggleLoopEvenBegin
  84. SquiggleLoopEvenEnd:
  85. la $s2, squiggleStringE
  86. add $s2, $s2, $s0 #get offset for squigglestring
  87. add $s1, $zero, $zero
  88. sb $s1, 0($s2) #adds a null at the end
  89.  
  90. # Preserve $a0
  91. addiu $sp, $sp, -4
  92. sw $a0, 0($sp)
  93. addi $s0, $s0, 1
  94. la $a0, squiggleStringE
  95.  
  96. add $a1, $a0, $s0
  97.  
  98. jal printLine
  99.  
  100. # Restore $a0
  101. lw $a0, 0($sp)
  102. addiu $sp, $sp, 4
  103.  
  104. add $s0, $zero, $zero # i = 0
  105. SquiggleCount:
  106. add $s1, $a0, $s0 #get offset for string character
  107. lb $s1, 0($s1) #$s1 = current char
  108. beq $s1, 0, SquiggleCountEnd #exit loop if end of string
  109.  
  110. addi $s0, $s0, 1 # i++
  111. j SquiggleCount
  112. SquiggleCountEnd:
  113.  
  114. add $s0, $zero, $zero #i = 0
  115.  
  116. Squigglenull:
  117. add $s1, $a0, $s0 #get offset for string character
  118. lb $s1, 0($s1) #$s1 = current char
  119. beq $s1, 0, Squigglenullend #exit loop if end of string
  120.  
  121. la $s2, squiggleStringO
  122. add $s2, $s2, $s0
  123. add $s1, $zero, $zero
  124. sb $s1, 0($s2) #makes string null
  125.  
  126. la $s2, squiggleStringE
  127. add $s2, $s2, $s0
  128. add $s1, $zero, $zero
  129. sb $s1, 0($s2) #makes string null
  130.  
  131. addi $s0, $s0, 1 #i++
  132. j Squigglenull
  133. Squigglenullend:
  134.  
  135.  
  136. add $v0, $zero, $s0 #saves size to $v0
  137.  
  138. Epilogue:
  139. # addiu $sp, $sp, 88
  140. lw $a0, 24($sp)
  141. lw $ra, 20($sp)
  142. lw $fp, 16($sp)
  143. lw $s0, 12($sp)
  144. lw $s1, 8($sp)
  145. lw $s2, 4($sp)
  146. lw $s3, 0($sp)
  147. addiu $sp, $sp, 36
  148. jal $ra
Add Comment
Please, Sign In to add comment