X86架构(六)——光标控制

2024-09-05 04:28
文章标签 x86 架构 控制 光标

本文主要是介绍X86架构(六)——光标控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

光标(Cursor)是在屏幕上有规律地闪动的一条小橫线,通常用于指示下一个要显示的字符位置。
光标在屏幕上的位置保存在显卡内部的两个光标寄存器中,每个寄存器是8位的,合起来形成一个16位的数值。标准VGA文本模式是25 行,每行80个字符。所以,0表示光标在屏幕上第0行第0列,80表示它在第1行第0列,这样算来,当光标在屏幕右下角时,该值为25×80-1=1999
光标寄存器是可读可写的

取当前光标位置

显卡的操作非常复杂,内部的寄存器很多。为了不过多占用主机的I/O空间,很多寄存器只能通过索引寄存器间接访问
索引寄存器的端口号是0x3d4,向它写入一个值,用来指定目标内部寄存器
两个8位的光标寄存器,其索引值分别是0x0e和0x0f,分别用于提供光标位置的高8位低8位
光标寄存器的读写控制通过数据端口0x3d5指定

;程序清单_1
mov dx, 0x3d4	;索引寄存器端口
mov al, 0x0e
out dx, al		;指定操作寄存器索引
mov dx, 0x3d5	;数据端口
in  al, dx		;读出0x0e寄存器的值
mov ah, al		;8位传送到ah寄存器mov dx, 0x3d4
mov al, 0x0f
out dx, al
mov dx, 0x3d5
in  al, dx		;ax寄存器中的数值此时是光标数据位置 ah+al

处理回车和换行字符

ASCII码0x0d是回车,0x0a是换行
回车和换行的概念最早起源于老式打字机。那种打字机上有滚筒,用于使纸张上下卷动,每敲击一个按键,字车往右移动一格,位于下一个可打印的位置。在这种设备上,将字车推到最左边,也就是一行的开始,叫做回车(Carriage Return);而拧一下滚筒,将纸上卷一行,叫做换行(Line Feed)。
如果是回车符0x0d,应将光标移动到当前行的行首。每行有80个字符,用当前光标位置除以80,余数不要,就可以得到当前行的行号。接着,再乘以80,就是当前行行首的光标数值。

;程序清单_2
;该程序接程序清单_1
mov bx, ax	;ax寄存器中存储着当前光标的位置
mov ax, bx	;16位除法,被除数在ax寄存器中
mov bl, 80	;除数
div bl		;商在al中余数在ah中
mul bl		;结果在ax中
;mul 是乘法指令
;mul r/m8  ax = al * r/m8     8位乘法,结果16;mul r/m16 dx:ax = ax * r/m16 16位乘法,结果32位
mov bx, ax
jmp __set_cursor

如果是换行符0x0a,应将光标向下移动一行

;换行处理
;接程序清单_2
cmp cl, 0x0a	;字符存储在cl寄存器中
add bx, 80		;cl = 0x0a bx存储的当前光标位置
jmp __roll_screen

设置光标位置

;光标设置
__roll_screen:cmp bx, 2000jl __set_cursor	;bx小于2000不需要滚屏mov ax, 0xb800	;0xb800显存映射的内存地址;滚屏;将屏幕上第225 行的内容整体往上提一行;最后用黑底白字的空白字符填充第25行mov ds, axmov es, axcldmov si, 0xa0	;第二行第一列的显存偏移地址(一行80个字符,用两个字节控制)[ds:si]mov di, 0x00	;目的偏移地址 [es:di]mov cx, 1920	;传送字节数 24 * 80 * 2 / 2rep movsw		;使用movsw传送所以除以2mov bx, 3840	;25行显存偏移地址 24 * 80 * 2mov cx, 80		;传送字数
__cls:mov word[ex:bx], 0x0720add bx, 2loop clsmov bx 1920		;滚屏后光标位置对应的数值(最后一行第一列)
__set_cursor:mov dx, 0x3d4mov al, 0x0eout dx, al		;指定操作寄存器mov dx, 0x3d5mov al, bh		;光标位置高8位out dx, al		;写入数据端口mov dx, 0x3d4mov al, 0x0fout dx, almov dx, 0x03d5mov al, bl		;光标位置低8位out dx, al		;写入数据端口

这篇关于X86架构(六)——光标控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137941

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激