屏幕光标控制

光标的定义

  1. 所谓光标直观上就是,我们打字时出现在屏幕上一闪一闪的“短横线”(或“竖线”),但它的主要目的是指出,我们写入和删除会作用的位置,也就是定位。
  2. 光标的定位使用坐标,从左上角开始,这里按照习惯定义“列”为X轴,“行”为Y轴。按照规定,每一行可以容纳80个字符,也就值整个屏幕可以显示80列的ASCII码。每一页可以从事显示25行。也就是总共25*80个字符。
  3. 一般0表示 0行0列, 79表示0行79列,80表示1行0列。

读取和控制光标位置

  1. 索引寄存器

与光标进行交互的寄存器存在于显卡中,它的交互与硬盘有所不用,需要通过索引寄存器间接与寄存器进行通讯。其索引寄存器的端口号为0x3d4。通过向这个端口号写入不同的值,就可以和不同的寄存器进项交互。如,如果要访问8位的光标寄存器,我们就要输入14(0x0e)15(0x0f),分别表示与高8位或低8位交互。

  1. 数据读取寄存器

定义好我们要交互的寄存器后,我们还需要通过端口号为0x3d5的寄存器与光标进行数据交互。

取位置

mov dx, 0x3d4   ;读取高八位
mov al, 0x0e
out dx, al
mov dx, 0x3d5
in ah, dx

mov dx, 0x3d4 ;读取第八位
mov al, 0x0f
out dx, al
mov dx, 0x3d5
in al, dx

mov bx, ax ;此时ax中就储存了光标的全部位置信息

操作光标

可以理解为取光标的逆过程,这里接上文。假设我们输出数据时遇到了一个换行符,我们就需要将光标移动到下一行开头。
注意: 显卡是不会自动在换行符处换行的,这需要我们自己写命令进行换行

;首先,计算光标下一行开头的位置
mov di, 80
div di			;光标位置除80,余数不要。除数表示光标下一行,因为第一行记为0。
mul di			;商乘以80,求出所需结果
mov bx, ax ;计算后的光标位置

;把结果通过寄存器写入
mov dx, 0x3d4
mov al, 0x0e ;高位
out dx, al
mov dx, 0x3d5
mov al, bh
out dx, al

mov dx, 0x3d4
mov al, 0x0f ;低8位
out dx, al
mov dx, 0x3d5
mov al, bl
out dx, al

这样光标的位置就刷新了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值