zoukankan      html  css  js  c++  java
  • 操作系统之旅(1)

    从软盘启动开始

    ;File Path:boot/boot.asm
    ;nasm -I include/ -o boot.bin boot.asm
    %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                        ; 结束标志
    
    ;File Path: boot/include/load.inc
    BaseOfBoot                       equ 0000h ; 启动段地址
    OffsetOfBoot                     equ 7c00h ; 启动偏移地址
    
    BaseOfLoader                     equ 9000h ; LOADER.BIN 被复制到的地址 - 段地址
    OffsetOfLoader                   equ 0100h ; LOADER.BIN 被复制到的地址 - 偏移地址
  • 相关阅读:
    20150629_Andriod_06_插入_删除_弹出式操作数据
    20150626_Andriod_02_ListView2_列表与详细信息
    Andriod 字符串数组里加入字符串元素
    20150625_Andriod_02_ListView2_多条目显示_选中
    20150625_Andriod_01_ListView1_条目选中
    Android开发中完全退出程序的三种方法
    Python中的单例模式的几种实现方式的及优化
    jdk与jre
    页面跳转
    用for循环创建对象
  • 原文地址:https://www.cnblogs.com/tongqj/p/3647848.html
Copyright © 2011-2022 走看看