常见问题      欢迎来到牛博士论文网, 本站提供、本科毕业论文范文硕士论文范文博士毕业论文范文发表职称论文范文,牛博士用心为您服务!欢迎关注微信公众号   
理工论文毕业论文分类>>
毕业论文怎么写更多写论文技巧>>
关于我们
    牛博士论文网经过十余年的心酸代写历程,我们起初的梦想逐渐变成了现实,已经发展成为了一个本科、硕士、博士研究生毕业论文代写代发为主的代写毕业论文平台。十二年专注致力于博士硕士专本科论文代写服务这一核心业务模块,让我们成为了业内有序经营时间最长的综合性论文网站之一,拥有丰富的服务经验和社会资源。合作的写作老师已有2000多位,均为有丰富实践经验的高学历专业人才,以保证文稿的质量与版权,为广大毕业生解决经济、管理、法律、医学、会计、体育、历史、教育教学、建筑等专业的毕业论文及代发代写论文等服务,强大的写作团队奠定了我们的实力! 我们相信通过我们的不断努力和追求,一定能够实现与客户的互利共赢!

BIOS中显示字符串子功能的程序框架研究

本站原创   发布时间:2018-11-16   [点击量:406]  


摘  要

借助汇编语言及纯DOS运行环境,实现字符串的显示,同时利用DEBUG跟踪程序,叙述并分析其执行过程。程序跟踪过程中,设计了字符串显示的程序段,确定了它的显示页;编写程序过程中,定义了字符串的属性;编写程序后,对程序段进行了完整注释;通过运行程序得出结论,程序能够正确运行。

实践证明:了解BIOS 10号中断的各个功能,在纯DOS情况下,设计程序过程并通过DEBUG进行程序调试,追踪每个寄存器和缓冲区的参数变化,在此过程中了解子程序调用的目的,并分析其系统框架。

关键词:BIOS;字符串显示;10号中断;DEBUG



BIOS中显示字符串子功能的程序框架研究

前  言

计算机显示器有2种显示方式:文本显示方式和图形显示方式。文本方式是将屏幕划分为若干行和列,在每个网格位置上显示像素,一个字符(如ASCII字符)是一个像素。图形方式是将屏幕划分为m×n的点阵,在每个点的位置上显示像素,一个点是一个像素。在DOS操作系统环境下,其默认的显示方式为文本显示方式,而在Win⁃dows操作系统环境下,其显示方式是图形显示方式[1]。

在常用的文本显示模式下,屏幕被划分成25行80列,行号从0~24,列号从0~79。适配器就是在这2 000个(25×80)网格位置上显示像素。在80×25的文本显示模式下显示字符串时,用一个字节存储该字符像素的ASCII码,用另一个字节存储其显示的属性,即:显示颜色。因此满屏显示2 000个字符像素时需要4 000个字节来存储一屏的显示信息[2⁃8]。

为了准确标识屏幕上的每个显示位置,本文用坐标的形式来表示显示器的行和列,并规定:行号增大的方向为y轴方向,列号增大的方向为x轴方向,显示器屏幕坐标与一般数学数轴方向不一样。

一、系统工具介绍

(一)BIOS系统及其中断介绍

BIOS(Basic Input/Output System)是基本输入输出系统,它是硬件之上的一层。为计算机提供了最基本的控制硬件方式,BIOS存储了基本的硬件信息,例如磁盘大小等,并负责引导系统。BIOS的系统具有系统加电自检、引导装入、主要I/O设备的处理、接口控制方面的系统中断等功能,且具有利用BIOS功能编写的程序特点是简洁,可读性好,易于移植的特点。

系统加电启动时,BIOS首先获得控制权,由它首先进行硬件检测,这个过程称为加点自检(POST),通常POST检测cpu、内存、磁盘、主板等等,一旦发现问题,便会提示信息或者鸣笛警告。

BIOS另外一个职责便是引导系统,BIOS加电自检完毕之后,读取CMOS中的设备引导信息,从引导设备中读取0柱面0磁头1扇区的512字节,若 512字节以55 AA(2字节)结束,则认为是引导扇区(Boot Sector),BIOS便会装载此段到地址0x7C00,执行此程序,以后的引导工作边交由引导扇区处理,BIOS便退居幕后,为系统提供基本的服务。在汇编中通过int指令产生中断,可请求BIOS服务,这篇先来介绍BIOS中断请求,不过需注意的是BIOS中断请求必须在16位实模式,或者虚拟8086模式下才可运行,进入保护模式后,中断的处理方式发生变化。

在本设计中主要研究屏幕显示子程序(INT 10)中的功能如下所示。BIOS系统中断在保护模式下是不可用的,不能在Linux中测试,因此通过boot loader程序段在虚拟机中运行程序。

入口:AH=13

AL=要写的字符如果AL=0,表示目标字符串仅仅包含字符,属性在BL中包含,不移动光标;

如果AL=1,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标;

如果AL=2,表示目标字符串包含字符和属性,不移动光标;

如果AL=3,表示目标字符串包含字符和属性,移动光标;

描述:以电传打字机的方式显示字符串

接受参数:

AH:0x13

AL:显示模式

BH:视频页

BL:属性值(如果AL=0x00或0x01)  

CX:字符串的长度

DH、DL:屏幕上显示起始位置的行、列值

ES:BP   字符串的段:偏移地址

返回值:无

显示模式(AL):

0x00:字符串只包含字符码,显示之后不更新光标位置,属性值在BL中;

0x01:字符串只包含字符码,显示之后更新光标位置,属性值在BL中;

0x02:字符串包含字符码及属性值,显示之后不更新光标位置;

0x03:字符串包含字符码及属性值,显示之后更新光标位置。

总之,可以归纳为:

|BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0| AL

BIT0为0表示不移动光标,为1表示移动光标

BIT1为0表示字符串仅包含字符,为1表示字符串包含属性

BIT2~BIT7未使用

BH=0

如果AL的BIT1为0,则BL表示显示属性。属性为:

|BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0|BL

BIT7:背景是否闪烁。0不闪烁,1闪烁;

BIT6~BIT4为背景色,分别为RGB,000为黑色,111为白色;

BIT3为1,则前景色加亮,为0则不加亮;

BIT2-BIT0为前景色,意义同背景色。

DH=7

DL=23

CX=字符串长度为5

AL=1

BL=3C

ES=显示缓冲区段号

(二)DEBUG软件介绍

DEBUG是一种计算机程序,为马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一,有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。如DOS系统中的调试程序,程序名称就叫DEBUG,在windows系统中也是极其重要的编译操作。

二、系统的概要设计

(一)系统框架图设计

1.系统结构

BIOS中断调用使用的中断类型号从5H至1FH。其功能子程序调用步骤为子程序入口参数送规定的寄存器、子程序编号送AH、执行中断指令INT N、分析、应用出口参数。本软件系统中主要调用int 10H,其主要实现显示器I/O(输入/输出)控制。int 10H中断调用共有16个功能,功能号为0~15。

根据显示器工作原理及字符显示原理,程序设计过程中借助字模提取软件,在屏幕上定位每一个显示网格的位置。本系统软件采用坐标系统,并运用相对坐标编程。所谓相对坐标,是指当前字符显示的坐标相对于前一个坐标的位置而言。相对坐标取值具体方法如下:假设图中左上角的第一个字符像素的坐标为(0,0),则其正下方的字符像素的坐标为(1,0),再向下的一个字符像素的坐标也为(1,0)。即当下一个显示字符像素向下向右移动一格时,其相对坐标为(1,1);当下一个字符像素的显示位置向上移动2格向左移动3格时,其相对坐标为(-2,-3),依此类推。

2.系统功能简介

在输入的同时,系统需要显示该字符串;一般在输入回车符后,字符串输入结束;能够删除已经输入的字符,编写一个接收字符串的输入子程序,实现上面三个基本功能。在字符串输入的过程中,字符的输入和输出是按照栈的访问规则进行了的,即后进先出。这样,就可以用栈的方式来管理字符串的存储空间,即字符串的存储空间实际上是一个字符栈。字符栈中的所有字符,从栈底到栈顶,组成一个字符串。

(二)程序段分析

系统运行的基本程序段如下所示。

org 07c00h;告诉编译器程序加载到7c00处,

mov ax, cs;ax = 代码段地址

mov ds, ax;设置数据段地址等于代码段地址

mov es, ax; es = 当前代码段地址

call print; 调用打印字符串函数

jmp $; 无限循环

print: 获取当前光标位置

mov bh, 0; 入口参数: BH(显示页号)0

mov ah, 3; 功能号: ah = 3

int 10h; 出口参数: DH/DL=光标起始行/列,在当前光标位置打印字符串

mov ax, data

mov bp, ax;es:bp = 字符串地址

mov cx, 12; cx = 字符串长度

mov ax, 01301h;功能号ah = 13(从指定位置起显示字符串), al = 01h

mov bx, 0004h; BH/BL=显示页/属性, 显示页号为 0(bh = 0), 属性黑底红字(bl = 04h);入口参数DH行和DL列,用刚才获取的当前光标位置

int 10h, BIOS 10h 号中断

ret data:db”*****”; 数据会紧跟代码

times 510-($-$$) db 0;填充至510个字节

dw 0xaa55; 扇区结束标志。

(三)程序调试及分析

利用DEBUG调试程序,设置了字符显示功能、先是自负ASCII码、页码、字符属性、重复次数、10号中断,并跳到C000:23C4。然后开启中断,并清楚方向指令。将32位寄存器压入堆栈,将堆栈指针传给BP,此时BP指向SP的基地址。之后,判断子功能号,并根据不同功能号切换位置。调用9号功能的子程序,当前视频显示方式为80列彩色文本方式。调用4983子程序,将AX内容压入堆栈,AL和01111111相与,和03相比小于则跳转到4991。将CF置1,无条件跳转,弹出AX子程序返回。该字保存与计算机连接的设备,判断显示方式,显示控制状态,显示控制指明一个显示页面的字节数,它随时视频方式的不同而变化。显示页数,每个字均表示有关显示页面内当前光标的位置,每个字的第一字节表示列,第二字节表示行(改变这个字节并不能立刻改变显示)。指明显示屏幕的当前列数,光标位置及显示列数,显示结果,5个*,恢复各个寄存器,中断返回。

系统的主程序流程是:设置字符显示表、设置显示器显示方式、调用清屏子程序、设置屏幕光标位置、调用字符串显示子程序、返回操作DOS操作系统。显示字符串的流程是:保护寄存器内容压入堆栈、循环次数送CX、从字符表中取字符串显示的相对坐标给DH、DL。若没有超出显示屏,则调用Int 10H的2号功能移动光标位置、调用Int 10H的9号功能显示字符串、返回操作DOS操作系统、循环次数若没有结束,则继续返回从字符表中取字符显示的相对坐标给DH、DL;若超出显示屏,则寄存器内容弹出堆栈。并返回。

系统程序运行过程中需要注意一些事项:

(1)注意显示器屏幕坐标的方向问题。它与一般数学坐标方向不一样,且显示器的“行”对应y轴,显示器的“列”对应x轴,编程时要牢记,以免仿真出现乱码。

(2)本软件系统编程采用的是相对坐标的形式编写,使程序的移植性增强,方便借助字模提取软件定位显示器屏幕光标的位置。因此,编程时要注意不同图案之间的相对位置变化,即注意相对坐标的变化问题。若不采用相对坐标,当显示像素较多时,比较难以定位屏幕光标位置,容易造成屏幕显示混乱。

(3)对于图形显示方式,程序员不要用直接操作显示缓冲区的办法来改变显示像素的属性,最好是通过BIOS的中断功能调用实现相应的功能,这样,所编写的程序能方便地适应不同的图形显示模式。

结束语

仿真结果证明,BIOS的中断功能调用能够很好地控制显示器的输入/输出,熟练掌握BIOS中断功能调用,可以降低对计算机基本硬件控制编程的难度。



参考文献

[1] 戴梅萼,史嘉权.微型计算机技术及应用[M].4版.北京:清华大学出版社,2008.

[2] 朱清慧,陈绍东,徐志强.基于图形液晶显示器的汉字显示系统设计与仿真[J].液晶与显示,2009,24(5):692⁃697.

[3] 孙德文.微型计算机技术[M].北京:高等教育出版社,2006.

[4] 周杰英,张萍,郭雪梅.微机原理、汇编语言与接口技术[M].北京:人民邮电出版社,2011.

[5] 张智,袁庆霓.BIOS安全检查系统设计与实现[J].计算机技术与发展,2012(2):172⁃175.

[6] 王志军,杨延军,王道宪.微机原理实验课程内容的层次化设计[J].实验室研究与探索,2012(1):105⁃107.

[7] 刘丽莉.汇编语言程序设计[M].北京:北京大学出版社,2010.

[8] 杨延双,魏坚华,张晓冬.微机原理及汇编语言教程[M].2版.北京:北京航空航天大学出版社,2010.

[9] 吕升旭,郑阿奇.汇编语言实用教程[M].北京:电子工业出版社,2011.

[10] 程学先,林姗,程传慧.汇编语言程序设计[M].北京:机械工业出版社,2009.

文章标题:《 BIOS中显示字符串子功能的程序框架研究 》,原文地址:,如有转载请标明出处,谢谢。

上一篇:基于Android的拆卸砖块游戏的开发


下一篇:python数字手写识别系统的设计与实现


[相关文章]