Skip to content
Snippets Groups Projects
lib32.s 2.83 KiB
	  .global atoi
	  .global print_int
	  .global println
	  .global print
	  .global print_a1
	  .global print_char
	  .global strlen
	  .global ltoa
	  .global print_string

atoi:

addi	sp,sp,-48
sw	s0,44(sp)
addi	s0,sp,48
sw	a0,-36(s0)
sw	zero,-20(s0)
j	.L2

.L3:
lw	a5,-20(s0)
slli	a4,a5,0x3
lw	a5,-20(s0)
slli	a5,a5,0x1
add	a5,a4,a5
lw	a4,-36(s0)
lbu	a4,0(a4)
add	a5,a5,a4
addi	a5,a5,-48
sw	a5,-20(s0)
lw	a5,-36(s0)
addi	a5,a5,1
sw	a5,-36(s0)

.L2:
lw	a5,-36(s0)
lbu	a5,0(a5)
bnez	a5,.L3
lw	a5,-20(s0)
mv	a0,a5
lw	s0,44(sp)
addi	sp,sp,48
ret

print_int:
addi sp, sp, -8
sw ra,0(sp)
lui a1, %hi(buf)
addi a1, a1, %lo(buf)
jal ra, itoa
mv a1, a0
jal ra, print_a1
lw ra, 0(sp)
addi sp, sp, 8
jr ra
print_a1:
addi sp, sp, -8
sw ra,0(sp)
mv a0, a1
jal ra, strlen
lw ra, 0(sp)
addi sp, sp, 8
mv a2, a0
li a0, 1
li a3, 0
li a4, 0
li a5, 0
li a6, 0
li a7, 64
ecall
jr ra
print_char:
addi sp, sp, -8
sw ra, 0(sp)
la a1, buf
sb a0, 0(a1)
sb zero, 1(a1)
jal ra, print_a1
lw ra, 0(sp)
addi sp, sp, 8
jr ra

print:
addi    sp,sp,-32
sw      ra,24(sp)
sw      s0,16(sp)
addi    s0,sp,32
sw      a0,-24(s0)
lw      a0,-24(s0)
jal     ra,print_int
jal     ra,println
nop
lw      ra,24(sp)
lw      s0,16(sp)
addi    sp,sp,32
ret
strlen:
addi	sp,sp,-48
sw	s0,44(sp)
addi	s0,sp,48
sw	a0,-36(s0)
sw	zero,-20(s0)
j	.strlenL2
.strlenL3:
lw	a5,-20(s0)
addi	a5,a5,1
sw	a5,-20(s0)
.strlenL2:
lw	a5,-36(s0)
addi	a4,a5,1
sw	a4,-36(s0)
lbu	a5,0(a5)
bnez	a5,.strlenL3
lw	a5,-20(s0)
mv	a0,a5
lw	s0,44(sp)
addi	sp,sp,48
jr	ra
itoa:
addi	sp,sp,-48
sw	s0,44(sp)
addi	s0,sp,48
sw	a0,-36(s0)
sw	a1,-40(s0)
lw	a5,-40(s0)
addi	a5,a5,10
sw	a5,-20(s0)
lw	a5,-20(s0)
sb	zero,0(a5)
sb	zero,-21(s0)
lw	a5,-36(s0)
bgez	a5,.itoaL2
li	a5,1
sb	a5,-21(s0)
lw	a5,-36(s0)
neg	a5,a5
sw	a5,-36(s0)
.itoaL2:
lw	a5,-36(s0)
bnez	a5,.itoaL5
lw	a5,-20(s0)
addi	a5,a5,-1
sw	a5,-20(s0)
lw	a5,-20(s0)
li	a4,48
sb	a4,0(a5)
lw	a5,-20(s0)
j	.itoaL4
.itoaL6:
lw	a4,-36(s0)
li	a5,10
rem	a5,a4,a5
andi	a5,a5,0xff
lw	a4,-20(s0)
addi	a4,a4,-1
sw	a4,-20(s0)
addi	a5,a5,48
andi	a4,a5,0xff
lw	a5,-20(s0)
sb	a4,0(a5)
lw	a4,-36(s0)
li	a5,10
div	a5,a4,a5
sw	a5,-36(s0)
.itoaL5:
lw	a5,-36(s0)
bgtz	a5,.itoaL6
lbu	a5,-21(s0)
beqz	a5,.itoaL7
lw	a5,-20(s0)
addi	a5,a5,-1
sw	a5,-20(s0)
lw	a5,-20(s0)
li	a4,45
sb	a4,0(a5)
.itoaL7:
lw	a5,-20(s0)
.itoaL4:
mv	a0,a5
lw	s0,44(sp)
addi	sp,sp,48
jr	ra


println:
mv t6, ra
lui a1, %hi(nl)
addi a1, a1, %lo(nl)
jal ra, print_a1
jr t6
print_string:
addi sp, sp, -8
sw ra, 0(sp)
addi sp, sp, -8
sw s0, 0(sp)
addi sp, sp, -64
sw a0, 56(sp)
sw a1, 48(sp)
sw a2, 40(sp)
sw a3, 32(sp)
sw a4, 24(sp)
sw a5, 16(sp)
sw a6, 8(sp)
sw a7, 0(sp)
mv a1, a0
jal print_a1
lw a0, 56(sp)
lw a1, 48(sp)
lw a2, 40(sp)
lw a3, 32(sp)
lw a4, 24(sp)
lw a5, 16(sp)
lw a6, 8(sp)
lw a7, 0(sp)
addi sp, sp, 64
lw s0, 0(sp)
addi sp, sp, 8
lw ra, 0(sp)
addi sp, sp, 8
jr ra
	.section .rodata
	nl:
	.string "\n"

	.section .data
	buf:
	.string "XXXXXXXXXXXXXXXXXXXX"