mkmbr.s

来自「自己以前写的 引导扇区代码。包括: fat12.asm fat16.asm 」· S 代码 · 共 54 行

S
54
字号
;REM 重写硬盘主引导程序的测试文件
;\batsdev\bin\nasm -fbin %0 -o mkmbr.com -E \batsdev\src\debug\mbr.err
;\batsdev\bin\nasm -e %0 -o \batsdev\src\debug\mbr.dbg
;goto batend
org 0x100
BEGIN: 
    mov  ax,   0201h   
    mov  bx,   200h
    mov  cx,   1
    mov  dx,   0080h
    int  13h           ;读硬盘主引导扇区到es:200
    jnc  CHGPARTAB     ;读正确?
    xor  ax,   ax      ;不正确?磁盘复位,再读
    int  13h
    inc  si            ;次数计数器
    cmp  si,   3       ;连续读3次
    jnz  BEGIN         ;不到3次?再读
DOSREADERR:            ;3次都不正确?错误处理
    mov  dx,   DOSERRMSG
    mov  ah,  09h
    int  21h
    ret
CHGPARTAB:             ;获取分区表信息
    mov  si,  3beh
    mov  di,  7beh
    mov  cx,  040H
    CLD
    REP
    MOVSB              ;更换分区表数据
WMBOOTSECT:
    mov  ax,  0301h    ;写一个扇区
    mov  bx,  600h     ;把es:bx的内容写到主引导扇区
    mov  cx,  1
    mov  dx,  0080h    ;写第一块硬盘
    int  13h
    jnc  WMBOOTOK      ;写正确
    inc  si
    cmp  si,  3
    jnz  WMBOOTSECT
    mov  dx,   WRITERRMSG
    MOV  AH,  09H
    INT  21H
    RET
WMBOOTOK:
    mov  dx,   WRITOKMSG
    MOV  AH,  09H
    INT  21H
    RET
DOSERRMSG  db 'Read main boot sector error !',0dh,0ah,'$'
WRITERRMSG DB 'Writ main boot sector error !',0dh,0ah,'$'
WRITOKMSG  DB 'Make BATS MBR OK !',0dh,0ah,'$'
times 0x500-($-$$) db 0
incbin "mbr.bin"
;:batend

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?