.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