引導(dǎo)加載程序不會跳轉(zhuǎn)到內(nèi)核代碼我在寫小操作系統(tǒng)-練習(xí)用。我從引導(dǎo)程序開始。我想要創(chuàng)建在16位真實模式下運行的小型命令系統(tǒng)(目前是這樣)。我已經(jīng)創(chuàng)建了重新設(shè)置驅(qū)動器的引導(dǎo)加載程序,然后在引導(dǎo)加載程序之后加載扇區(qū)。問題是因為jmp實際上什么都沒發(fā)生。我不試圖在0x7E00加載下一個扇區(qū)(我不完全確定如何使用es:bx來指向地址,所以這可能是一個問題,我相信它的地址:偏移),就在引導(dǎo)加載程序之后。這是代碼:;
; 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測試這段代碼,但是實際上什么都沒有發(fā)生,讀取錯誤沒有顯示,以及應(yīng)該打印的消息。
引導(dǎo)加載程序不會跳轉(zhuǎn)到內(nèi)核代碼
慕運維8079593
2019-06-16 15:08:28