一个进入保护模式加载引导程序的BOOTLOADER

本文档提供了一个简单的BOOTLOADER程序,旨在进入保护模式并加载引导程序。代码首先设置堆栈,然后从指定的磁道、柱面和扇区读取FAT12文件系统。在加载过程中,遇到错误会尝试重试,成功后跳转到加载的程序。如果加载失败,将显示错误信息。最后,程序展示了如何在32位保护模式下进行内存复制和屏幕清理。
摘要由CSDN通过智能技术生成

; haribote-ipl
; TAB=4

CYLS    EQU        10                ; 偳偙傑偱撉傒崬傓偐

        ORG        0x7c00            ; 偙偺僾儘僌儔儉偑偳偙偵撉傒崬傑傟傞偺偐

; 埲壓偼昗弨揑側FAT12僼僅乕儅僢僩僼儘僢僺乕僨傿僗僋偺偨傔偺婰弎

        JMP        entry
        DB        0x90
        DB        "HARIBOTE"        ; 僽乕僩僙僋僞偺柤慜傪帺桼偵彂偄偰傛偄乮8僶僀僩乯
        DW        512                ; 1僙僋僞偺戝偒偝乮512偵偟側偗傟偽偄偗側偄乯
        DB        1                ; 僋儔僗僞偺戝偒偝乮1僙僋僞偵偟側偗傟偽偄偗側偄乯
        DW        1                ; FAT偑偳偙偐傜巒傑傞偐乮晛捠偼1僙僋僞栚偐傜偵偡傞乯
        DB        2                ; FAT偺屄悢乮2偵偟側偗傟偽偄偗側偄乯
        DW        224                ; 儖乕僩僨傿儗僋僩儕椞堟偺戝偒偝乮晛捠偼224僄儞僩儕偵偡傞乯
        DW        2880            ; 偙偺僪儔僀僽偺戝偒偝乮2880僙僋僞偵偟側偗傟偽偄偗側偄乯
        DB        0xf0            ; 儊僨傿傾偺僞僀僾乮0xf0偵偟側偗傟偽偄偗側偄乯
        DW        9                ; FAT椞堟偺挿偝乮9僙僋僞偵偟側偗傟偽偄偗側偄乯
        DW        18                ; 1僩儔僢僋偵偄偔偮偺僙僋僞偑偁傞偐乮18偵偟側偗傟偽偄偗側偄乯
        DW        2                ; 僿僢僪偺悢乮2偵偟側偗傟偽偄偗側偄乯
        DD        0                ; 僷乕僥傿僔儑儞傪巊偭偰側偄偺偱偙偙偼昁偢0
        DD        2880            ; 偙偺僪儔僀僽戝偒偝傪傕偆堦搙彂偔
        DB        0,0,0x29        ; 傛偔傢偐傜側偄偗偳偙偺抣偵偟偰偍偔偲偄偄傜偟偄
        DD        0xffffffff        ; 偨傇傫儃儕儏乕儉僔儕傾儖斣崋
        DB        "HARIBOTEOS "    ; 僨傿僗僋偺柤慜乮11僶僀僩乯
        DB        "FAT12   "        ; 僼僅乕儅僢僩偺柤慜乮8僶僀僩乯
        RESB    18                ; 偲傝偁偊偢18僶僀僩偁偗偰偍偔
[INSTRSET "i486p"]
; 僾儘僌儔儉杮懱
entry:
        MOV        AX,0            ; 儗僕僗僞弶婜壔
        MOV        SS,AX
        MOV        SP,0x7c00
        MOV        DS,AX

; 僨傿僗僋傪撉傓

        MOV        AX,0x0820
        MOV        ES,AX
        MOV        CH,0            ; 柱面0
        MOV        DH,0            ; 磁头0
        MOV        CL,2            ; 扇区2
readloop:
        MOV        SI,0            ; 记录失败次数
retry:
        MOV        AH,0x02        ; AH=0x02 : 读入磁盘
        MOV        AL,1            ; 1个扇区
        MOV        BX,0
        MOV        DL,0x00            ; A驱动器
        INT        0x13            ; 调用磁盘BIOS
        JNC        next            ; 没有出错时跳转到next
        ADD        SI,1            ; SI+1
        CMP        SI,5            ; SI与5比较
        JAE        error            ; SI >= 5 跳转到error
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值