清屏

目录

清屏

需要的工具

Qemu: qemu

Makefile: Makefile

Ubuntu安装qemu

sudo apt-cache search qemu

sudo apt-get install qemu-system-x86

BISO中断清屏

首先是通过BIOS中断,来滚动屏幕,达到清屏的效果。

1. BISO滚屏

中断 int 10h,AH = 06H / 07H

寄存器 说明
AH 功能编码 向上滚屏:06H,向下滚屏 : 07H
BH 空白区域的缺省属性
AL 滚动行数 0:清窗口
CH、CL 滚动区域左上角位置:Y坐标,X坐标
DH、DL 滚动区域右下角位置:Y坐标,X坐标

例如:使用蓝底白字清屏

MOV AH,0x06             ;清除屏幕                   
MOV AL,0
MOV CX,0   
MOV DX,0xffff  
MOV BH,0x17             ;属性为蓝底白字
INT 0x10

2. 设置光标位置:

中断 int 10h

功能描述:用文本坐标下设置光标位置

入口参数:

寄存器 说明
AH 功能编码 设置光标位置:02H
BH 显示页码
DH,DL 行,列 (Y坐标,X坐标)

例如:

mov ah,0x02             ; 光标位置初始化
mov bh,0
mov dx,0
int 0x10

代码

boot.asm内容如下

;Ratsos
;Tab=4
[bits 16]

    org     0x7c00          ;指明程序的偏移的基地址
    
    jmp     Entry           ;跳转到程序入口
    db      "RATSBOOT"              

;----------------------------
;程序入口
Entry:


    ;初始化屏幕和光标
    mov ah,0x06             ; 清除屏幕
    mov bh,0x07                 
    mov al,0
    mov cx,0   
    mov dx,0xffff  
    mov bh,0x17             ;属性为蓝底白字
    int 0x10

    mov ah,0x02             ; 光标位置初始化
    mov bh,0
    mov dx,0
    int 0x10

    jmp $               ;进入死循环,不再往下执行。

    resb    510-($-$$)      ; 处理当前行$至结束(1FE)的填充
    db      0x55, 0xaa

构建文件

建立Makefile脚本文件


NASM=nasm
QEMU=qemu-system-x86_64

boot=boot
build=build

target: prepare image
    $(QEMU) -m 128  -localtime -fda $(build)/ratsos.img

image: $(build)/ratsos.img
    

$(build)/ratsos.img:
    $(NASM) -f bin -o  $(build)/ratsos.img $(boot)/boot.asm

prepare:
    ifeq ($(build), $(wildcard $(build)))
        @echo "build directory exist..."
    else
        mkdir -p $(build)
    endif

clean:
    rm -rf $(build)/*

platform:
    @echo $(PLATFORM)

结果如图

猜你喜欢

转载自www.cnblogs.com/mlzrq/p/10223028.html