200 lines
2.3 KiB
ArmAsm
200 lines
2.3 KiB
ArmAsm
main:
|
|
addi sp,sp,-16
|
|
sw ra,12(sp)
|
|
call run
|
|
lw ra,12(sp)
|
|
addi sp,sp,16
|
|
jr ra
|
|
rem:
|
|
bge a0,a1,.L7
|
|
ret
|
|
.L7:
|
|
addi sp,sp,-16
|
|
sw ra,12(sp)
|
|
sub a0,a0,a1
|
|
call rem
|
|
lw ra,12(sp)
|
|
addi sp,sp,16
|
|
jr ra
|
|
f1:
|
|
addi sp,sp,-16
|
|
sw ra,12(sp)
|
|
sw s0,8(sp)
|
|
sw s1,4(sp)
|
|
sw s2,0(sp)
|
|
li s1,0
|
|
li s2,241
|
|
j .L9
|
|
.L11:
|
|
mv a0,s0
|
|
.L9:
|
|
addi s0,a0,-1
|
|
blez a0,.L8
|
|
beq s0,s2,.L8
|
|
li a1,10
|
|
mv a0,s0
|
|
call rem
|
|
bnez a0,.L11
|
|
add s1,s1,s0
|
|
j .L11
|
|
.L8:
|
|
mv a0,s1
|
|
lw ra,12(sp)
|
|
lw s0,8(sp)
|
|
lw s1,4(sp)
|
|
lw s2,0(sp)
|
|
addi sp,sp,16
|
|
jr ra
|
|
f2:
|
|
addi sp,sp,-32
|
|
sw ra,28(sp)
|
|
sw s0,24(sp)
|
|
sw s1,20(sp)
|
|
sw s2,16(sp)
|
|
sw s3,12(sp)
|
|
sw s4,8(sp)
|
|
mv s3,a0
|
|
li s2,0
|
|
li s0,0
|
|
li s4,3
|
|
.L15:
|
|
sub a0,s3,s0
|
|
call f1
|
|
mv s1,a0
|
|
add a0,s0,s3
|
|
call f1
|
|
add a0,s1,a0
|
|
add s2,s2,a0
|
|
addi s0,s0,1
|
|
bne s0,s4,.L15
|
|
mv a0,s2
|
|
lw ra,28(sp)
|
|
lw s0,24(sp)
|
|
lw s1,20(sp)
|
|
lw s2,16(sp)
|
|
lw s3,12(sp)
|
|
lw s4,8(sp)
|
|
addi sp,sp,32
|
|
jr ra
|
|
f3:
|
|
addi sp,sp,-16
|
|
sw ra,12(sp)
|
|
sw s0,8(sp)
|
|
sw s1,4(sp)
|
|
mv s0,a0
|
|
li a1,10
|
|
call rem
|
|
beqz a0,.L23
|
|
li a1,20
|
|
mv a0,s0
|
|
call rem
|
|
beqz a0,.L24
|
|
mv a0,s0
|
|
call f1
|
|
mv s1,a0
|
|
mv a0,s0
|
|
call f2
|
|
add a0,s1,a0
|
|
.L18:
|
|
lw ra,12(sp)
|
|
lw s0,8(sp)
|
|
lw s1,4(sp)
|
|
addi sp,sp,16
|
|
jr ra
|
|
.L23:
|
|
mv a0,s0
|
|
call f2
|
|
j .L18
|
|
.L24:
|
|
mv a0,s0
|
|
call f1
|
|
j .L18
|
|
getCall:
|
|
addi sp,sp,-16
|
|
sw ra,12(sp)
|
|
beqz a0,.L30
|
|
li a5,1
|
|
beq a0,a5,.L31
|
|
mv a0,a1
|
|
call f3
|
|
.L25:
|
|
lw ra,12(sp)
|
|
addi sp,sp,16
|
|
jr ra
|
|
.L30:
|
|
mv a0,a1
|
|
call f1
|
|
j .L25
|
|
.L31:
|
|
mv a0,a1
|
|
call f2
|
|
j .L25
|
|
run:
|
|
addi sp,sp,-48
|
|
sw ra,44(sp)
|
|
sw s0,40(sp)
|
|
sw s1,36(sp)
|
|
sw s2,32(sp)
|
|
sw s3,28(sp)
|
|
sw s4,24(sp)
|
|
sw s5,20(sp)
|
|
sw s6,16(sp)
|
|
sw s7,12(sp)
|
|
sw s8,8(sp)
|
|
li s1,0
|
|
li s0,0
|
|
li s3,0
|
|
li s7,56
|
|
li s6,2
|
|
li s5,3
|
|
li s4,24
|
|
.L35:
|
|
sub a5,s7,s1
|
|
lw s8,0(a5)
|
|
sgt a5,s0,s6
|
|
xori a5,a5,1
|
|
add s0,s0,a5
|
|
sub a5,s0,s5
|
|
snez a5,a5
|
|
sub a5,zero,a5
|
|
and s0,s0,a5
|
|
lw a1,0(s1)
|
|
mv a0,s0
|
|
call getCall
|
|
mv s2,a0
|
|
mv a1,s8
|
|
mv a0,s0
|
|
call getCall
|
|
sub a0,s2,a0
|
|
add s3,s3,a0
|
|
addi s1,s1,4
|
|
bne s1,s4,.L35
|
|
mv a0,s3
|
|
lw ra,44(sp)
|
|
lw s0,40(sp)
|
|
lw s1,36(sp)
|
|
lw s2,32(sp)
|
|
lw s3,28(sp)
|
|
lw s4,24(sp)
|
|
lw s5,20(sp)
|
|
lw s6,16(sp)
|
|
lw s7,12(sp)
|
|
lw s8,8(sp)
|
|
addi sp,sp,48
|
|
jr ra
|
|
#memset 0x0, 0x4
|
|
#memset 0x4, 0x7
|
|
#memset 0x8, 0x3
|
|
#memset 0xc, 0x8
|
|
#memset 0x10, 0x4
|
|
#memset 0x14, 0x22
|
|
#memset 0x18, 0x19
|
|
#memset 0x1c, 0x8
|
|
#memset 0x20, 0x11
|
|
#memset 0x24, 0x10
|
|
#memset 0x28, 0x9
|
|
#memset 0x2c, 0x8
|
|
#memset 0x30, 0x7
|
|
#memset 0x34, 0x6
|
|
#memset 0x38, 0x5
|
|
#memset 0x3c, 0x10
|