.data
str:
.asciiz "Hello"
orig:
.asciiz "\nThe input: "
now:
.asciiz "\nThe output: "
v0:
.asciiz "\n $v0 = "
end:
.asciiz "\n\n"
.text
START:
add $v0, $zero, $zero
LOOP: lb $t0, 0($a0)
beq $t0, $zero, DONE
addi $sp, $sp, -12 # allocate space on stack
sw $a0, 0($sp)
sw $ra, 4($sp)
sw $v0, 8($sp)
add $a0, $t0, $zero
jal DOIT
lw $a0, 0($sp)
lw $ra, 4($sp)
sb $v0, 0($a0)
lw $v0, 8($sp)
addi $a0, $a0, 1
addi $v0, $v0, 1
addi $sp, $sp, 12
j LOOP
DONE: jr $ra
DOIT: add $v0, $a0, $zero
slti $t2, $v0, 97
bne $t2, $zero, SKIP
slti $t2, $v0, 123
beq $t2, $zero, SKIP
addi $v0, $v0, -32
SKIP: jr $ra
__start:
addi $v0, $zero, 4
la $a0, orig
syscall
li $v0, 4
la $a0, str
syscall
la $a0, str
jal START
move $t0, $v0 # save return value
li $v0, 4
la $a0, now
syscall
li $v0, 4
la $a0, str
syscall
li $v0, 4
la $a0, v0
syscall
li $v0, 1
move $a0, $t0
syscall
li $v0, 4
la $a0, end
syscall