Files
eugenios/kernel.s
2025-06-24 22:12:48 +02:00

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