30 lines
817 B
ArmAsm
30 lines
817 B
ArmAsm
|
.section .text
|
||
|
|
||
|
// Init ist eine Funktion aus init.c
|
||
|
.extern init
|
||
|
|
||
|
// _start muss global sein, damit der Linker es findet und als Einsprungspunkt
|
||
|
// benutzen kann (alle Labels, die nicht global sind, sind nur in dieser Datei
|
||
|
// sichtbar)
|
||
|
.global _start
|
||
|
_start:
|
||
|
// Stack initialisieren
|
||
|
mov $kernel_stack, %esp
|
||
|
|
||
|
// C-Code aufrufen
|
||
|
call init
|
||
|
|
||
|
// Falls wir jemals aus init zurueckkommen sollten, sperren wir die Interrupts und
|
||
|
// halten einfach den Prozessor an. (man braucht ihn ja nicht unnötig heißlaufen lassen.)
|
||
|
_stop:
|
||
|
cli
|
||
|
hlt
|
||
|
|
||
|
// Sollte es doch weitergehen, probieren wir erneut die CPU schlafen zu lassen
|
||
|
jmp _stop
|
||
|
|
||
|
// 8 kB Stack fuer den Kernel. Das Label steht hinter dem freien Speicher,
|
||
|
// weil der Stack nach unten waechst
|
||
|
.section .bss
|
||
|
.space 8192
|
||
|
kernel_stack:
|