mirror of
https://github.com/JannisHeydemann/BoredOS.git
synced 2026-05-30 10:26:59 +00:00
src/kernel --> src/
This commit is contained in:
61
src/arch/process_asm.asm
Normal file
61
src/arch/process_asm.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
; Copyright (c) 2023-2026 Chris (boreddevnl)
|
||||
; This software is released under the GNU General Public License v3.0. See LICENSE file for details.
|
||||
; This header needs to maintain in any file it is present in, as per the GPL license terms.
|
||||
global process_jump_usermode
|
||||
|
||||
section .text
|
||||
|
||||
|
||||
process_jump_usermode:
|
||||
cli
|
||||
|
||||
; Load user data segment (0x23)
|
||||
mov ax, 0x23
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
|
||||
; Build the IRETQ stack frame
|
||||
; 1. SS (User Data Segment)
|
||||
push 0x23
|
||||
|
||||
; 2. RSP (User Stack)
|
||||
push rsi
|
||||
|
||||
; 3. RFLAGS (Enable Interrupts: IF = 0x200 | Reserved bit 1 = 0x2 -> 0x202)
|
||||
push 0x202
|
||||
|
||||
; 4. CS (User Code Segment)
|
||||
push 0x1B
|
||||
|
||||
; 5. RIP (Entry Point)
|
||||
push rdi
|
||||
|
||||
; Jump to Ring 3!
|
||||
iretq
|
||||
|
||||
; void context_switch_to(uint64_t rsp)
|
||||
; Restores context from isr frame and jumps
|
||||
global context_switch_to
|
||||
context_switch_to:
|
||||
mov rsp, rdi
|
||||
|
||||
pop r15
|
||||
pop r14
|
||||
pop r13
|
||||
pop r12
|
||||
pop r11
|
||||
pop r10
|
||||
pop r9
|
||||
pop r8
|
||||
pop rbp
|
||||
pop rdi
|
||||
pop rsi
|
||||
pop rdx
|
||||
pop rcx
|
||||
pop rbx
|
||||
pop rax
|
||||
|
||||
add rsp, 16 ; drop int_no and err_code
|
||||
iretq
|
||||
Reference in New Issue
Block a user