引导加载程序不会跳转到内核代码我在写小操作系统-练习用。我从引导程序开始。我想要创建在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测试这段代码,但是实际上什么都没有发生,读取错误没有显示,以及应该打印的消息。
添加回答
举报
0/150
提交
取消