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

📄 boot.asm

📁 06.640×480×16图形模式写像素实验
💻 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 + -