ospre 0.1.6

这是一个用于开发64位操作系统的前置工具,用于做boot、loader等工作。它需要你安装nasm编译器才能使用,使用方式请看文档
Documentation

pub fn boot()->&'static str{

    "
    ; 功能:boot程序的功能是开启保护模式,并加载loader
    ; Author: fengchen Xie
    ; Time:2023-04-20
    
    %include \"ospre/common/boot_loader_equ.asm\" 
    
    [bits 16]
    org 0x7c00
    section boot
        ; 设置寄存器和栈
        mov ax, 0x0000
        mov ds, ax
        mov es, ax
        mov ss, ax
        mov sp, 0x7c00
    
        cli
        ;加载GDT
        mov word  [GDT_LIMIT],31
        mov dword [GDT_LIMIT+0x02],GDT
        lgdt [GDT_LIMIT]
    
        ;定位保护模式入口点
        mov dword [PROTECT_ENTRY+0x00],protect
        mov dword [PROTECT_ENTRY+0x04],0x08
    
        ;开启保护模式
        mov eax,cr0
        or eax,1
        mov cr0,eax
    
        ;使用jmp指令刷新流水线
        jmp far dword [PROTECT_ENTRY]
    
        [bits 32]
        ;进入保护模式
    protect:
        ;初始化各个段寄存器
        mov eax,0x10
        mov ds,eax
        mov es,eax
        mov ss,eax
        mov esp,0x7c00
    
        ;从磁盘循环读取loader到内存0x7e00处
        mov ecx,LOADER_ALL_SECTORS
        mov eax,LOADER_START_SECTOR
        mov ebx,LOADER_CACHE_ADDRESS
    
    
    read_loader:
        call read_one_sector 
        add ebx,0x200
        loop read_loader   ;调用存储在LBA28文件中的读取磁盘过程
    
        jmp LOADER_CACHE_ADDRESS ;跳转到loader程序位置执行
    
    
    %include \"ospre/common/LBA28.asm\"
    
    
    
    
    
    ;-----------------------------------------------以下位置存放数据--------------------------------------------------
        ;GDT段界限和基地址
    GDT_LIMIT:
        dw 0x00
        dd 0x00
    
    
        ;GDT所在位置
    GDT:
        ;空描述符
        dd 0x00000000
        dd 0x00000000 
    
        ;代码段描述符
        dd 0x0000ffff
        dd 0x00cf9a00 
    
        ;数据段描述符
        dd 0x0000ffff
        dd 0x00cf9200
    
        ;64位代码段描述符(方便在进入64位模式时使用)
        dd 0x0000ffff
        dd 0x00af9800 
    PROTECT_ENTRY:
        ;保护模式入口
        dd 0x00
        dd 0x00
    
        ; 引导扇区魔术
       times 510-($-$$) db 0
        db 0x55
        db 0xaa
    
    "
}