2.4 清屏

本文详细介绍了如何使用BIOS中断进行屏幕清理和光标位置设置,包括具体的寄存器操作和实例代码。通过INT 10H指令,可以实现屏幕滚动清屏效果及光标初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

清屏

需要的工具

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

运行

结果如图

1573351-20190303183353672-1228217651.png

代码地址

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

转载于:https://www.cnblogs.com/mlzrq/p/10223028.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值