Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;
- ; cpu_masm.asm
- ;;
- extern OsInitialize: proc
- extern kernel_stack_top: qword
- .code
- ; NO_RETURN void x64Entry(LoaderBlock*)
- ;
- ; rcx = Loader block
- x64Entry proc
- cli
- mov rsp, kernel_stack_top
- jmp OsInitialize
- x64Entry endp
- ; void ReloadSegments(u16 code_selector, u16 data_selector)
- ;
- ; dx = New data selector
- ; cx = New code selector
- ReloadSegments proc
- mov ds, dx
- mov es, dx
- mov ss, dx
- movzx rcx, cx
- lea rdx, exit
- push rcx
- push rdx
- retfq
- exit:
- ret
- ReloadSegments endp
- ; void LoadTr(u16 offset)
- ;
- ; cx = New task register offset
- LoadTr proc
- ltr cx
- ret
- LoadTr endp
- end
- ;;
- ; cpu_nasm.asm
- ;;
- section .data
- extern kernel_stack_top
- section .text
- extern OsInitialize
- ; NO_RETURN void x64Entry(LoaderBlock*)
- ;
- ; rcx = Loader block
- global x64Entry
- x64Entry:
- cli
- mov rsp, kernel_stack_top
- sub rsp, 32
- jmp OsInitialize
- ; void ReloadSegments(u16 code_selector, u16 data_selector)
- ;
- ; dx = New data selector
- ; cx = New code selector
- global ReloadSegments
- ReloadSegments:
- mov ds, word dx
- mov es, word dx
- mov ss, word dx
- movzx rcx, cx
- lea rdx, [rel .exit]
- push rcx
- push rdx
- retfq
- .exit:
- ret
- ; void LoadTr(u16 offset)
- ;
- ; cx = New task register offset
- global LoadTr
- LoadTr:
- ltr cx
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement