Add proper _exit procedure
這個提交存在於:
父節點
bb675a67a7
當前提交
4d827ec4e9
共有 1 個檔案被更改,包括 17 行新增 和 6 行删除
23
main.asm
23
main.asm
|
@ -6,26 +6,37 @@ org 0x0000 ; if we are not at CS:0000, CS adjustment will fix it for us
|
|||
; es:bx probable pxeenv+ structure
|
||||
; ss:sp functional stack
|
||||
|
||||
_startup:
|
||||
; during PXE, CS=0000 and IP=7C00
|
||||
; adjust CS so our offsets match org setting above
|
||||
push bx ; offset register for calculations
|
||||
call near __startup_push_ip ; push ip
|
||||
__startup_push_ip:
|
||||
mov ax, _exit
|
||||
push ax ; store exit addr on stack so main will return to it
|
||||
push bx ; backup bx
|
||||
call near .push_ip
|
||||
.push_ip:
|
||||
pop bx
|
||||
sub bx, __startup_push_ip ; subtract expected value ...
|
||||
sub bx, .push_ip ; subtract expected value ...
|
||||
shr bx,1 ; shift it to 4 bits to the right
|
||||
shr bx,1
|
||||
shr bx,1
|
||||
shr bx,1
|
||||
mov ax,cs
|
||||
add ax,bx ; so we can add it to cs
|
||||
pop bx
|
||||
pop bx ; restore bx
|
||||
push ax ; cs
|
||||
mov ax, main
|
||||
push ax ; ip
|
||||
sti
|
||||
retf ; jump
|
||||
|
||||
string_halt:
|
||||
_exit:
|
||||
mov si, .message
|
||||
call kprintf
|
||||
int 0x20
|
||||
.loop:
|
||||
hlt
|
||||
jmp .loop
|
||||
.message:
|
||||
db "Halted: Waiting for poweroff...", 0
|
||||
|
||||
main:
|
||||
|
|
載入中…
新增表格
新增連結
新增問題並參考