diff options
Diffstat (limited to 'src/kernel/dev/v86asm.s')
-rw-r--r-- | src/kernel/dev/v86asm.s | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/kernel/dev/v86asm.s b/src/kernel/dev/v86asm.s new file mode 100644 index 0000000..da5bc38 --- /dev/null +++ b/src/kernel/dev/v86asm.s @@ -0,0 +1,39 @@ + +[BITS 32] + +[GLOBAL v86_asm_enter_v86] +v86_asm_enter_v86: + mov eax, [esp + 4] + + xor ebx, ebx + mov bx, [eax + 20] ; get GS + push ebx + mov bx, [eax + 18] ; get FS + push ebx + mov bx, [eax + 14] ; get DS + push ebx + mov bx, [eax + 16] ; get ES + push ebx + mov bx, [eax + 22] ; get SS + push ebx + mov bx, [eax + 26] ; get SP + push ebx + pushf + pop ebx + or ebx, 20200h + push ebx + xor ebx, ebx + mov bx, [eax + 12] ; get CS + push ebx + mov bx, [eax + 24] ; get IP + push ebx + + mov bx, [eax + 2] + mov cx, [eax + 4] + mov dx, [eax + 6] + mov di, [eax + 8] + mov si, [eax + 10] + mov ax, [eax] + + iret + |