自制操作系统 第2步

来源:互联网 发布:地形数据涉密规定 编辑:程序博客网 时间:2024/05/21 07:08
!boot.s  bootsect.s框架  .globl begtext,begdata,begbss,endtext,enddata,endbss  .text      begtext:  .data      begdata:  .bss      begbss:  .text  BOOTSECT = 0x07c0  SETUPLEN = 4SETUPSEG = 0x0c20CYLS = 10  entry start  start:      jmpi go,BOOTSECTgo:      mov ax,cs      mov ds,ax     mov ax,#0x0800 !磁盘内容加载起始地址c0-h0-s2,启动扇区c0-h0-s1 有bios加载    mov es,ax  !读取下一个512字节!启动扇区是由bios来加载的,所以我们只需要加载剩下的扇区就行!es 已经在前面设置过 line=22load_setup:xor dx,dx      !DH 0,DL 0mov cx,#0x0002 !CH 0, CL 2mov bx,#0x0200 !读取到内存的位置mov ax,#0x0200+SETUPLEN !AH 02,AL 4 一次读取4个扇区int 0x13jnc ok_load_setupxor dx,dx     !重启软盘xor ax,ax int 0x13jload_setupok_load_setup:! ah = 0x08 dl = 驱动器号(如果是硬盘则要置位7 为1)。! 返回信息:! 如果出错则CF 置位,并且ah = 状态码。! ah = 0, al = 0, bl = 驱动器类型(AT/PS2)! ch = 最大磁道号的低8 位,cl = 每磁道最大扇区数(位0-5),最大磁道号高2 位(位6-7)! dh = 最大磁头数, dl = 驱动器数量,! es:di -.. 软驱磁盘参数表。xor dl,dlmov ah,#0x08int 0x13xor ch,ch      !我们实质获取的是每磁道扇区个数 cl seg csmov sectors,cx !ch sectors,cl track!mov ax,#INITSET  bootsect 自搬移地址!mov es,ax      !因为上面去磁盘参数中断改了es的值! Print some inane messagemov ah,#0x03xor bh,bhint 0x10mov cx,#9mov bx,#0x0007mov bp,#msg1mov ax,#0x1301int 0x10!加载system代码!即保护模式汇编,先不写!movax,#SYSSEG!moves,ax! segment of 0x010000!callread_it!callkill_motor!查找文件系统所在位置!先略过!跳转到setup中执行!jmpi 0,SETUPSEGfin:jmp fin!用于记录信息sectors:.word 0msg1:.byte 13,10.ascii "Leading".org 510      .word 0xaa55    .text      endtext:  .data      enddata:  .bss      endbss: 


//真的是历经千辛万苦但是给挂了,看Linux-0.0.2也没有写fat12的文件格式,运行的不是好好的嘛。 苦思中。。。

//写一个操作系统太耗时了,基本从中午2点到晚上两点,还么打通一关,关键是好久没写汇编了,伤心

//现在把bootsetc.S 基本上给读懂了,发布下给大家参考


0 0
原创粉丝点击