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