引導加載程序不會跳轉到內核代碼我在寫小操作系統-練習用。我從引導程序開始。我想要創建在16位真實模式下運行的小型命令系統(目前是這樣)。我已經創建了重新設置驅動器的引導加載程序,然后在引導加載程序之后加載扇區。問題是因為jmp實際上什么都沒發生。我不試圖在0x7E00加載下一個扇區(我不完全確定如何使用es:bx來指向地址,所以這可能是一個問題,我相信它的地址:偏移),就在引導加載程序之后。這是代碼:;
; SECTOR 0x0
;
;dl is number of harddrive where is bootloader
org 0x7C00
bits 16
;reset hard drive
xor ah,ah
int 0x13
;read sectors
clc
mov bx,0x7E00
mov es,bx
xor bx,bx
mov ah,0x02 ;function
mov al,0x1 ;sectors to read
mov ch,0x0 ;tracks
mov cl,0x1 ;sector
mov dh,0x0 ;head
int 0x13
;if not readed jmp to error
jc error
;jump to 0x7E00 - executed only if loaded
jmp 0x7E00
error:
mov si,MSGError
.loop:
lodsb
or al,al
jz .end
mov ah,0x0E
int 0x10
jmp .loop
.end:
hlt
MSGError db "Error while booting", 0x0
times 0x1FE - ($ - $$) db 0x0
db 0x55
db 0xAA
;
; SECTOR 0x1
;
jmp printtest
;definitions
MSGLoaded db "Execution successful", 0x0
;
; Print function
; si - message to pring (NEED TO BE FINISHED WITH 0x0)
printtest:
mov si,MSGLoaded
.loop:
lodsb
or al,al
jz .end
mov ah,0x0E
int 0x10
jmp .loop
.end:
hlt
times 0x400 - ($-$$) db 0x0我一直在使用VirtualBox測試這段代碼,但是實際上什么都沒有發生,讀取錯誤沒有顯示,以及應該打印的消息。
引導加載程序不會跳轉到內核代碼
慕運維8079593
2019-06-16 15:08:28