《第一篇汇编语言16位汇编[003]》由会员分享,可在线阅读,更多相关《第一篇汇编语言16位汇编[003](17页珍藏版)》请在金锄头文库上搜索。
1、跟我一起学编程系列课程:跟我一起学编程系列课程:第一篇汇编语言第一篇汇编语言1616位汇编位汇编 第四节输入输出与中断 输入输出的基本概念输入输出的基本概念 查询方式传送数据 中断 基本输入输出系统BIOS 软中断处理程序举例 第三部分汇编语言程序设计基础第三部分汇编语言程序设计基础回顾:计算机的构成1.CPU2.主板3.内存4.硬盘5.显卡6.显示器7.光驱8.键盘9.鼠标10.机箱11.电源12.网卡13.声卡14.其他外设显示器键盘鼠标机箱光驱输入输出的基本概念1、 I/O端口地址和I/O指令每种输入和输出设备都要通过一个硬件接口或者控制器和CPU相连。打印机,显示器,键盘鼠标等。从程序
2、设计的角度来看,接口由一组寄存器组成,是完成输入输出的桥梁。程序利用I/O指令,存取接口上的寄存器,获得外部设备的状态信息,控制外部设备的动作,从而实现输入和输出。1. I/O端口地址为了存取接口上的寄存器,系统给这些寄存器分配专门的存取地址,这样的地址称为I/O端口地址。某些微型机上,I/O端口地址和存储单元地址统一编址。相当于把I/O接口视为一个或几个存储单元,利用存取内存单元的指令就可以取接口上的寄存器。 缺点:占用有限的内存单元,延长外部设备与处理器进行数据交换的时间。8086 I/O地址和存储单元的地址是各自独立的,分别占用两个不同的地址空间。8086提供I/O端口地址空间64K个8
3、位端口,或可接32K个16位端口。实际只使用了03FFH之间的I/O端口地址,只占整个I/O地址空间很少一部分。输入输出的基本概念1、 I/O端口地址和I/O指令8086PC机内存地址空间分配3FFH输入输出的基本概念2. I/O指令由于8086的I/O端口地址和内存单元地址是独立的,所以要用专门的I/O指令来存取端口上的寄存器,即专门的I/O指令进行输入和输出。I/O指令属于数据传送指令组(1)输入指令IN 累加器,端口地址输入指令从一个输入端口读取一个字节或一个字,传送至AL(若是一个字节)或AX(一个字)。端口地址可以采用直接方式表示,也可以是间接方式。直接方式:端口地址仅为8位立即数,
4、0255之间。间接方式:端口地址存放在DX寄存器,可以是16位IN AL,PORT ;AL=PORTIN AX,PORT ;AX=(PORT+1:PORT)例:IN AL,21HIN AL,DX ;AL=(DX)IN AX,DX ;AX=(DX+1:DX)例:MOV DX,2FCHIN AX,DX注意:当端口n输入一个字时,相当于同时从端口n和n+1分别读取一个字节。如果两条指令连续执行,相当于从端口2FCH输入一个字节送入AL,从2FDH输入一个字节送入AH。输入输出的基本概念(2)输出指令OUT 端口地址,累加器输出指令将AL或AX输出到指定端口。其他和输入指令类似OUT PORT,AL
5、;(PORT)=ALOUT PORT,AX ;(PORT+1:PORT)=AXOUT DX,AL ;(DX)=ALOUT DX,AX ;(DX+1:DX)=AX注意:当端口n输出一个字时,相当于向端口n输出AL中的内容和向端口n+1输出AH中的内容。例如下面的程序片段向2FCH端口输出23H,向2FDH端口输出45H:MOV AX,4523HMOV DX,2FCHOUT DX,AX输入输出的基本概念2 、数据传送方式1.CPU与外设之间交换的信息包括数据,控制和状态信息,都是通过IN和OUT指令在数据总线上进行传送,所以通常采用分配不同端口的方法将他们加以区别。数据是CPU和外设真正要交换的信
6、息。数据通常为8位或16位,可分为各种不同类型。不同的外设要传送的数据类型也是不同的。控制信息输出到I/O接口,告诉接口和设备要做什么工作。从接口输入的状态信息表示I/O设备当前的状态。在输入数据前,通常要先取得表示设备是否已准备好的状态信息;在输出数据前,往往要先取得表示设备是否忙的状态信息。2.数据传送方式(1)无条件传送方式不需要查询外设的状态,即已知外设已准备好或不忙时,可以直接使用IN或OUT指令实现数据传送。这种方式软件实现简单,只要指令中指明端口地址,就可以连通指定外设进行输入和输出。(2)查询方式查询方式适用于CPU与外设不同步的情况。输入之前,查询外设数据是否已准备好,若数据
7、已准备好,则输入;否则继续查询,直到数据准备好。输出之前查询设备是否忙或不忙,等待到外设准备好时才能输入或输出数据,通常外设速度远远慢于CPU速度,于是查询过程将花费大量时间。输入输出的基本概念(3)中断方式为了提高CPU的效率,可采用中断方式。当外设准备好时,外设向CPU发出中断请求,CPU转入中断处理程序,完成输入输出工作。(4)直接存储器传送(DAM)方式由于高速I/O设备(硬盘等)准备数据的时间短,要求传输速度快,采用DAM直接存储器传送方式,即直接交换数据。这种方式是成组进行的。其过程是:先把数据在高速外设中存放的起始位置。数据在内存存储器中存放的起始地址、传送数据长度等参数输出到连
8、接高速外设的接口(控制器),然后启动高速外设,设备准备开始直接传送数据。当高速外设直接传送准备好之后,向处理机发送一个直接传送的请求信号,处理机以最短实际批准进行直接传送。并让出总线控制权,高速外设在其控制器控制下交换数据。数据交换完毕后,由高速外设发出“完成中断请求”,并交回总线控制权。处理机响应上述中断,由对应的中断处理程序对高速外设进行控制或对一节传送的数据进行处理,中断返回后,原程序继续运行。计算机结构计算机结构1.典型的冯.诺伊曼结构:(巴贝奇的分析机原理)2.以存储为中心计算机结构数据线控制线控制线反馈线数据线输入输出的基本概念3 、存取RT/CMOS RAM1.关于RT/CMOS
9、 RAMIBM及其兼容机都有RT/CMOS RAM芯片,即互补金属氧化物半导体随机存取存储器,不仅可以长期保存系统配置状况,而且记录包括世纪,年,月,日和时分秒在内的实时钟信息。(real-time-clock)拓展:在PC机当中,有一个CMOS RAM芯片,我们一般简称为CMOS,这个芯片的特征如下所示1、包含一个实时钟和一个有128个存储单元的RAM存储器,关机后其内部的实时钟还是可以正常工作的,RAM当中的信息不会丢失2、这个芯片常保存计算机基本启动信息(如日期、时间、启动设置等)的芯片,其实CMOS是主板上的一块可读写的并行或串行FLASH芯片,是用来保存BIOS的硬件配置和用户对某些
10、参数的设定3、又称BIOS存储器,是电脑主板上的一种存储器,用于存储开机、初始化基本设备的信息,由主板BIOS调用其存储资料,最后由BIOS将电脑管理权交给操作系统4、主板电池是用于记录计算机系统的时间,也就是维持系统时钟的准确性,电量不够时,时间会回到出厂日期,还有记录启动时要用的硬件信息,也就是维持CMOS的BIOS信息。主板电池在我们使用的过程中没有电的情况下是可以充电的。如果主板电池没电了,电脑两天不开机,开机后系统时间不是准确的时间,会回到主板生产的时间,电量不足了,系统时间会变慢,比如现在是2013年1月1日10:00,可能会显示显示的时间是2013年1月1日 9:00,很容易识别
11、.5、128个字节的RAM当中,内部实时钟占用0-0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动的时BIOS程序读取。BIOS中提供了相关的程序,使我们可以在开机的时候配置CMOS RAM当中的系统信息输入输出的基本概念6、这个芯片内部有两个端口,端口地址为70h和71h,CPU通过这两个端口来读写CMOS RAM7、70h为地址端口,存放要访问的CMOS RAM单元的地址,71h位数据端口,存放从选定的CMOS RAM单元中读取的数据,或者要写入到其中的数据,其实CPU对CMOS RAM的读写分为两部分,比如说读CMOS RAM 的2号单元 RT/CMOS RAM作
12、为一个I/O接口芯片,系统分配的I/O端口地址区为70H至7FH,通过IN和OUT指令可对其进行存取。它共提供64K个字节RAM单元,分配使用情况如表5.1所示。前14个字节用于实时钟,剩下的50个字节用于系统配置。输入输出的基本概念2.存取RT/CMOS RAM存取RT/CMOS RAM芯片内部64个字节内容时,分两步进行。即先把要存取单元的地址送端口70H,然后再存取端口71H。需要注意,14个记录时钟信息的单元(位移0至0DH)的地址就是表中位移,其他单元的地址时表5.1所示位移上加80H。(1)读操作代码如下:MOV AL,n ;n是要访问单元地址OUT 70H,AL ;把要访问单元的
13、地址送地址端口JMP $+2 ;延时IN AL,71H ;从数据端口取访问单元的内容(2)写操作代码片段如下:MOV AL,n ;n是要访问单元地址OUT 70H,AL ;把要访问单元的地址送地址端口JMP $+2 ;延时MOV AL,m ;m是要输出的数据OUT 71H,AL ;把数据从数据端口输出对同一个I/O设备或端口相继发送I/O指令时,为确保I/O设备或端口有足够的电路恢复时间,一般再I/O指令之间使用一条转移指令JMP $+2;延时,以满足I/O端口的需要。3.CMOS RAM累加和检查在对系统配置时,要对COMS RAM的位移10H2DH的系统配置信息按字节求累加和,其值存放在位
14、移2E2FH的单元中。低字节存放在2EH单元中,高字节存放在2FH单元中。在系统加电自检时,将对CMOS RAM的位移10H2DH单元的内容求和,并与保存的累加和比较。若两者不等,则置状态字节第6位,表示累加和错。这往往会导致要求用户重新进行系统配置。下面的程序片段进行累加和检查,在累加和错时设置诊断状态字节的位6CMOS_PORT EQU 70H ;CMOS端口地址CMOS_BEGIN EQU 90H;求和开始地址CMOS_ENDEQU ADH ;求和结束地址CHECK_SUMEQU AEH ;累加和存放开始地址DIAG_STATUSEQU 8EH ;诊断状态字节地址BAD_CKSUMEQU
15、 40H;累加和检查错标志位SUB BX,BX ;累加和清0MOV CL,CMOS_BEGIN ;指向开始地址MOV CH,CMOS-END+1 ;指向结束地址后一单元SUB AH,AHCMOS2:MOV AL,CLOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取一字节ADD BX,AX ;求累加和INC CL ;指向下一字节CMP CH,CL ;是否到结束地址JNZ CMOS2 ;未到,继续求和;MOV AL,CHECK_SUM+1OUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取原累加和高字节MOV AH,ALMOV
16、 AL,CHECK_SUMOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取原累加和低字节CMP AX,BXJZ CMOS4;MOV AL,DIAG_STATUSOUT CMOS_PORT,ALJMP $+2IN AL,CMOS_PORT+1 ;取诊断状态字节MOV AH,AL ;送AHOR AH,BDA_CKSUM ;或上累加和检查错标志MOV AL,DIAG_STATUSOUT CMOS_PORT,ALJMP $+2MOV AL,AHOUT CMOS_PORT+1,AL ;再送回诊断字节CMOS4:本节视频的课后练习本节视频的课后练习1、什么是I/O端口
17、地址?8086的I/O端口地址空间有多大?2、请说明指令IN AX,DX和如下程序片段的异同IN AL,DXINC DXIN AL,DXMOV AH,AL3、请说明指令“OUT 20H,AL”和如下程序片段的异同:MOV DX,20HOUT DX,AL4、CPU与外设之间交换信息可以分为哪几类?如何区分他们?课后练习请务必完成后,再继续学习后面的课程。官网视频播放页面有参考答案。课后练习请务必完成后,再继续学习后面的课程。官网视频播放页面有参考答案。昆山爱达人信息技术有限公司视频提供视频录制:编程达人官网地址 :联系 Q Q:1250121864联系电话:0512-57882866联系公众号:昆山爱达人编程达人 APP: