Warning: The following code has not been tested intensively and may be erroneous. Moreover, it is not consistent with the calling convention mentioned in the lecture. It is strongly recommended that you write your own version of the runtime library.
_malloc: lw $a0, 4($sp) li $v0, 9 syscall jr $ra _strcmp: lw $t0, 8($sp) lw $t1, 4($sp) _strcmp_begin: lb $t2, 0($t0) lb $t3, 0($t1) blt $t2, $t3, _strcmp_less bgt $t2, $t3, _strcmp_greater beq $t2, $zero, _strcmp_equal addi $t0, $t0, 1 addi $t1, $t1, 1 j _strcmp_begin _strcmp_less: li $v0, -1 jr $ra _strcmp_greater: li $v0, 1 jr $ra _strcmp_equal: li $v0, 0 jr $ra intToString: lw $t0, 4($sp) li $t1, 0 bge $t0, $zero, intToString_l1 li $t1, 1 neg $t0, $t0 intToString_l1: move $t3, $t0 li $t2, 0 intToString_l2: addi $t2, $t2, 1 div $t3, $t3, 10 bne $t3, $zero, intToString_l2 addi $a0, $t2, 1 beq $t1, $zero, intToString_l3 addi $a0, $a0, 1 intToString_l3: li $v0, 9 move $t3, $a0 syscall beq $t1, $zero, intToString_l5 li $t4, 45 sb $t4, 0($v0) intToString_l5: add $t3, $v0, $t3 addi $t3, $t3, -1 sb $zero, 0($t3) addi $t3, $t3, -1 intToString_l4: rem $t4, $t0, 10 addi $t4, $t4, 48 sb $t4, 0($t3) addi $t3, $t3, -1 div $t0, $t0, 10 bne $t0, $zero, intToString_l4 jr $ra charToString: li $a0, 2 li $v0, 9 syscall lb $t0, 4($sp) sb $t0, 0($v0) sb $zero, 1($v0) jr $ra _strlen: lw $t0, 4($sp) li $v0, 0 _strlen_begin: lb $t1, 0($t0) beq $t1, $zero, _strlen_end addi $t0, $t0, 1 addi $v0, $v0, 1 j _strlen_begin _strlen_end: jr $ra _strcat: lw $t0, 16($sp) lw $t1, 12($sp) addi $sp, $sp, -8 sw $ra, 8($sp) sw $t0, 4($sp) jal _strlen move $t2, $v0 sw $t1, 4($sp) jal _strlen move $t3, $v0 add $a0, $t2, $t3 addi $a0, $a0, 1 li $v0,9 syscall move $t5, $v0 _strcat_l1: lb $t4, 0($t0) beq $t4, $zero, _strcat_l2 sb $t4, 0($t5) addi $t0, $t0, 1 addi $t5, $t5, 1 j _strcat_l1 _strcat_l2: lb $t4, 0($t1) beq $t4, $zero, _strcat_l3 sb $t4, 0($t5) addi $t1, $t1, 1 addi $t5, $t1, 1 j _strcat_l2 _strcat_l3: sb $zero, 0($t5) addi $sp, $sp, 8 jr $ra readInt: li $v0, 5 syscall jr $ra readChar: li $v0, 8 move $a0, $sp li $a1, 2 syscall lb $v0, 0($sp) jr $ra printInt: li $v0, 1 lw $a0, 4($sp) syscall jr $ra printChar: lw $t0, 4($sp) sb $t0, 0($sp) sb $zero, 1($sp) li $v0, 4 move $a0, $sp syscall jr $ra printString: li $v0, 4 lw $a0, 4($sp) syscall jr $ra printLine: li $v0, 4 lw $a0, 4($sp) syscall li $t0, 10 sb $t0, 0($sp) sb $zero, 1($sp) li $v0, 4 move $a0, $sp syscall jr $ra