summaryrefslogtreecommitdiff
path: root/asm/usermode.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/usermode.s')
-rw-r--r--asm/usermode.s15
1 files changed, 9 insertions, 6 deletions
diff --git a/asm/usermode.s b/asm/usermode.s
index acf4b04..67eca04 100644
--- a/asm/usermode.s
+++ b/asm/usermode.s
@@ -1,8 +1,9 @@
-.global asm_usermode
-.extern userfunc
+.global usermode
-# pass address to func to exec (TODO)
-asm_usermode:
+usermode:
+
+ mov 0x4(%esp),%edx //get adress of passed : void func()
+ //to be called in ring 3
// 0x23 is user data segment (|2 low bits)
// 0x1b is user code segment (|2 low bits)
@@ -13,6 +14,7 @@ asm_usermode:
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
+
// ss is handled by iret
mov %esp, %eax
@@ -25,10 +27,11 @@ asm_usermode:
//mov $0x200, %eax
//push %eax // eflags image
pushl $0x1B // return code segment selector
- push $userfunc // return instruction pointer
+ push %edx // return instruction pointer
+
iret
- jmp . // will never be reached?
+ jmp . // never to be reached