引导加载程序后运行 C 程序



我正在为未来的测试应用程序构建一个简单的内核,如MEMTEST等。

所以,我现在拥有的是引导加载程序。我需要做的是加载另一个我将编译的文件放入软盘的第二个扇区,然后运行。

那么,如何将软盘的其余部分加载到RAM中然后运行呢?

你不需要100%准确,我只需要知道并学习必要的中断和"功能"来做到这一点,我需要:)

只是为了共享引导加载程序:

[BITS 16] ;set 16bit mode
[ORG 0x7C00] ; address location where the program will run
jmp main ;start on main
main:
    mov si,hstr ; put the pointer into si register
    call printstr ;print hstr
    ;call load_kernel
    ;here we gonna load kernel into memory and then we will run it.
    mov si,mstr ; put the pointer into si register
    call printstr ;print mstr
    jmp hold ;idle the CPU

hold:
    hlt ;idle CPU
printstr:
    ;This will write in TTY char that will be loaded into al 8bit register.
    lodsb ;load into al
    cmp al,0 ; set flag if al is 0
    jnz print ; if isnt equal to 0 then jump to print
    ret ;else return to main
print: ;print the char
    mov ah,0x0E ;set the ah before calling the video interrupt
    int 10h ;here we go
    jmp printstr ;jump back
    ;
hstr db "Loading ...",13,10,0 ;define the strings. 13 is ASCII, 10 for new line, 0 is the null terminator
mstr db "CPU is now idle!",13,10,0
times 510 - ($-$$) db 0 ;fill the rest of the sector(less 2 last bytes) with 0's. 510-(here-start)=free space with 0's
dw 0xAA55               ;the last 2 bytes of the sector with AA55 signature. means that is the bootloader.

要从软盘或硬盘加载数据,请使用中断 13(十六进制)。

使用

软盘中断比使用硬盘(函数 AH=2 - 也可以与硬盘一起使用 - 使用 C/H/S 扇区寻址)比使用硬盘(函数 AH=0x42 - 在非常旧的 BIOS 中不存在(2000 年之前)——只能与硬盘一起使用,不能与软盘一起使用)。

要运行 C 代码,

您需要一个生成 16 位代码的 C 编译器(也许 Watcom C 编译器仍然能够做到这一点),或者您必须切换到 32 位保护模式。

"osdev.org"处的WIKI是操作系统编程的良好资源,您可以在其中找到很多信息。

相关内容

  • 没有找到相关文章

最新更新