Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Your code goes below this line
- .data
- squiggleString:
- .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, -44
- 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
- add $t0, $a0, $s0 #get offset for string character
- addi $t0, $t0, -1
- lb $t0, 0($t0) #$s1 = current char
- beq $t0, 0, SquiggleLoopOddEnd #exit loop if end of string
- noOddcheck:
- la $s2, squiggleString
- add $s2, $s2, $s0 #get offset for squigglestring
- sb $s1, 0($s2)
- addi $s3, $zero, 0x20 #space char
- sb $s3, 1($s2)
- addi $s0, $s0, 2
- j SquiggleLoopOddBegin
- SquiggleLoopOddEnd:
- # Preserve $a0
- addiu $sp, $sp, -4
- sw $a0, 0($sp)
- la $a0, squiggleString
- add $a1, $a0, $s0
- jal printLine
- # Restore $a0
- lw $a0, 0($sp)
- addiu $sp, $sp, 4
- addi $s0, $zero, 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
- add $t0, $a0, $s0 #get offset for string character
- addi $t0, $t0, -1
- lb $t0, 0($t0) #$s1 = current char
- beq $t0, 0, SquiggleLoopEvenEnd #exit loop if end of string
- noEvencheck:
- la $s2, squiggleString
- add $s2, $s2, $s0 #get offset for squigglestring
- addi $s3, $zero, 0x20 #space char
- sb $s3, -1($s2)
- sb $s1, 0($s2)
- addi $s0, $s0, 2
- j SquiggleLoopEvenBegin
- SquiggleLoopEvenEnd:
- # Preserve $a0
- addiu $sp, $sp, -4
- sw $a0, 0($sp)
- la $a0, squiggleString
- add $a1, $a0, $s0
- jal printLine
- # Restore $a0
- lw $a0, 0($sp)
- addiu $sp, $sp, 4
- add $s0, $zero, $zero
- 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
- j SquiggleCount
- SquiggleCountEnd:
- add $v0, $zero, $s0
- Epilogue:
- addiu $sp, $sp, 44
- 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