IBM-PC汇编语言程序设计(第二版)第8章.ppt_第1页
IBM-PC汇编语言程序设计(第二版)第8章.ppt_第2页
IBM-PC汇编语言程序设计(第二版)第8章.ppt_第3页
IBM-PC汇编语言程序设计(第二版)第8章.ppt_第4页
IBM-PC汇编语言程序设计(第二版)第8章.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1,第八章输入输出程序设计,CPU,MEM,I/O设备,总线,I/O接口,2,查询方式(程序控制方式)中断方式DMA方式(直接存储器存取方式/成组传送方式),1.I/O设备的数据传送方式,3,I/O指令是主机与外设进行通信的最基本途径。DOS功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。例:循环测试某状态寄存器的第2位是否为1AGAIN:INAL,STATUS_PORTTESTAL,00000100BJZAGAIN,2.程序直接控制I/O方式,读I/O状态,准备好?,传送数据,N,Y,INAL,DATA_PORT,4,I/O指令是主机与外设进行通信的最基本途径。DOS功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。例:循环测试某状态寄存器的第2位是否为1AGAIN:INAL,STATUS_PORTTESTAL,00000100BJZAGAIN,2.程序直接控制I/O方式,读I/O状态,准备好?,传送数据,N,Y,MOVAL,DATAOUTDATA_PORT,AL,5,轮流查询几种I/O设备:DEV1:INAL,STAT1TESTAL,STAT1_BITJZDEV2CALLFARPTRPROC1DEV2:INAL,STAT2TESTAL,STAT2_BITJZDEV3CALLFARPTRPROC2DEV3:INAL,STAT3TESTAL,STAT3_BITJZDEV1CALLFARPTRPROC3,优:程序安排或修改设备的优先次序缺:查询等待浪费CPU大量有效时间,6,例:Sound程序1,movdx,100inal,61handal,11111100bsound:xoral,2out61h,almovcx,140hwait1:loopwait1decdxjnesound,7,.modeltiny.code.startupcallspeaker_onmovah,1int21hcallspeaker_off.exit0,speaker_onprocpushaxinal,61horal,3out61h,alpopaxretspeaker_onendpspeaker_offprocpushaxinal,61handal,0fchout61h,alpopaxretspeaker_offendpend,例:Sound程序2,8,printprocnearpushaxpushdxmovdx,378h;数据寄存器outdx,almovdx,379h;状态寄存器again:inal,dxtestal,80h;(dx)7=busyjeagain;=0,打印机忙movdx,37ah;控制寄存器moval,0dhoutdx,al;送选通信号jmp$+2;展宽选通信号moval,0choutdx,alpopdxpopaxretprintendp,例:打印机查询输出子程序,00001101,选通位,自动换行,初始化,选择位,中断位,37AH,9,中断源:引起中断的事件外中断(硬中断):外设的I/O请求可屏蔽中断电源掉电/奇偶错非屏蔽中断内中断(软中断):INT指令/CPU错(除法错、溢出)/为调试程序设置的中断,3.中断传送方式,10,80 x86中断源:,11,设置CPU中断允许位:FLAGS中的IF位=1允许中断(STI)=0禁止中断(CLI)设置中断屏蔽位:中断屏蔽寄存器的中断屏蔽位=0允许I/O设备请求中断=1禁止I/O设备请求中断,中断的条件:,INAL,21HANDAL,0FDHOUT21H,AL,12,类型0的(IP),类型0的(CS),类型1的(IP),类型1的(CS),类型N的(IP),类型N的(CS),类型255的(IP),类型255的(CS),00000,00004,4*N,003FC,中断向量中断处理程序的入口地址(段址):(偏址),中断向量表,用户可利用保留的中断类型号扩充自己需要的中断功能。,13,CPU中断过程:(1)取中断类型:CPUtypeN(2)保护现场:FLAGS、CS、IP入栈(3)IF=0,TF=0(4)取中断向量:(4N)IP(4N2)CS(5)转中断处理程序,14,例:为中断类型N设置中断向量MOVAX,0MOVES,AXMOVBX,N*4MOVAX,OFFSETINTHANDMOVES:WORDPTRBX,AX;偏移地址(N*4)MOVAX,SEGINTHANDMOVES:WORDPTRBX+2,AX;段地址(N*4+2)INTHAND:;中断处理程序IRET,15,DOS功能调用(21H)存取中断向量:设置中断向量:AH=25HAL=中断类型号DS:DX=中断向量INT21H取中断向量:AH=35HAL=中断类型号INT21H返回时送ES:BX=中断向量,16,MOVAL,NMOVAH,35HINT21H;取原中断向量PUSHESPUSHBX;保存原中断向量PUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21H;设置新的中断向量POPDSPOPDXPOPDSMOVAL,NMOVAH,25HINT21H;恢复原中断向量INTHAND:;中断处理程序IRET,例:用DOS功能调用存取中断向量,17,中断程序的编写步骤:主程序:设置中断向量设置CPU的中断允许位IF设置设备的中断屏蔽位中断处理子程序:保存寄存器内容如允许中断嵌套,则开中断(STI)中断处理功能关中断送中断结束命令(EOI)给中断命令寄存器恢复寄存器内容IRET中断返回,18,例:编写一个中断处理程序,要求在主程序运行期间,每隔10秒响铃一次,同时显示bell,定时器中断18.2次/SEC,;INT_TIMERINT1CHIRET,INT_1CHPROCIRETINT_ICHENDP,RINGPROC1.计数182(10秒)2.显示字符串IRETRINGENDP,19,例:编写一个中断处理程序,要求在主程序运行期间,每隔10秒响铃一次,并显示bell,.modelsmall.stack.datacntdw1mesdbbell,0ah,0dh,$.codemainprocfarstart:movax,datamovds,ax,moval,1chmovah,35hint21hpushespushbxpushdsmovdx,offsetringmovax,segringmovds,axmoval,1chmovah,25hint21hpopdsinal,21handal,11111110bout21h,alsti,20,movdi,30000dly:movsi,60000dly1:decsijnzdly1decdijnzdly;主程序popdxpopdsmoval,1chmovah,25hint21hmovax,4c00hint21hmainendp,21,例:键盘模拟程序,字符码:采用ASCII码表示字母、数字、专用字符和一些非打印字符,键盘上的控制键和功能键的ASCII码为0,必须用扫描码来识别。扫描码:键盘上的每个键都对应一个扫描码,扫描码是按键的位置来排列的。datasegmentscatabdb0,0,1234567890-=,8,0dbqwertyuiop,0dh,0dbasdfghjkl;,0,0,0,0dbzxcvbnm,./,0,0,0db,0,0,0,0,0,0,0,0,0,0,0,0,0db789-456+1230,0dataends,22,23,例:从键盘接收字符,同时对32字节的输入缓冲区进行测试;如缓冲区已满,将键盘挂起,由打印机输出一个提示信息,MAIN,BUFFER满CALLCALLIRET,N,KBD中断32次,TYP中断17次,KBINT,IRET,PRINT,RET,DISP,RET,INTIP,24,例:从键盘接收字符,同时对32字节的输入缓冲区进行测试;如缓冲区已满,将键盘挂起,由打印机输出一个提示信息程序包括以下几个部分:main初始化部分kbint键盘中断处理程序intip初始化打印机prtint打印机中断处理程序disp用十六进制显示al中的内容,25,dsegsegmentaddrdw?;缓冲区指针countdw?bufferdb20hdup()promptdbpleaseinput:,0dh,0ah,$messagedbbufferoverflow,0dh,0ahsave_ip9dw?save_cs9dw?save_ipfdw?save_csfdw?dsegendsmainprocfarmovaddr,offsetbuffermovcount,0,26,moval,09;键盘movah,35hint21hmovsave_ip9,bxmovsave_cs9,esmovdx,offsetkbintpushdsmovax,segkbintmovds,axmoval,09movah,25hint21hpopdsinal,21handal,0fdhout21h,al,27,28,kbintprocnearpushaxpushbxinal,60hpushaxinal,61hmovah,aloral,80hout61h,al;送键盘应答信号xchgah,alout61h,al;复位键盘popaxtestal,80hjnzret1;通码时处理,29,intipprocne

温馨提示

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

评论

0/150

提交评论