目录
清屏
需要的工具
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)
结果如图