User Tools

Site Tools


runtime

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
runtime.txt · Last modified: 2012/04/12 04:42 by mhwang

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki