微机原理课29讲教案主讲人许文丹.docx

上传人:b****8 文档编号:10125447 上传时间:2023-02-08 格式:DOCX 页数:20 大小:24.61KB
下载 相关 举报
微机原理课29讲教案主讲人许文丹.docx_第1页
第1页 / 共20页
微机原理课29讲教案主讲人许文丹.docx_第2页
第2页 / 共20页
微机原理课29讲教案主讲人许文丹.docx_第3页
第3页 / 共20页
微机原理课29讲教案主讲人许文丹.docx_第4页
第4页 / 共20页
微机原理课29讲教案主讲人许文丹.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

微机原理课29讲教案主讲人许文丹.docx

《微机原理课29讲教案主讲人许文丹.docx》由会员分享,可在线阅读,更多相关《微机原理课29讲教案主讲人许文丹.docx(20页珍藏版)》请在冰豆网上搜索。

微机原理课29讲教案主讲人许文丹.docx

微机原理课29讲教案主讲人许文丹

微机原理课29讲教案主讲人许文丹

显示器与打印机接口

§7-6-1显示器I/O

显示器可通过两种适配器板连接到IBMPC机上。

单色显示和并行打印机适配器连接IBM单色显示器和并行打印机。

彩色/图形监视器适配器连接监视器或标准的电视机(彩色TV或黑白TV)。

单色适配器只能显示字符,只能用于黑白显示器。

字符由标准字母、数字和符号组成,加上一些简单的图形,如菱形、矩形及笑脸等符号。

显示器的屏幕被划分成80列25行,适配器就是在这个2000个(25×80)网格位置上显示字符。

屏幕上的每个网格位置也称为一个“象素”。

对应屏幕上的每个象素,存储器中都有一毡相应单元,因此我们说屏幕是“存储器映象”的。

这种存储器映象,使显示器电路很容易知道哪个单元的内容对应屏幕上哪个位置。

属性

单色显示屏幕上的每个字符在存储器中由两个字节表示,一个字节保存字符的ASCII码,另一个字节保存字符属性。

字符的属性确定了每个模显示字符的特性,如字符是否闪烁显示,是否被加亮,是否反相显示。

属性可以有不同的组合,例如可以在屏幕是显示白底黑字(反相显示)代替通常的黑底白字。

正常的属性是07(二进制00000111)即背景为黑色(000),前景为白色(111),而闪烁位为正常(0),加强亮度位也是正常(0)。

为改变成反相显示,必须使背景为白色(111),前景为黑色(000),所以属性字节的值应为70,即二进制01110000。

如果想要黑底白字及闪烁显示,属性值应为87(10000111)。

背景为000,前景为001,这种组合可产生下划线。

属性值可以任意组合,下面是一些典型的属性值。

二进制十六进制效果

0000000000不显示

0000000101黑底白字,下划线

0000011107黑底白字,正常显示

000011110F黑底白字,高亮度

0111000070白底黑字,反向显示

1000011187黑底白字,闪烁

11110000F0白底黑字,反向闪烁

屏幕上的字符可以按相同的属性显示,也可以按不同的属性显示,如果你设置的属性为00H,字符就是显示不出来。

单色屏幕有2000D个字符位置(25×80),因每个字符需要两个字节表示,所以单色显示存储容量为4K字节。

单色显示存储器安排在段地址为B000H区域,偏移地址从0到0F9FH。

BIOS显示中断

下面列出了中断类型10H的部分显示操作及所用的寄存器。

AH功能调用参数返回参数

1置光标类型(CX)0-3=光标开始行

(CX)0-3=光标结束行

2置光标位置(BH)=页号

(DH)=行

(DL)=列

3读光标位置(BH)=页号CH=光标开始行

CL=光标结束行

DH=行

DL=列

6屏幕初始化AL=上卷行数

或上卷AL=0全屏幕为空白

BH=卷入行属性

CH=左上角行号

CL=左上角列号

DH=右下角行号

DL=右下角列号

7屏幕初始化AL=下卷行数

或下卷AL=0全屏幕为空白

BH=卷入行属性

CH=左上角行号

CL=左上角列号

DH=右下角行号

DL=右下角列号

8读光标位置BH=显示页AH=属性

的属性和字符AL=字符

9在光标位置BH=显示页

显示字符及AL=字符

其属性BL=属性

CX=字符重复次数

A在光标位置BH=显示页

只显示字符AL=字符

CX=字符重复次数

 

控制光标

光标不是ASCII字符表中的字符,计算机有专门的硬件来控制光标。

我们熟悉的光标一般是一个下划线或方块符。

利用INT10H的功能1使光标显现或关闭。

这个功能也控制光标行的开始和结束,也就是说控制光标的大小。

表示光标行开始和结束的数据分别放在CH和CL的低四位(0~3),当CH的第4位为1时,光标不显现出来(关闭);当第4位为0时,光标在屏幕上显现出来。

单色显示器的光标大小的范围从0到13。

INT10H的功能2设置光标位置。

光标新位置的行号设在DH寄存器中,列号设在DL中。

行号设在(0,0)是屏幕的左上角,(24,79)是屏幕的右下角。

BH中必须包含被输出的页号,对单色显示器来说,页号总是0。

例:

置光标开始行为5,结束行为7,并把它设置到第5行第6页。

MOVCH,5;Beginningofcursorandturnon

MOVCL,7;Endofcursor

MOVAH,1;definecursor

INT10H;callBIOS

MOVDH,4;row5

MOVDL,5;column6

MOVBH,0;page0

MOVAH,2;placecursor

INT10H;callBIOSroutine

读光标位置

10H的功能3是读光标位置,页号必须在BH中指定。

此功能把光标位置的行号回送给DH,列号回送给DL。

光标大小的参数填入CH和CL,也就是说,在CH和CL中回送的是用功能1设置的光标参数。

例:

读0页的当前光标位置。

MOVAH,3

MOVBH,0

INT10H

清屏和卷屏

10H的功能6能使屏幕内容上卷指定的行,这个功能需要设置7个参数。

如果屏幕的起始行列不为(0,0),结束行列不为(24,79),则屏幕只有指定的一部分具有上卷的功能,这个屏幕上的部分区域我们叫做窗口(、Window),像这样的窗口我们可以在屏幕上设置多个,这些窗口都可独立使用。

如果上卷超过指定窗口的顶部,这些行的内容就被丢失,出现在窗口底部的新行被填为空格,其属性由BH寄存器决定。

如果AL=0,则实际完成的工作是清除屏幕的功能,它将按AL中的BLANK字符(0)使指定的窗口为空白。

10H的功能7和功能6类似,也能使屏幕(或窗口)初始化或使屏幕(或窗口)的内容下卷指定的行。

它的其它参数的设置与功能6一样。

例:

清除左上角为(0,0),右下角为(24,39)的窗口,初始化为反向显示,该窗口相当于全屏幕的左半部分。

MOVAH,7;scrolldownwardfunction

MOVAL,0;codetoblankscreen

MOVBH,70H;reversevideoattribute

MOVCH,0;upperleftrow

MOVCL,0;upperleftcolumn

MOVDH,24;lowerrightrow

MOVDL,39;lowerrightcolumn

INT10H;videoROMcall

下面我们编写一个完整的程序在PC机上运行。

此程序在屏幕的中间建立一个20列宽和9行高的窗口,然后把键入的内容显示出来。

键按入的字符将被显示在窗口的最下面一行,每当输入20个字符,该行就向上卷动,9列字符输入完后,顶端行的内容丢失。

例:

在屏幕中心的小窗口显示字符。

;WINDOW--Demonstratesvideowindowfunction

;keyboardwritesintoawindow20charswide

;and9charshighinmiddleofscreen

;-------------------------

programsegment

assumecs:

program

pushds

subax,ax

pushax

;clearscreen,usingscrollupfunction

movah,6

moval,0

movch,0

movcl,0

movdh,24

movdl,79

movbh,7

int10h

;positioncursoratbottomofwindow

pos_cursor:

movah,2

movdh,16

movdl,30

movbh,0

int10h

getcharactersfromkeyboard

movcx,20

get_char:

movah,1

int21h

cmpal,3

jzexit

loopget_char

;scroollup

movah,6

moval,1

movch,8

movcl,30

movdh,16

movdl,50

movbh,7

int10h

jmppos_curse

exit:

ret

programends

;--------------------------------

end

此程序使用了几种ROM显示例行程序:

清除屏幕,光标定位和上卷。

如果在屏幕上同时有几个窗口工作,就要分别清除它们,这可通过设置不同的左上角坐标和右下角坐标来完成。

字符显示

10H的功能9和功能A都能把一个字符传送到显示屏幕,然后光标返回到它的初始位置上。

这两种功能的区别是:

AH=9的功能把字符及其属性输出到当前光标位置上。

而AH=OAH的功能只输出字符,它的属性值就是这一位置上先前一具有的属性。

0AH功能在使用黑白显示器时特别方便,因为此时我们很少改变显示的属性。

例:

置光标到0显示页的(20,25)位置,并以正常属性显示一个星号‘*’。

MOVAH,2

MOVBH,0

MOVDH,20

MOVDL,25

INT10H

MOVAH,9

MOVAL,‘*’

MOVBH,0

MOVCX,1

INT10H

10H的功能8读取当前光标位置及属性。

例:

在0显示页的(11,0)位置读取字符和属性。

MOVAH,2

MOVBH,0

MOVDH,0

INT10H;videoROMcall

MOVAH,8;readcharandatter

MOVBH,0;page0

INT10H;videoROMcall

DOS显示功能调用

表7-7为INT21H的显示操作,其中有两个是显示单字符的功能,另一个是显示字符串功能,这些功能都能自动向前移动光标。

表7-7DOS显示操作(INT21H)

AH功能调用参数

2显示一个字符(检验Ctrl_Break)DL=字符光标跟随字符移动

6显示一个字符(不检验Ctrl_Break)DL=字符光标跟随字符移动

9显示字符串DS:

DX=串首址光标跟随字符移动

串必须以‘$’结束

AH=9的功能是显示字符串,它要求被显示输出的字符必须以$字符(24h)作为定界符,此功能是用$作为标记来计算串的长度的。

有些ASCII码,如控制码,不能出现该字符串。

显示字符串时,如果希望光标能自动换行,那么可在字符串结束之前加上回车和换行的ASCII码。

MESSAGEDB‘THESORTOPERATIONISFINISHED。

’,13,10,‘$’

要显示输出的信息一般定义在数据段。

输出该字符串的指令为:

MOVAH,9

MOVDX,SEGMESSAGE

MOVDS,DX

MOVDX,OFFESTMESSAGE

INT21H

使用赋值伪操作可以使程序的可读性更好,另外也可以根据显示格式的要求使用TAB符,TAB的ASCII码为09。

CREQU13(或CREQU0DH)

LFEQU10(或LFEQUOAH)

TABEQU09

MESSAGEDBTAB‘THEsortoperationisfinished。

DBCR,LF,‘$’

使用INT21H显示字符串,一定要在显示串之后加上定界符$,丢失定界符可能会在屏上引起意想不到的后果。

§7-6-2打印机编程

击打式的字符打印机大都实现全字符打印,即整个字符由一次打印动作完成,这种打印机的字迹清晰,还能提供点划线、阴影、粗体字符等,速度在每分钟1000行左右。

随着打印机字符种类的增加,特别是打印图形和汉字的需要,发展了点阵式打印机。

点阵式打印机的字符是以点阵形式构成的,一般是7*7或9*9的点阵。

它可打印出点阵图形,斜体字,粗体双线字符以及笑脸、心形等字符。

激光打印机既具有点阵打印机的图形功能,也能打印出和字符打印机一样的高质量字符。

打印机的接口有并行接口,即一次从处理器接收8位代码,还有串行打印接口,即每次从处理器接收一位代码。

IBMPC适用并行接口。

许多打印机都具有存储几千个字符的缓冲(组成缓存器)。

一台打印机必须能识别并处理从处理器来的信号,如换页,换行或列表符(TAB)。

处理器也必须能理解从打印机发来的表示忙或者纸出界等信号。

