引导加载程序不会跳转到内核代码

引导加载程序不会跳转到内核代码

我在写小操作系统-练习用。我从引导程序开始。
我想要创建在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
浏览 555回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP