Initial commit
This commit is contained in:
73
kernel.s
Normal file
73
kernel.s
Normal file
@ -0,0 +1,73 @@
|
||||
.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
|
Reference in New Issue
Block a user