📄 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标号处
BootMessage:
db "Hello, MyOS world!" ; 待显示字符串信息
DisplayString:
mov ax, BootMessage ; 取字符串数据(段)的首地址
mov bp, ax ; ES:BP 赋值为待显示字符串的首地址 (BIOS INT 10-13h 定义参数)
mov cx, 18 ; CX 赋值为字符串长度(此处为固定值) (BIOS INT 10-13h 定义参数)
mov ax, 01301h ; AH 赋值为功能号13h(显示字符串) (BIOS INT 10-13h 定义参数)
; AL 输出模式参数赋值为01h (BIOS INT 10-13h 定义参数)
; ---------------------------------------------------
; 第 0 位 : 在输出之后更新光标位置
; 第 1 位 : 字符串包含交替的字符和属性
;
mov bx, 000ch ; BH 页号赋值为0 (BIOS INT 10-13h 定义参数)
; BL 属性赋值为黑底浅红字(属性字BL使用的前提为AL的高位置0)
; ---------------------------------------------------
; 16位色彩编码表 (D7 D6 D5 D4为背景色,D3 D2 D1 D0为前景色)
; ┏━━━━━━━━━━━┳━━━━━━━━━━━┓
; ┃ 0 0 0 0 黑 ┃ 1 0 0 0 灰 ┃
; ┃ 0 0 0 1 蓝 ┃ 1 0 0 1 浅蓝 ┃
; ┃ 0 0 1 0 绿 ┃ 1 0 1 0 浅绿 ┃
; ┃ 0 0 1 1 青 ┃ 1 0 1 1 浅青 ┃
; ┃ 0 1 0 0 红 ┃ 1 1 0 0 浅红 ┃
; ┃ 0 1 0 1 品红 ┃ 1 1 0 1 浅品红 ┃
; ┃ 0 1 1 0 棕 ┃ 1 1 1 0 黄 ┃
; ┃ 0 1 1 1 灰白 ┃ 1 1 1 1 白 ┃
; ┗━━━━━━━━━━━┻━━━━━━━━━━━┛
;
mov dx, 0000h ; DX 赋值为字符串显示的起始行、列号 (BIOS INT 10-13h 定义参数)
int 10h ; BIOS 10h号中断-13h号功能 (字符串屏显功能调用)
ret ; 子程序无参数返回
MYOS_ENTRY:
mov ax, cs ; ┓
mov ds, ax ; ┣ 段寄存器初始化
mov es, ax ; ┛
call DisplayString ; 调用字符串显示子程序
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 + -