Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Your code goes below this line
- .data
- squiggleStringO:
- .asciiz ""
- squiggleStringE:
- .asciiz ""
- .text
- squiggle:
- addi $sp, $sp, -36 # allocate stack space -- default of 24 here
- sw $a0, 24($sp) # save the starting address of the string
- sw $ra, 20($sp) # save return address
- sw $fp, 16($sp) # save frame pointer of caller
- sw $s0, 12($sp)
- sw $s1, 8($sp)
- sw $s2, 4($sp)
- sw $s3, 0($sp)
- addiu $fp, $sp, 32 # setup frame pointer for squiggle
- #addi $sp, $sp, -88
- add $s0, $zero, $zero #i = 0
- SquiggleLoopOddBegin:
- add $s1, $a0, $s0 #get offset for string character
- lb $s1, 0($s1) #$s1 = current char
- beq $s1, 0, SquiggleLoopOddEnd #exit loop if end of string
- beq $s0, 0, noOddcheck #dont want to check at the end
- add $t0, $a0, $s0 #get offset for string character
- addi $t0, $t0, -1 #checks one space back, in case the null was skipped over
- lb $t0, 0($t0) #$s1 = current char
- beq $t0, 0, SquiggleLoopOddEnd #exit loop if end of string
- noOddcheck:
- la $s2, squiggleStringO
- add $s2, $s2, $s0 #offset
- sb $s1, 0($s2) #saves char
- addi $s3, $zero, 0x20 #space char
- sb $s3, 1($s2) #saves space
- addi $s0, $s0, 2 #count+=2
- j SquiggleLoopOddBegin
- SquiggleLoopOddEnd:
- la $s2, squiggleStringO
- add $s2, $s2, $s0 #get offset for squigglestring
- add $s1, $zero, $zero
- sb $s1, 0($s2) #adds null at the end
- # Preserve $a0
- addiu $sp, $sp, -4
- sw $a0, 0($sp)
- addi $s0, $s0, 1
- la $a0, squiggleStringO
- add $a1, $a0, $s0
- jal printLine
- # Restore $a0
- lw $a0, 0($sp)
- addiu $sp, $sp, 4
- addi $s0, $zero, 1 #i = 1
- SquiggleLoopEvenBegin:
- add $s1, $a0, $s0 #get offset for string character
- lb $s1, 0($s1) #$s1 = current char
- beq $s1, 0, SquiggleLoopEvenEnd #exit loop if end of string
- beq $s0, 1, noEvencheck #sont want to check if at beginning
- add $t0, $a0, $s0 #get offset for string character
- addi $t0, $t0, -1 #checks if skipped over the null character
- lb $t0, 0($t0) #$s1 = current char
- beq $t0, 0, SquiggleLoopEvenEnd #exit loop if end of string
- noEvencheck:
- la $s2, squiggleStringE
- add $s2, $s2, $s0 #get offset for squigglestring
- addi $s3, $zero, 0x20 #space char
- sb $s3, -1($s2) #adds space
- sb $s1, 0($s2) #adds char
- addi $s0, $s0, 2 # i += 2
- j SquiggleLoopEvenBegin
- SquiggleLoopEvenEnd:
- la $s2, squiggleStringE
- add $s2, $s2, $s0 #get offset for squigglestring
- add $s1, $zero, $zero
- sb $s1, 0($s2) #adds a null at the end
- # Preserve $a0
- addiu $sp, $sp, -4
- sw $a0, 0($sp)
- addi $s0, $s0, 1
- la $a0, squiggleStringE
- add $a1, $a0, $s0
- jal printLine
- # Restore $a0
- lw $a0, 0($sp)
- addiu $sp, $sp, 4
- add $s0, $zero, $zero # i = 0
- SquiggleCount:
- add $s1, $a0, $s0 #get offset for string character
- lb $s1, 0($s1) #$s1 = current char
- beq $s1, 0, SquiggleCountEnd #exit loop if end of string
- addi $s0, $s0, 1 # i++
- j SquiggleCount
- SquiggleCountEnd:
- add $s0, $zero, $zero #i = 0
- Squigglenull:
- add $s1, $a0, $s0 #get offset for string character
- lb $s1, 0($s1) #$s1 = current char
- beq $s1, 0, Squigglenullend #exit loop if end of string
- la $s2, squiggleStringO
- add $s2, $s2, $s0
- add $s1, $zero, $zero
- sb $s1, 0($s2) #makes string null
- la $s2, squiggleStringE
- add $s2, $s2, $s0
- add $s1, $zero, $zero
- sb $s1, 0($s2) #makes string null
- addi $s0, $s0, 1 #i++
- j Squigglenull
- Squigglenullend:
- add $v0, $zero, $s0 #saves size to $v0
- Epilogue:
- # addiu $sp, $sp, 88
- lw $a0, 24($sp)
- lw $ra, 20($sp)
- lw $fp, 16($sp)
- lw $s0, 12($sp)
- lw $s1, 8($sp)
- lw $s2, 4($sp)
- lw $s3, 0($sp)
- addiu $sp, $sp, 36
- jal $ra
Add Comment
Please, Sign In to add comment