不同类型的打印机可以响应从处理器来的不同的信号,这给打印机与接口的程序设计造成一些困难,所以在编写打印机程序之前,必须先了解连接在计算机上的打印的型号,认真查阅打印机的技术手册,但是就打印机的处理过程而言,它比屏幕处理、磁盘处理都要简单,它只涉及到很少的一些操作,既能用DOSINT21H来实现,也能用BIOSINT17H来实现。

表7-8是有关打印机I/O的中断操作。

表7-8打印机I/O中断

INTAH功能调用参数返回参数

21H5打印一个字符DL=字符

17H0打印一个字符AL=字符AH=状态字节

并回送状态字节DX=打印机号

17H1初始化打印机DX=打印机号AH=状态字节

回送状态字节

17H2回送状态字节DX=打印机号AH=状态字节

DOS打印功能

INT21H的功能5把一个字符送到打印机,字符必须放在DL寄存器中,这是唯一的DOS打印功能。

如果需要回车,换行等打印功能,必须由汇编语言程序送出回车、换行等字符码。

下面的功能段是送一个字符给打印机,为了连续打印,还指定了打印的字符数。

当然也可以用指定的结束符来代替计数控制的方法。

TEXTDB‘hello,everybody!

COUNTEQU$-NEXT

.

.

.

MOVCX,COUNT

MOVBX,0

NEXT:

MOVAH,5;requestprintfunction

MOVDL,TEXT[BX];charactertoprint

INT21H;callDOS

INCBX

LOOPNEXT

这些指令也适用于发送打印控制字符。

例如TEXT字符串定义如下:

TEXTDB0CH,‘HELLO,everbody!

‘,0dh,0ah,0ah

字符串中的第一个字符是换页码(och),最后两个字符是换行码(0ah)。

用上面的指令把TEXT在打印机上输出,则字符串打印在新的一页的顶部,并余下文有两个空行的距离。

下面我们来介绍打印机的标准控制字符和特殊控制字符。

打印机的控制字符

打印机的标准控制字符如下:

十进制十六进制功能

0808空格

0909水平Tab(横表)

100A换行

110B垂直Tab(纵表)

120C换页

130D回车

水平TAB(09h)仅当打印机有此功能并被设置成打印机TAB状态时才有效。

换行命令使打印机向前空走一行,若连续用两次换行命令,则会空出两行。

当打印机加电启动后,打印头在一页纸的顶部位置。

打印机打印时,记下所打印的行数,并检查是否到了一页的最大行数(如55行/页),如果打印了最后一行,就执行一个换页命令(0ch),然后再把行计数器置成0。

一般显示器遇到显示文件中的TAB字符(09),就把当前的光标位置移到8,16,24,…..等字符位置上。

但许多打印机并不认识TAB字符,若要打印一个ASCII码文件(如汇编语源程序),就必须检验送到打印机的每个字符,若该字符是TAB,就要插入空格,使下一个字符的位置在8,16………等。

形成TAB终止位置的方法由下面三个例子来说明。

当前打印的位置:

1921

二进制数:

00000010000100100010101

清最右边的三位:

00000000000100000010000

加8:

000010000001000000011000

新的TAB终止位置:

81624

以下程序是一个能打印ASCII文件的子程序(PRTASC)。

它的基本是把已读到输入缓冲区(recarea)中的字符送到一个打印区(prtline),并检查行尾、文件尾,处理换行符和TAB符。

;printinganASCIIfile

dsegsegment

recareadb512dup(‘‘);inputareaforASCIIfile

prtlinedb82dup(‘’);printline

countdw0

dsegends

csefgsegment

assumecs:

cseg,ds:

dseg,es:

dseg

mainprocfar

pushds

subax,ax

pushax

movax,dseg

movds,ax

callprtasc

ret

mainendp

;transferdatatoprintline:

prtascprocnear

cld

leasi,reccarea

p10:

leadi,partline

movcount,0

p20:

leadx,recarea+512

cmpsi,dx

jep70

p30:

movbx,count

cmpbx,80

jbp40

movwordptr[di+bx],odoah

addcount,2

callsubprt

