blob: c862c218232888258c76d35a925bb435dfba0d31 [file] [log] [blame]
swissChilicfd3c3c2021-04-03 15:04:24 -07001 [bits 32]
2 [extern _do_switch_task]
3 [global switch_task]
4switch_task:
5 pusha ; Save everything
6 push esp ; Arguments for _do_switch_task(eip, ebp, esp)
7 push ebp
8 push .after
9 call _do_switch_task
10.after:
swissChili172fd632021-04-04 19:02:36 -070011 ;; add esp, 12 ; Clear the arguments
swissChilicfd3c3c2021-04-03 15:04:24 -070012 popa ; Reset everything
13 xor eax, eax ; Return 0
swissChili52a03d82021-07-18 15:22:14 -070014 ret
swissChilicfd3c3c2021-04-03 15:04:24 -070015
16 [global _switch_to_task]
swissChili7be32742021-04-03 21:17:24 -070017 ;; _switch_to_task(uint page_directory, uint eip, uint ebp, uint esp)
swissChilicfd3c3c2021-04-03 15:04:24 -070018_switch_to_task: ; (page_directory, eip, ebp, esp)
19 add esp, 4 ; We don't care about the return address
swissChilicfd3c3c2021-04-03 15:04:24 -070020
swissChili7be32742021-04-03 21:17:24 -070021 pop ecx ; Page directory
22 pop eax ; eip
23 pop ebp
24 pop ebx ; esp
25
swissChilicfd3c3c2021-04-03 15:04:24 -070026 mov esp, ebx ; Reset old stack
27
28 mov cr3, ecx ; Set page directory
29 sti
30 jmp eax ; Jump back to code