Also, dann muss ich in meiner Tabelle eigentlich nur den Task des Programmes des Kernels speichern
?
?09. November 2026, 18:27
?
?Stackpointer:
heip:
dd 0
hcs:
dd 0x8
heflags:
dd 0x3202
hesp:
dd 0x70000
hss:
dd 0x10task_ss equ 0x10
task_esp equ 0x70000
task_eflags equ 0x3202
task_cs equ 0x8
task_eax equ 0
task_ebx equ 0
task_ecx equ 0
task_edx equ 0
task_esi equ 0
task_edi equ 0
task_ebp equ 0
; 1024 elemente großen stack erstellen
[section .bss]
resd 1024
task_stackbase:
[section .text]
; erstellt einen neuen task
; erwartet den eip in eax
; und gibt den sp des kernelstacks in eax zurück
create_new_task:
; später solltest du den speicher für den stack dynamisch allokieren
mov [task_stackbase - 4], task_ss
mov [task_stackbase - 8], task_esp
mov [task_stackbase - 12], task_eflags
mov [task_stackbase - 16], task_cs
mov [task_stackbase - 20], eax
mov [task_stackbase - 24], task_eax
mov [task_stackbase - 28], task_ebx
mov [task_stackbase - 32], task_ecx
mov [task_stackbase - 36], task_edx
mov [task_stackbase - 40], task_esi
mov [task_stackbase - 44], task_edi
mov [task_stackbase - 48], task_ebp
mov eax, task_stackbase - 48
ret
task_switch_isr:
push eax
push ebx
push ecx
push edx
push esi
push edi
push ebp
; scheduler aufrufen und nächsten task bestimmen
; dann esp switchen
; eoi senden
mov al, 0x20
out 0x20, al
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
iret