从iso映像中的特定位置加载内核

时间:2019-04-03 17:57:46

标签: operating-system

我是OS开发的新手,所以我写了一个引导加载程序,它工作正常,但是当我尝试使用int 13h加载内核时,它无法加载,并且我将软盘映像转换为iso格式,然后在虚拟框中运行所以我试图在DL寄存器中使用e0h,但是它给了我一个错误,因为没有找到致命错误的引导加载程序,所以我在做什么错了吗

开始:

[ORG 0X7C00]

xor ax,ax;使其为零  mov ds,ax  cld;方向清晰

mov si,味精  呼叫打印  ;致电disk_read_error

挂起:     cli     呼叫load_sector     ; jmp hang

.data:      msg db'Hello world !!!!',13,10,0      msg2 db“磁盘读取错误”,13,10,0  打印:     罗兹     或al,al; zero = str的结尾     做完了     mov ah,0x0E     mov bh,0     整数0x10     jmp打印

完成:     退出

; dd if = boot.bin of = floopy.img seek = 0 count = 1 conv = notrunc

load_sector:         MOV DL,e0h;驱动器0 =软盘1     MOV DH,0x0; head(0 = base)     MOV CH,0x0;轨道/汽缸     MOV CL,0x02;扇区(1 = bootloader,扇区显然从1开始计数而不是0)     MOV BX,0x1000;放置在内核的RAM中-我想在示例中随机选择     MOV ES,BX;将BX放在指针ES中     MOV BX,0x0;恢复为零-也与RAM位置有关

ReadFloppy:

MOV AH, 0x02
MOV AL, 0x01
INT 0x13
JC ReadFloppy ;if it went wrong, try again
;call print
;pointers to RAM position (0x1000)
MOV AX, 0x1000
MOV DS, AX
MOV ES, AX
MOV FS, AX
MOV GS, AX
MOV SS, AX

JMP 0x1000:0x0
;call print
    ;jnc disk_read_error
    ;call 0x00200
    ;hlt

disk_read_error:     mov ah,0x0E     mov bh,0     mov al,“ h”     整数0x10     mov si,味精2     呼叫打印     暂停     ;致电print2

次510-($-$$)db 0  分贝0x55  db 0xAA

0 个答案:

没有答案