首页 > 代码库 > 20天自制操作系统(三)

20天自制操作系统(三)

我们看\projects\03_day\harib00j中的文件

ipl10.nas: 相当于一个boot源文件,它使用int 0x13 ah=0x2加载某些扇区的文件(loader+kernel)到内存0x从c200中

asmhead.nas:相当于一个loader源文件,作用是

1.设置VGA为320x200x8bit,并把这些参数保存起来

        MOV        AL,0x13            ; VGA 320x200x8bit
        MOV        AH,0x00
        INT        0x10
        MOV        BYTE [VMODE],8    
        MOV        WORD [SCRNX],320
        MOV        WORD [SCRNY],200
        MOV        DWORD [VRAM],0x000a0000

2.int 0x16 ah=0x2 读取键盘标志并保存

        MOV        AH,0x02
        INT        0x16             ; keyboard BIOS
        MOV        [LEDS],AL

3.向0x21 0xa1写OCW1为0xff,屏蔽所有PIC中断

        MOV        AL,0xff
        OUT        0x21,AL
        NOP                        
        OUT        0xa1,AL
        CLI                        

4.开A20地址线

5.加载临时的GDT

6.CR0.PG=0 不开启分页 CR0.PE=1 开启保护模式

7.刷新CS,然后更新其余各个段寄存器

8.剩下的代码主要是移动kernel(也就是C语言生成的文件)到0x0000001b,然后跳到此处执行

kernel的入口是:

void HariMain(void)
{
fin:
    goto fin;
}

我们可以在kernel中调用用汇编写的文件,只要obj链接的时候链接一起就行

同时注意:C语言内函数声明,GLOAL函数导出,WCOFF文件格式,汇编内函数名前加下划线。

; BOOT_INFO
CYLS     EQU        0x0ff0            
LEDS     EQU        0x0ff1
VMODE    EQU        0x0ff2            
SCRNX    EQU        0x0ff4            
SCRNY    EQU        0x0ff6            
VRAM     EQU        0x0ff8