欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

写一个Boot引导程

程序员文章站 2022-03-05 09:55:53
...
将标识符    org    0x7c00          ;org是origin的英文缩写,意思是起始地址,制定程序的其实地址
BaseOfStack    equ    0x7c00    ;等价语句,赋值标识符
 
;这一段是引导程序的寄存器初始化部分,将CS寄存器的短地址设置到DS\ED\SS中,以及设置指针寄存器SP
Label_Start:
    mov    ax, cs
    mov    ds, ax
    mov    es, ax
    mov    ss, ax
    mov    sp, BaseOfStack  
 
;通过中断服务INT 10h实现屏幕信息显示相关操作。INT 10h中断服务要求在调用时,必须想AH寄存器传入服务程序的主功能编号
;=======    clear screen 上卷指定范围的窗口,INT 10h的主功能号AH=06h
    mov    ax, 0600h     ;AH是ax的高八位,AL是ax的低八位
    mov    bx, 0700h
    mov    cx, 0
    mov    dx, 0184fh
    int    10h
;=======    set focus设置屏幕光标位置,INT 10h的主功能号AH=02h
 
    mov    ax, 0200h
    mov    bx, 0000h  ;BH=页码
    mov    dx, 0000h  ;DH=游标的列数,DL=游标的行数
    int    10h
;=======    display on screen : Start Booting...... 显示一行字符串,INT 10h的主功能号AH=13h
 
    mov    ax, 1301h
    mov    bx, 000fh
    mov    dx, 0000h
    mov    cx, 10
    push   ax
    mov    ax, ds
    mov    es, ax
    pop    ax
    mov    bp, StartBootMessage
    int    10h
;=======    reset floppy  INT 13h,AH=00h功能:重置磁盘驱动器,为下一次读写软盘做准备
    xor    ah, ah
    xor    dl, dl
    int    13h
 
    jmp    $
 
    StartBootMessage:    db "Start Boot"
 
;=======    fill zero until whole sector
 
    times    510-($-$$) db 0  ;重复n次每次填充值为0,$代表该指令的地址,$$表示程序起始地址
    dw    0xaa55   ;结尾,必须为aa55