清屏

需要的工具

qemu: qemu

BIOS中断清屏

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

1. BIOS中断滚屏

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

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

例如:使用蓝底白字清屏

Clear_Screen: ;清除屏幕	
    mov ah,0x06								
    mov al,0
    mov cx,0   
    mov df,0xffff  
    mov bh,0x17				;属性为蓝底白字
    int 0x10

2. BIOS中断设置光标位置:

中断 int 10h

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

入口参数:

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

例如:设置光标到第一行第一列

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

实现

1. 代码

boot.asm内容如下

;ratsos
[bits 16]

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

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

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

Fin:
	hlt
    jmp Fin				;进入死循环,不再往下执行。

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

编译成ratsos.ima镜像文件。

创建run.sh脚本

#!/bin/bash

NASM=nasm
QEMU=qemu-system-x86_64

$NASM -f bin -o ratsos.ima boot/boot.asm
$QEMU -m 128 -rtc base=localtime -fda ratsos.ima

运行

结果如图

代码地址

https://github.com/sxt102400/ratsos/tree/master/chapter2.4

 posted on 2019-01-04 23:27  猛练自然强  阅读(1270)  评论(0编辑  收藏  举报