写一个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