74 lines
916 B
ArmAsm
74 lines
916 B
ArmAsm
.global kernel_main, __bss, __bss_end, __stack_top
|
|
|
|
.section .rodata
|
|
|
|
hello_world: .asciz "\nHello world!\n"
|
|
|
|
.section .text
|
|
|
|
bzero:
|
|
la t0, __bss
|
|
la t1, __bss_end
|
|
|
|
.Lbzero_loop:
|
|
bgt t0, t1, .Lbzero_end
|
|
sw zero, (t0)
|
|
addi t0, t0, 4
|
|
|
|
.Lbzero_end:
|
|
ret
|
|
|
|
# Arguments:
|
|
# a0 - Character.
|
|
.type putchar, @function
|
|
putchar:
|
|
li a1, 0
|
|
li a2, 0
|
|
li a3, 0
|
|
li a4, 0
|
|
li a5, 0
|
|
li a6, 0
|
|
li a7, 1 # sbi_console_putchar.
|
|
|
|
ecall
|
|
ret
|
|
|
|
.type kernel_main, @function
|
|
kernel_main:
|
|
# Prologue.
|
|
addi sp, sp, -32
|
|
sw ra, 28(sp)
|
|
sw s0, 24(sp)
|
|
addi s0, sp, 32
|
|
|
|
sw s1, 20(sp)
|
|
|
|
la s1, hello_world
|
|
|
|
.Lkernel_main_if:
|
|
lw a0, (s1)
|
|
beqz a0, .Lkernel_main
|
|
|
|
call putchar
|
|
addi s1, s1, 1
|
|
|
|
j .Lkernel_main_if
|
|
|
|
.Lkernel_main:
|
|
j .Lkernel_main
|
|
|
|
lw s1, 20(sp)
|
|
|
|
# Epilogue.
|
|
lw ra, 28(sp)
|
|
lw s0, 24(sp)
|
|
add sp, sp, 32
|
|
ret
|
|
|
|
.section .text.boot
|
|
boot:
|
|
la a0, __stack_top
|
|
mv sp, a0 # Set the stack pointer
|
|
call bzero
|
|
j kernel_main
|