📄 boot.asm
字号:
; ==================================================== ;
; .: keenjoy95 2007 :. ;
; .: keenjoy95_at_gmail_dot_com :. ;
; ---------------------------------------------------- ;
; 代码描述 : 引导扇区演示程序 ;
; 编译方法 : nasm boot.asm -o boot.bin ;
; ==================================================== ;
org 07c00h ; ORG伪指令也被称为程序起始地址伪指令 / 定位伪指令
; 该伪指令用于指示编译器(链接器)将其后续代码(段)定位于指定地址
; 由于本示例是引导扇区演示程序,所以目标定位地址为0000:7c00h
jmp MYOS_ENTRY ; 无条件跳转到程序的入口点MYOS_ENTRY标号处
ScrollWindows:
mov ax, 0600h ; AH 赋值为功能号06h(窗口上滚) (BIOS INT 10-06h 定义参数)
; AL 赋值为0, 窗口信息全部移出(清屏) (BIOS INT 10-06h 定义参数)
mov bx, 0700h ; BH 底部空白行属性赋值为黑底灰白字 (BIOS INT 10-06h 定义参数)
; BL 保留
mov cx, 0000h ; 窗口左上角的行列、号赋值为00h 00h (BIOS INT 10-06h 定义参数)
mov dx, 184fh ; 窗口右下角的行列、号赋值为18h 4fh (BIOS INT 10-06h 定义参数)
; ---------------------------------------------------
; 0(00h) 79(4fh)
; 0(00h)┏━━━━━━━━━━━━━━━━┓
; ┃ ┃
; ┃ ┃
; ┃ ┃
; ┃ 显示器 25*80 显示方式 ┃
; ┃ ┃
; ┃ ┃
; ┃ ┃
; 24(18h)┗━━━━━━━━━━━━━━━━┛
;
int 10h ; BIOS 10h号中断-06h号功能 (清屏功能调用)
ret ; 子程序无参数返回
SetVideoMode:
mov ax, 0012h ; 640 * 480 * 16 图形模式
; ---------------------------------------------------
; 0(00h) 639(27Fh)
; 0(00h)┏━━━━━━━━━━━━━━━━┓
; ┃ ┃
; ┃ ┃
; ┃ ┃
; ┃ 显示器 640 * 480 显示方式 ┃
; ┃ 16 种色彩 ┃
; ┃ ┃
; ┃ ┃
; 479(1DFh)┗━━━━━━━━━━━━━━━━┛
;
int 10h ; BIOS 10h号中断-00h号功能 (视频模式切换功能调用)
ret ; 子程序无参数返回
SetBackGround:
mov ah, 0bh
mov bx, 0001h ; 背景颜色设置为蓝色
int 10h ; BIOS 10h号中断-0Bh号功能 (背景颜色设置功能调用)
ret ; 子程序无参数返回
WriteGraphicsPixel:
mov cx, 0 ; Y 坐标设置
mov dx, 40 ; X 坐标设置
Back1: ;
mov ax, 0c01h ; 640 * 480 * 16 图形模式像素颜色设置
mov bh, 0 ; 显示页号设置
int 10h ; BIOS 10h号中断-0ch号功能 (像素写模式功能调用)
inc cx ; ┓
cmp cx, 640 ; ┣ X 坐标递增至屏幕宽度
jnz Back1 ; ┛
; ---------------------------------------------------------
mov cx, 0 ; Y 坐标设置
mov dx, 440 ; X 坐标设置
Back2: ;
mov ax, 0c02h ; 640 * 480 * 16 图形模式像素颜色设置
mov bh, 0 ; 显示页号设置
int 10h ; BIOS 10h号中断-0ch号功能 (像素写模式功能调用)
inc cx ; ┓
cmp cx, 640 ; ┣ X 坐标递增至屏幕宽度
jnz Back2 ; ┛
; ---------------------------------------------------------
mov cx, 40 ; Y 坐标设置
mov dx, 0 ; X 坐标设置
Back3: ;
mov ax, 0c03h ; 640 * 480 * 16 图形模式像素颜色设置
mov bh, 0 ; 显示页号设置
int 10h ; BIOS 10h号中断-0ch号功能 (像素写模式功能调用)
inc dx ; ┓
cmp dx, 480 ; ┣ Y 坐标递增至屏幕高度
jnz Back3 ; ┛
; ---------------------------------------------------------
mov cx, 600 ; Y 坐标设置
mov dx, 0 ; X 坐标设置
Back4: ;
mov ax, 0c04h ; 640 * 480 * 16 图形模式像素颜色设置
mov bh, 0 ; 显示页号设置
int 10h ; BIOS 10h号中断-0ch号功能 (像素写模式功能调用)
inc dx ; ┓
cmp dx, 480 ; ┣ Y 坐标递增至屏幕高度
jnz Back4 ; ┛
ret ; 子程序无参数返回
MYOS_ENTRY:
mov ax, cs ; ┓
mov ds, ax ; ┣ 段寄存器初始化
mov es, ax ; ┛
call ScrollWindows ; 调用清除屏幕子程序
call SetVideoMode ; 调用视频模式切换子程序
call SetBackGround ; 调用背景颜色设置子程序
call WriteGraphicsPixel ; 调用绘图子程序
jmp $ ; 主程序进入无限循环
MYOS_PAD:
times 510-($-$$) db 0 ; 循环填充剩余空间,使生成的二进制代码大小恰好为一个扇区(512Byte)
dw 0xAA55 ; 引导扇区结束标志
; ---8<--------------- [Cut Here] --------------->8--- ;
; .: keenjoy95 2007 :. ;
; .: keenjoy95_at_gmail_dot_com :. ;
; ! NO rights reserved ! ;
; ---------------------------------------------------- ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -