汇编语言程序设计第八章 输入_第1页
汇编语言程序设计第八章 输入_第2页
汇编语言程序设计第八章 输入_第3页
汇编语言程序设计第八章 输入_第4页
汇编语言程序设计第八章 输入_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、18.1 8.1 I/OI/O设备的数据传输方式设备的数据传输方式8.2 8.2 程序直接控制程序直接控制I/OI/O方式方式 I/O接口中有用作数据缓冲的数据寄存器;有用作保存设备和接口的状态信息;还有用来保存 CPU发出的命令以控制接口和设备的操作的命令寄存器。2 在IBM PC机中,I/O端口编址在一个独立的地址空间中,这个I/O空间允许设置64K(65536)个8位端口或32K(32678)个16位端口。下面给出PC机的部分端口地址(16进制)。20-21 中断控制器 8259A60-63 可编程序外围接口芯片(PPI)8255A378-37A 并行接口打印机适配器3F8-3FE 异步

2、通信适配器(Primary)2F8-2FE 同步通信适配器(Alternate)3 PC机的I/O指令有IN和OUT,这两条指令既可以传送字节也可以传送字,并且都具有直接端口寻址和间接端口寻址两种方式。ININININOUTOUTOUTOUTAL,PORTAX,PORTAL,DXAX,DXPORT,ALPORT,AXDX,ALDX,AX(AL) (PORT)(AX) (PORT+1:PORT)(AL) (DX)(AX) (DX)+1:(DX) )(PORT) (AL)( PORT+1:PORT ) (AX)( (DX) ) (AL)( (DX)+1:(DX) ) (AX )4;soundMak

3、es a sound with the speakerprognam segmentmainstart:sound:wait1:mainprognam例例 8.1 8.1 SoundSound程序程序procassume cs:prognam, ds:prognamorg mov in and xor out mov loop dec jnz int endp ends endfar100h dx,100 al,61h al,11111100b al,2 61h,al cx,140h wait1 dx sound 20h;turn on/off 100times;get port 61h;AN

4、D off bits 0,1;toggle bit 1;output to port 61h;value of wait;delay a while;total 100 times5例例 8.2 8.2 COMMCOMM程序程序这是一个关于INS 8250串行通信口I/O的例子(这里只给出输出)。 PROCPUSHMOVINTESTJEMOVINPOPRETENDP FARDXDX,03FDHAL,DXAL,1COM_IN1DX,03F8HAL,DXDXCOM_INCOM_IN1:COM_IN;line states register;data ready?;receive buffer re

5、gister;receive a character6可 编 程IR0IR1IR2IR3IR4IR5IR6IR7中 断控 制 器(PIC)8259A08090A0B0C0D0E0F系统定时器键盘彩色/图形接口保留(通信)串行通行接口保留(ALT打印机)软盘保留(打印机)中 断 逻 辑INTn指令单步TF=1除法错误INT0指令n401非屏蔽中断请求2NMIINTR8.3 8.3 中断传送方式中断传送方式8086/8088 中断源7 中断向量表就是各中断类型的处理程序的地址表。存储器的低1.5K字节,地址从0到5FFH为系统占用,其中最底的1K字节,地址从0到3FFH存放中断向量。中断向量表的2

6、56项中断向量对应256种中断类型,每项占用4个字节。 8类型0中断处理程序入口地址类型1中断处理程序入口地址类型2中断处理程序入口地址类型0FF中断处理程序入口地址003FFH003FCH0000CH00008H00004H00000H 因为各处理段的段地址和偏移地址在中断向量中按中断类型号顺序存放,所以每类中断向量的地址可由中断类型号乘以4计算出来。 如右图所示 9INT 4AHMOV CX,301806 IPF000 CS向量地址=4AH4=128HSTIPUSH DSIRET10设置中断向量 把由AL指定的中断类型的中断向量DS:DX放在中断向量表中预置;AH=25H AL=中断类型号

7、 DS:DX=中断向量执行:INT 21H取中断向量 把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX预置:AH=35H AL=中断类型号 执行:INT 21H返回时送:ES:BX=中断向量11MOV AL,NMOV AH,35HINT 21hPushESPushBXPushDSMov AX,SEG INTHANDMov DS,AXMov DX,OFFSET INTHANDMOV AL,NMOV AH,25HINT21HPOP DSPOP DXPOP DSMOV AL,NMOV AH,25HINT21HRETINTHAND:IRET12当中断发生时,由硬件自动完成下列动作:1.取中

8、断类型号N2.标志寄存器内容(PSW)入栈3.当前代码段寄存器内容(CS)入栈4.当前指令寄存器内容(IP)入栈5.禁止外部中断和单步中断(IF=0,TF=0)6.从中断向量表中读取4N的字内容送IP,取4N+2中的字内容送CS7.转中断处理程序 138.3.4.1 中断指令INT引起的内中断8.3.4.2 处理CPU某些错误的中断 8.3.4.3 为调试程序(DEBUG)设置的中断 1.除法错中断2.溢出中断 外设通过8259A和CPU相连,8259A接受外设的中断请求信号,但从外设发出中断请求到CPU响应中断,有两控制条件起决定性因素,一是中断请求是否屏蔽,另一个是CPU是否允许响应中断。

9、这两个条件分别由8259A的中断屏蔽寄存器(IMR)和标志寄存器(PSW)中的中断允许位IF控制。1.单步中断2.断点中断14 在一次外中断结束之前,还应给8259A可编程中断控制器的中断命令寄存器发出中断结束命令(EQI)(P293)。结束外中断用下面的指令:MOV AL,20HOUT 20H,ALIBM PC规定中断的优先级次序为: 高 低内中断(除法错,INTO,INT)非屏蔽中断(NMI)可屏蔽中断(INTR)单步中断优先权15(1)设置中断向量主程序硬件(4)外设接口送中断请求给CPU(3)设置CPU的中断允许位(2)设置设备的中断屏蔽位(5)当前指令执行完后,CPU送响应信号给外设

10、接口(6)CPU接受中断类型号(7)当前的PSW,CS和IP保存入栈(8)清除IF,TF(9)中断向量送IP和CS16 中断处理程序的编写方法和标准子程序很相似,下面是编写中断处理子程序的步骤,请注意与子程序编写的一些不同之处。(1)保存寄存器内容(2)如允许中断嵌套,则开中断(3)处理中断(4)关中断(5)送中断结束命令(EQI)给中断命令寄存器(6)恢复寄存器内容(7)返回被中断的程序17例例 8.4 在系统定时器(中断类型为在系统定时器(中断类型为8)的中断处理程序中,有一)的中断处理程序中,有一 条中断指令条中断指令INT 1CH,时钟中断每发生一次(约每秒中断时钟中断每发生一次(约每

11、秒中断 18.2次),都要调用一次中断类型次),都要调用一次中断类型1CH的处理程序。在的处理程序。在ROM BIOS中,中,1CH的处理程序只有一条的处理程序只有一条IRET指令,实上它并没指令,实上它并没 做任何工作,只是为用户提供了一个中断类号。如果用户有做任何工作,只是为用户提供了一个中断类号。如果用户有 某种定时周期性的工作需要完成,就可以利用系统定时器的某种定时周期性的工作需要完成,就可以利用系统定时器的 中断间隔,用自己设计的程序来代替有的中断间隔,用自己设计的程序来代替有的1CH程序。程序。 下面我们编写一个中断处理程序,要求在主程序运行的过程中,每隔10秒钟响铃一次,同时在屏

12、幕上显示出 “The bell is ring!”18 1CH为用户的中断类型,可能已被其他功能的程序所引用,所以在编写新的中断程序时,应做下述工作: 1.在主程序的初始化部分,先保存当前中断向量表的内容,再设置新的中断向量。 2.在主程序的结束部分恢复保存的1CH向量。TITLE TIMER_INT_EXAMPLE 8-1;Sound and display a message per 10 seconddsegcountmessdsegsegmentdwdbends1The bell is ring!,0dh,oah,$;TIMER_INT程序19segmentprocassume cs:

13、cseg,ds:dseg,es:dsegpushsubpushmovmovmovmovintpushpushpushmovmovmovfardsax,axaxax,dsegds,axal,1chah,35h21hesbxdsdx,offset ringax,seg ringds,ax;define code segment;main part of program;initialize;datarea segment addr; into DS register;get interrupt vector;save interrupt; vector in stack;offset of rin

14、g;base of ringcsegmainstart:;20movmovintpopinandoutstimovmovdecjnzdecjnzpoppopmoval,1chah,25h21hdsal,21hal,11111110b21h,aldi,20000si,30000sidelay1didelaydxdsal,1ch;set interrupt; vector;21h为中断屏蔽寄存器;的I/O端口地址P293;set interrupt; mask bit;main processor;restroe old; interrupt vectordelay:delay1:21765432

15、10软盘硬盘串行口键盘保留串行口1定时器打印机22movintretendpprocpushpushpushpushmovmovstidecjnzmovmovah,25h21hneardsaxcxdxax,dsegds,axcountexitdx,offset messah,09h;save the working regs.;count is value of 10 sec.;print the messagemainring;23intmovinandxoroutmovloopdecjnemovclipoppoppoppopIRETendp21hdx,100 ;turn on/off 100times al,61h ;get port 61h,P286al,0fch ;AND off bits 0,1al,02 ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论