首页 > 其他 > 详细

操作系统之旅(1) - BOOT

时间:2014-04-06 03:35:49      阅读:450      评论:0      收藏:0      [点我收藏+]

...

boot.asm:

bubuko.com,布布扣
%include "load.inc"

org 07c00h
start:
    mov     ax , cs
    mov     ds , ax
    mov     es , ax
    mov     ss , ax
    mov     sp , OffsetOfBoot

    ; 清屏
    mov     ax , 0600h           ; AH = 6,  AL = 0h
    mov     bx , 0700h           ; 黑底白字(BL = 07h)
    mov     cx , 0               ; 左上角: (0, 0)
    mov     dx , 184fh           ; 右下角: (80, 50)
    int     10h                  ; int 10h

    ; 软驱复位
    xor     ah , ah
    xor     dl , dl
    int     13h

    ;读入Loader.bin
    push    10                   ; 读取10个扇区
    push    1                    ; 起始扇区
    push    OffsetOfLoader       ; 目的内存偏移地址
    push    BaseOfLoader         ; 目的内存段地址
    call    ReadSector
    add     sp , 8

    jmp     BaseOfLoader:OffsetOfLoader

;----------------------------------------------------------------------------
; ReadSector(u16 mem_seg, u16 dst_off, u16 start_sector, u16 num_sector);
;----------------------------------------------------------------------------
ReadSector:
    push    bp
    mov     bp , sp

    mov     ax , [ss:bp + 4]
    mov     es , ax
    mov     bx , [ss:bp + 6]
.r1:
    cmp     word [ss:bp + 10] , 0
    je      .r2

    mov     ax , [ss:bp + 8]
    mov     cl , 18
    div     cl                   ;al - 商 ah - 余数
    inc     ah
    mov     cl , ah              ;cl - 扇区号
    mov     ah , al
    and     ah , 1
    mov     dh , ah              ;dh - 磁头号
    shr     al , 1
    mov     ch , al              ;ch - 磁道号
    mov     dl , 0               ;dl - 驱动器号
    mov     ax , 0201h
    int     13h

    inc     word [ss:bp + 8]
    dec     word [ss:bp + 10]
    add     bx , 512
    jmp     .r1
.r2:
    pop     bp
    ret     

times 510 - ($ - $$) db 0        ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55                        ; 结束标志
bubuko.com,布布扣

 load.inc

bubuko.com,布布扣
BaseOfBoot                       equ 0000h ; 启动段地址
OffsetOfBoot                     equ 7c00h ; 启动偏移地址

BaseOfLoader                     equ 9000h ; LOADER.BIN 被复制到的地址 - 段地址
OffsetOfLoader                   equ 0100h ; LOADER.BIN 被复制到的地址 - 偏移地址
bubuko.com,布布扣

 

操作系统之旅(1) - BOOT,布布扣,bubuko.com

操作系统之旅(1) - BOOT

原文:http://www.cnblogs.com/tongqj/p/3647848.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!