⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot.asm

📁 引导扇区程序示例 引导扇区程序示例
💻 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 + -