leadi,prtline

movcount,0

movbx,0

p40:

lodsb

mov[di+bx],al

Incbx

Cmpa1,0ah

Jnep70

Cmpa1,oah

Jnep50

Callsubprt

Jmpp10

P50:

cmpa1,09

Jnep60

Decbx

Movbuteptr[di+bx],20h

Andbx,0ff8h

Addbx,08

P60:

movcount,bx

Jmpp20

P70:

movbx,count

Movbx,count

movbyteptr[di+bx],0ch

callsubprt

ret

prtascendp

;--------------------------------------------------------------------

subprtprocnear

movcx,count

inccx

movbx,0-

next:

movah,5

movdi,prtline[bx]

int21h

incbx

loopnext

movax,2020h

movcx,41

leadi,prtline

repstows

ret

subprtendp

;------------------------------------------------------------------------------

csegends

endmain

特殊的打印命令

我们已经讨论了打印机基本控制命令的使用。

还有一些命令包括:

一些命令需要和ESC(1BH)字符一起使用,这些命令是:

1B30设置每英寸为8行

1B32设置每英寸为6行

1B45设置加重打印方式

IB46设置加重打印方式

我们可以用两种不同的方式把命令码发送给打印机。

1.在数据区中定义命令码。

下下述数据区中的命令是设置紧缩方式,每寸8行,打印一个标题,并发送回车、换行字符。

HEADDB0FH,1BH,30H,’TITLE…..’,0DH,0AH

2.直接用命令方式

MOVAH,05

MOVDL,0FH

INT21H

上面的指令使以后打印的字符都是以紧缩方式打印,只有当程序发送取消此方式的命令后,采变成正常的方式进行打印。

上述这些特殊命令并不适用于所有型号的打印机,这就需要查阅打印机手册,看其是否具有执行这些特殊命令的功能。

BIOS打印功能

BIOS17H中断指令提供了由AH寄存器指定的三种不同的操作。

BIOS中断17H的功能0是打印一个字符的功能。

要打印输出的字符放在AL中,打印机号放在DX中,BIOS最多允许连接三台打印机,机号分别为0、1、和2。

如果只有一台打印机,那么就是0号打印机,打印机的状态信息

被回送到ah寄存器。

MOVAH,0

MOVAL,CHAR

MOVDX,0

INT17H

17H的功能1初始化打印机,并回送打印机状态到AH寄存器。

如果把打印机开关关上然后又打开,打印机各部分就复位到初始值。

此功能和打开打印机时的作用一样。

在每个程序的初始化部分可以用17h的功能1来初始化打印机。

MOVAH,01

MOVDX,0

INT17H

这个操作要发送一个换页符,因此这个操作能把打印头设置在一页的顶部。

对于大多数打印机,只要一接通电源,就会自动地初始化打印机。

打印机忙(PRITERBUSY)表示打印机正在接收数据,活正在打印,或处于脱机状态。

应答位(acknowledge)表示打印机已发出一个表明它已经接收到数据的信号。

选择位(select)表示打印机是联机的。

超时位(timeout)表示打印机发出忙信号很长一段时间了,系统将不在给它传送数据。

表示打印机出错的是第5位(纸出界)或第3位(I/O错)为1,如果打印机没有接上电源,没有装上纸或者没有联机,而打印程序已开始运行,这时显示器的指示光标会不停的闪烁,当接通打印机的电源后,某些输出数据就会丢失。

如果在打印程序中先安排指令测试打印机的状态,则BIOS操作就会返回状态码,(DOS打印操作是自动进行测试的,但对各种情况都显示一个“纸出界”的信息)。

当打印机接通电源后,即开始正常打印,而且不会丢失任何数据。

下面我们应用前面介绍的BIOS和DOS功能调用,编写一个简单的打字程序。

它要求把从键盘上接收的字符显示在屏幕上,并由打印机输出,在键盘上按下CTRL_C键即退出程序。

Prog_stacksegmentstack‘stack’

Db64dup(‘stack…’)

Prog_stackends

;------------------------------------------

prog_datasegment‘data’

inchardb20dup(?

prog_dataen

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1