《《微机原理与接口技术》(第四版)周何琴课后习题答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
第1章绪论作业1.将下列二进制数转换成十进制数。(1)11001010B=202(2)00111101B=61(3)01001101B=77(4)10100100B=1643.将下列十进制数分别转换为二进制数和十六进制数。(2)76=1001100B=4CH(4)134=10000110B=86H4.求下列十进制数的BCD码(1)327=1100100111(BCD码)(2)1256=1001001010110(BCD码)6.求出下列10进制数的原码、反码和补码(2)+85(4)-85解:85=01010101B原码:+85=01010101B-85=11010101B反码:+85=01010101B-85=10101010B补码:+85=01010101B-85=10101011B10.画出微型计算机的基本结构框图,说明各部分的主要功能是什么?解:微处理器地址总线CPU存储器I/O接口I/O总线I/O设备数据总线控制总线微型计算机的基本结构框图如下:微处理器CPU:控制微处理器与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。微处理器主要完成:(1)指令控制:从存储器中取指令,指令译码;(2)数据加工:简单的算术逻辑运算;(3)操作控制:在微处理器和存储器或者I/O之间传送数据;(4)时间控制:程序流向控制。存储器:用来存放数据和指令。I/O接口:主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等-可编辑修改-
1各种功能。I/O设备:输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。输出运算结果。总线:连接计算机系统中各功能部件的信息通道。第2章8086CPU作业2.8086CPU内部由哪两部分组成?它们的大致是如何工作的?答:(1)8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。(2)①BIU先执行读存储器操作,从给定地址单元中取出指令,送到先进先出的指令队列中等待执行。存储器的物理地址=CS´16+IP,在地址加法器S中形成。②EU从指令队列中取走指令,经EU控制器译码分析后,向各部件发控制命令,以完成执行指令的操作。BIU与EU是并行工作方式。③当指令队列已满,EU在执行指令,未向总线接口单元BIU申请读/写内存或I/O操作时,BIU处于空闲状态。④指令执行过程中,若需对存储器或I/O端口存取数据,EU就要求BIU去完成相应的总线周期。5.两个带符号数10110100B和11000111B相加,运算后各标志位的值等于多少?哪些标志位是有意义的?如果把这两个数当成无符号数,相加后哪些标志位是有意义的?解:(1)两个带符号数:不考虑CF标志10110100+11000111101111011运算后各标志位状态如下:CF=1,有进位,对于带符号数,无意义。PF=1,结果有偶数个1AF=0,无半进位,非BCD码运算,无意义。ZF=0,结果非0SF=0,结果为正数OF=1,溢出(两个负数相加,结果变成了正数)(2)两个无符号数:不考虑SF和OF标志10110100+11000111101111011运算后各标志位状态如下:CF=1,有进位PF=1,结果有偶数个1ZF=0,结果非0AF、SF、OF无意义。20.简要解释下列名词的意义。CPU:中央处理单元CPU(ControlProcessingUnit)也称微处理器,是微型计算机的核心部件,由运算器ALU、控制器、寄存器组以及总线接口等部件组成。主要完成各种运算,负责对整机的控制。存储器:用于存储程序和数据的硬件设备。堆栈:堆栈是一种数据结构,是内部RAM的一段区域。设置堆栈的目的是用于数据的暂存,中断、子程序调用时断点和现场的保护与恢复。IP:指令指针寄存器,用于控制CPU的指令执行顺序(只存放偏移量),只能和代码段寄存器CS配合使用,可以确定当前所要取的指令的内存地址,且始终指向代码段中下一条将要读取到CPU指令队列的那条指令。顺序执行程序时,CPU每取一个指令字节,IP自动加1,指向下一个要读取的字节。SP:堆栈指针寄存器,用于指示堆栈的栈顶地址偏移量的寄存器,它决定了堆栈在内部RAM中的物理位置。只能和SS段寄存器配合使用,且始终指向堆栈的栈顶,在堆栈指令中隐含的使用它来定位栈顶数据。BP:基址指针寄存器。用于存放偏移量,通常和SS段寄存器配合使用,在间接寻址中用于定位堆栈段中的内存单元。段寄存器:由于CPU内部的寄存器都是16位的,为了能够提供20位的物理地址,8086系统中采用了存储器分段的方法。规定存储器的一个段为64KB,由段寄存器来确定存储单元的段基址,由指令提供该单元相对于相应段起始地址的16位偏移量。状态标志:表示前一步操作(如加、减等)执行以后,ALU所处的状态,后续操作可以根据这些状态-可编辑修改-
2标志进行判断,实现转移。控制标志:可以通过指令人为设置,用以对某一种特定的功能起控制作用(如中断屏蔽等),反映了人们对微机系统工作方式的可控制性。物理地址:存储器的实际地址,它是指CPU和存储器进行数据交换时所使用的地址。物理地址是由段地址与偏移地址共同决定的,计算物理地址的表达式为:物理地址=段地址×16+偏移地址逻辑地址:是在程序中使用的地址,它由段地址和偏移地址两部分组成。逻辑地址的表示形式为“段地址:偏移地址”。机器语言:直接用二进制编码表述的指令系统语言,通常称为机器语言,机器语言指令是计算机惟一能直接识别和执行的指令。汇编语言:便于记忆和使用,通常使用汇编语言(符号指令或指令助记符)来描述计算机的指令系统。指令:让计算机完成某种操作的命令称为指令。指令系统:一台计算机所能识别、执行的指令的集合就是它的指令系统。总线:连接计算机系统中其他主要功能部件的桥梁,是计算机系统中信息输送的枢纽,只有通过总线,计算机系统的各部件才能实现相互通信。内部总线:微处理器内部各个器件之间传送信息的通路。系统总线:微处理机机箱内的底板总线。可分为:ISA、EISA、VESA局部总线、PCI局部总线等。时钟周期:CPU时钟频率的倒数称为时钟周期,也称T状态。总线周期:BIU完成一次访问存储器或I/O端口操作所需要的时间称为总线周期。一个基本的总线周期是由4个(或4个以上)时钟周期组成的。指令周期:执行一条指令所需要的时间称为指令周期,不同指令的指令周期的长短是不同的。一个指令周期是由几个总线周期组成的。20.要完成下列运算和控制,用什么标志判别?其值是什么?(1)比较两数是否相等?(2)两数运算后结果是正数还是负数?(3)两数相加后是否溢出?(4)奇偶校验判断。(5)两数相减后比较大小。(6)中断信号能否允许?答:(1)比较两数是否相等:两数相减后用零标志ZF判断,ZF=1,则相等。(2)两数运算后结果是正数还是负数:用符号标志SF判断,SF=1,则结果为负数。(3)两数相加后是否溢出:用溢出标志OF判断,OF=1,则有溢出。(4)奇偶校验判断:采用偶校验方式,判定是否要补“1”?用奇偶标志PF判断,若数据结果低8位中含有偶数个“1”,则PF=1;不用补“1”。(5)两数相减后比较大小:ZF=1,两数相等。对于无符号数,CF=1,则被减数小于减数;CF=0,则被减数大于减数;ZF=1,则两数相等。对于带符号数,SF⊕OF=1,则被减数小于减数;SF⊕OF=0,则被减数大于减数。(6)中断信号能否允许:用中断允许标志IF判断,IF=1,则能允许可屏蔽中断。21.说明8086系统中“最小模式”和“最大模式”两种工作方式的主要区别。最小模式(最小工作方式):单微处理器系统(系统中只有一个8086微处理器),所有的总线控制信号,都是直接由8086CPU产生的,适用于规模较小的微机应用系统。当把8086的33脚MN/MX接+5V时,8086CPU就处于最小工作方式。最大模式(最大工作方式):多微处理器系统(包含有两个或多个微处理器,一个主处理器8086CPU,其他的处理器称为协处理器它们是协助主处理器工作的。),主要用在中等或大规模的8086系统中。当把8086的33脚MN/MX接地时,8086CPU就处于最大模式。源目的(1)MOVAX,2048H立即寻址寄存器寻址(2)MOVCL,0FFH立即寻址寄存器寻址(3)MOVBX,[SI]寄存器间接寻址寄存器寻址(4)MOV5[BX],BL寄存器寻址寄存器相对寻址第3章作业1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。-可编辑修改-
3(5)MOV[BP+100H],AX寄存器寻址寄存器相对寻址-可编辑修改-(6)MOV[BX+DI],‘$’立即寻址基址变址寻址-可编辑修改-(7)MOVDX,ES:[BX+SI]基址变址寻址寄存器寻址(8)MOVVAL[BP+DI],DX寄存器寻址相对基址加变址寻址(9)INAL,05HI/O端口寻址(或直接寻址)寄存器寻址(10)MOVDS,AX寄存器寻址寄存器寻址2.已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容各是什么?AX内容(1)MOVAX,0200H;(AX)=0200H(2)MOVAX,[200H];(AX)=2A10H(3)MOVAX,BX;(AX)=0200H(4)MOVAX,3[BX];(AX)=5946H(5)MOVAX,[BX+SI];(AX)=463CH(6)MOVAX,2[BX+SI];(AX)=6B59H6.指出下列指令中哪些是错误的,错在什么地方(1)MOVDL,AX错误,源和目的操作数类型不匹配,DL是8位寄存器,AX是16位寄存器。(2)MOV8650H,AX错误,立即数不能作为目的操作数。(3)MOVDS,0200H错误,不能用立即数直接给段寄存器赋值。(4)MOV[BX],[1200H]错误,不能在两个存储单元之间直接传送数据(5)MOVIP,0FFH错误,IP不能作目的操作数或不能用立即数直接给IP寄存器赋值。(6)MOV[BX+SI+3],IP错误,IP不能作源操作数。(7)MOVAX,[BX][BP]错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,不能两个同时为基址寄存器(BX、BP均为基址寄存器)。(8)MOVAL,ES:[BP]正确。(9)MOVDL,[SI][DI]错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,不能两个同时为变址寄存器(SI、DI均为变址寄存器)。(10)MOVAX,OFFSET0A20H错误,OFFSET后必须是存储单元标号地址,不能是立即数。(11)MOVAL,OFFSETTABLE错误,操作数类型不匹配,AL为8位,TABLE为16位。(12)XCHGAL,50H错误,交换指令XCHG的操作数不能是立即数。(13)INBL,05H错误,IN指令的目的操作数必须是累加器(14)OUTAL,0FFEH错误,OUT指令的源操作数必须是累加器,目的操作数为8位I/O端口地址或用DX做桥梁的16位I/O端口地址。10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF等于什么?(1)ANDAH,CL(AH)=04HCF=0(2)ORBL,30H(BL)=36HCF=0(3)NOTAX(AX)=0DAF7HCF不变(不影响CF)(4)XORCX,0FFF0H(CX)=0FFF4HCF=0(5)TESTDH,0FH(DH)=18HCF=0(6)CMPCX,00H(CX)=0004HCF=0(7)SHRDX,CL(DX)=0186HCF=0(8)SARAL,1(AL)=04HCF=0-可编辑修改-
4(7)SHLBH,CL(BH)=0F0HCF=0(8)SALAX,1(AX)=4A10HCF=0(11)RCLBX,1CF=1,(BX)=1E6DH,CF=0,(BX)=1E6CHCF=0(12)RORDX,CL(DX)=4186HCF=010.假设数据定义如下:DATASEGMENTSTRINGDB‘ThePersonalComputer&TV’DATAENDS试用字符串操作指令编程完成以下功能:(1)把该字符串传送到附加段中偏移地址为GET_CHAR开始的内存单元中。解:程序段如下:LEASI,STRING;置源串偏移地址LEADI,GET_CHAR;置目的串偏移地址MOVCX,26;置串长度CLD;方向标志复位REPMOVSB;字符串传送11.编程将AX寄存器中的内容以相反的次序传送到DX寄存器中,并要求AX中的内容不被破坏,然后统计DX寄存器中1的个数是多少。解:将AX的内容用ROR循环右移,16次之后AX的内容不变(如果用算术/逻辑右移SHL/SAL,则AX的内容破坏,需要用堆栈PUSHUAX/POPAX保护),其最低位移入CF中,再使用RCL循环左移将CF中的值移入DX中。并且,如果CF的值为1,则将BL加1。MOVCX,16XORBL,BLLP1:RORAX,1JNCLP2INCBLLP2:RCLDX,1LOOPLP1HLT调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTBUFDW12BUF1DW100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVAX,1234H-可编辑修改-
5MOVCX,16XORBL,BLLP1:RORAX,1JNCLP2INCBLLP2:RCLDX,1LOOPLP1HLTCODEENDSENDSTART15.某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:给每人加5分,结果存到NEW数组中.解:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTARRAYDB7DUP(?)NEWDB7DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVCX,7MOVBX,0LP1:MOVAL,ARRAY[BX]ADDAL,05HDAAMOVNEW[BXI],ALINCBXLOOPLP1HLTCODEENDSENDSTART调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTARRAYDB65H,76H,78H,54H,90H,85H,68HNEWDB7DUP(?)BUF1DW100DUP(?)DATAENDSCODESEGMENT-可编辑修改-
6ASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVCX,7MOVBX,0LP1:MOVAL,ARRAY[BX]ADDAL,05HDAAMOVNEW[BXI],ALINCBXLOOPLP1HLTCODEENDSENDSTART某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:(1)给每人加5分,结果存到NEW数组中(2)把总分存到SUM单元中(3)把平均分存到AVERAGE单元中解:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTARRAYDB7DUP(?)NEWDB7DUP(?)SUMDW0AVGDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVCX,7MOVSI,0MOVSUM,0MOVAH,0LP1:MOVAL,ARRAY[SI]ADDAL,05HDAAMOVNEW[SI],ALADDAL,SUMDAAMOVSUM,AL-可编辑修改-
7ADCAH,0DAAMOVSUM+1,AHINCSILOOPLP1MOVAX,SUMMOVBL,07HDIVBLMOVAVG,ALHLTCODEENDSENDSTART调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTARRAYDB65H,76H,78H,54H,90H,85H,68HNEWDB7DUP(?)SUMDB00H,00HAVGDB0BUF1DW100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVCX,7MOVSI,0MOVSUM,0MOVAH,0LP1:MOVAL,ARRAY[SI]ADDAL,05HDAAMOVNEW[SI],ALADDAL,SUMDAAMOVSUM,ALADCAH,0MOVSUM+1,AHINCSILOOPLP1MOVAL,SUM-可编辑修改-
8MOVAH,SUM+1MOVBL,07HDIVBLMOVAVG,ALHLTCODEENDSENDSTART13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:0278H,PROG_F标号的地址为3400:0ABCH。说明下列每条指令执行完后,程序分别转移到何处执行?JMP指令(1)JMPPROG_N段内直接近转移,目的地址为1200H:0278H(或12278H)(2)JMPBX段内寄存器间接转移,目的地址为1200H:0300H(或12300H)(3)JMP[BX]物理地址=DS×10H+BX=2000H×10H+0300H=20300H(20300H)=4800H→IP段内存储器间接转移,目的地址为1200H:4800H(或16800H)(4)JMPFARPROG_F段间直接转移,目的地址为3400H:0ABCH(或34ABCH)(5)JMPDWORDPTR[BX]物理地址=DS×10H+BX=2000H×10H+0300H=20300H(20300H)=4800H→IP,(20302H)=00FFH→CS段间存储器间接转移,目的地址为00FFH:4800H(或057F0H)JMP改为CALL后,目的地址与JMP相同。(1)CALLPROG_N段内直接调用,3字节指令,目的地址为1200H:0278H(或12278H),0103H入栈,SP=03FEH(2)CALLBX段内寄存器间接调用,2字节指令,目的地址为1200H:0300H(或12300H),0102H入栈,SP=03FEH(3)CALL[BX]段内存储器间接调用,2字节指令,目的地址为1200H:4800H(或16800H),0102H入栈,SP=03FEH(4)CALLFARPROG_F段间直接调用,5字节指令,目的地址为3400H:0ABCH(或34ABCH),1200H和0105H分别入栈,SP=03FCH(5)CALLDWORDPTR[BX]段间间接调用,2字节指令,目的地址为00FFH:4800H(或057F0H),1200H和0102H分别入栈,SP=03FCH部分调试程序:STACKSEGMENTSTACKDB100DUP(?)-可编辑修改-
9STACKENDSDATASEGMENTBUFDW12BUF1DW100DUP(?)ORG300HDB00H,48H,0FFH,00HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVBX,0300HCALLPROG_NCALLBXCALL[BX]ORG0278PROG_N:RETORG0300HRETORG4800HRETHLTCODEENDSENDSTART14.如在下列程序段的括号中分别填入以下指令:(1)LOOPNEXT(1)LOOPENEXT(2)LOOPNENEXT试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么START:MOVAX,01HMOVBX,02HMOVDX,03HMOVCX,04HNEXT:INCAXADDBX,AX~SHRDX,1()解:LOOP过程:AXBXCXDX-可编辑修改-初始值01H循环1次02H04H02H04H03H03H01H-可编辑修改-循环2次03H07H02H00H-可编辑修改-
10-可编辑修改-结果:循环3次04H循环4次05H0BH10H01H00H00H00H-可编辑修改-AXBXCXDX-可编辑修改-(1)(2)05H02H10H04H00H03H00H01H-可编辑修改-执行一次,ZF=0,退出循环。-可编辑修改-(3)03H07H02H00H-可编辑修改-执行两次,ZF=1,退出循环。20.设8086CPU的时钟频率为5MHz,请编写延时5ms的子程序。解:微机的主频率为5MHz则:时钟周期=主频率的倒数=1/(5×10-6)=0.2µs延时5ms需要的时钟周期数=5ms/0.2µs=25000延时子程序如下:DELAY5:MOVCX,N4DLY1:NOP3×NLOOPDLY117×(N-1)+5RET16应该有25000=4+3×N+17×(N-1)+5+16,才能实现要求的延时。则:N=1250=04E2H延时子程为:DELAY5:MOVCX,04E2HDLY1:NOPLOOPDLY1RET第4章作业P1535.阅读下列程序,说明每条指令执行后的结果是什么?X1DB65H,78HX2DW06FFH,5200HX3DD?GO:MOVAL,TYPEX1MOVBL,TYPEX2MOVCL,TYPEX3MOVAH,TYPEGOMOVBH,SIZEX2MOVCH,LENGTHX3解:(1)前三条语句的功能是设置数据于数据段中,从数据段偏移地址0000H开始存放。65H变量偏移地址数据X10000H-可编辑修改-
110001H78HX20002HFFH0003H06H0004H78H0005H00HX30006H随机数0007H随机数0008H随机数0009H随机数程序汇编后结果如下:六条程序执行结果如下:(AL)=01H;设置变量类型属性,字节数(BL)=02H;设置变量类型属性,字节数(CL)=04H;设置变量类型属性,字节数(AH)=0FFH;设置GO显示类型,近标号,为-1,补码表示(BH)=02H;设置数据类型,无DUP时,返回数据类型的字节数(CH)=01H;无DUP时,返回1。程序执行后结果如下:调试程序如下:STACKSEGMENTSTACKDB100DUP(?)-可编辑修改-
12STACKENDSDATASEGMENTX1DB65H,78HX2DW06FFH,5200HX3DD?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXGO:MOVAL,TYPEX1MOVBL,TYPEX2MOVCL,TYPEX3MOVAH,TYPEGOMOVBH,SIZEX2MOVCH,LENGTHX3POPDSHLTCODEENDSENDSTART5.画出示意图,说明下列变量在内存中如何让存放?A1DB12H,34HA2DB‘Right.’A3DW5678HA4DB3DUP(?)(1)设置数据于数据段中,从数据段偏移地址0000H开始存放。变量偏移地址数据A10000H12H0001H34HA20002H52H0003H69H0004H67H0005H68H0006H74H0007H2EHA30008H78H0009H56HA4000AH随机数000BH随机数000CH随机数调试程序如下:-可编辑修改-
13STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTA1DB12H,34HA2DB'Right.'A3DW5678HA4DB3DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXPOPDSHLTCODEENDSENDSTART程序汇编后结果如下:12.编程实现,从键盘输入一个十进制数0~9,查表求键入数字的七段代码(共阳极LED显示器的段码),存入DL中,并在键入数字之前,显示提示信息“Pleaseinputanumber(0~9):”。解:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTTABLEDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HBUFDB'Pleaseinputonenumber(0~9):',0DH,0AH,'$'DATAENDSCODESEGMENT-可编辑修改-
14ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:PUSHDSMOVAX,DATAMOVDS,AXMOVDX,OFFSETBUFMOVAH,09HINT21HMOVAH,1INT21HANDAL,0FHMOVBX,OFFSETTABLEXLATMOVDL,ALPOPDSHLTCODEENDSENDSTART调试结果:数字5的共阳极LED七段码为92H。15.已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。解:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTBUFDB58H,75H,36H,42H,89HMINDB0-可编辑修改-
15DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVCX,4MOVBX,OFFSETBUFMOVAL,[BX]ST1:INCBXCMPAL,[BX]JBENEXTMOVAL,[BX]NEXT:LOOPST1MOVMIN,ALANDAL,0F0HMOVCL,4RORAL,CLADDAL,30HMOVDL,ALMOVAH,02HINT21HMOVAL,MINANDAL,0FHADDAL,30HMOVDL,ALMOVAH,02HINT21HPOPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART18.某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程先从高到低的次序排列好,再求出总分和平均值,分别存放在SUM和AVER开始的单元中。解:STACKENDSDATASEGMENTLISTDB65H,76H,78H,54H,90H,85H,68H,66H,77H,88HDB99H,89H,79H,69H,75H,85H,63H,73H,83H,93HSUMDW0-可编辑修改-
16AVERDB0BUFDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVDI,OFFSETLISTMOVBX,19LP0:MOVSI,DIMOVCX,BXLP1:MOVAL,[SI]INCSICMPAL,[SI]JNCLP2MOVDL,[SI]MOV[SI-1],DLMOV[SI],ALLP2:LOOPLP1DECBXJNZLP0LP3:MOVCX,20MOVBX,OFFSETLISTMOVSUM,0XORAX,AXLP4:ADDAL,[BX]DAAADCAH,0INCBXLOOPLP4MOVSUM,AXMOVBL,20HDIVBLADDAL,0DAAMOVAVERALPOPDSHLTCODEENDSENDSTART20.编程将存放在AL中的无符号二进制数,转化成十六进制数,再转换成ASII码并显示在屏幕上。-可编辑修改-
17解:程序如下:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVDH,ALMOVCH,02HST1:MOVCL,4RORDH,CLMOVAL,DHANDAL,0FHADDAL,30HCMPAL,39HJBEDISPADDAL,07HDISP:MOVDL,ALMOVAH,02HINT21HDECCHJNZST1POPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART调试程序如下:STACKSEGMENTSTACKBUFDB01111000BDB100DUP(?)STACKENDSDATASEGMENTDB100DUP(?)DATAENDSCODESEGMENT-可编辑修改-
18ASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVAL,BUFMOVDH,ALMOVCH,02HST1:MOVCL,4RORDH,CLMOVAL,DHANDAL,0FHADDAL,30HCMPAL,39HJBEDISPADDAL,07HDISP:MOVDL,ALMOVAH,02HINT21HDECCHJNZST1POPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART20.编写程序,使用三种以上的方法,将存储器中2000H开始的地址单元中的100字节数据复制到3000H开始的存储器地址单元中。解:(1)利用通用传送指令MOVMOVSI,2000H注意这里如果是标号地址,则必须用OFFSETMOVDI,3000HMOVCX,100LP1:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPLP1HLTMOVCX,100MOVBX,0LP0:MOVAL,2000[BX]MOV3000[BX],ALINCBXLOOPLP0HLT-可编辑修改-
19(1)利用交换指令XCHGMOVSI,2000HMOVDI,3000HMOVCX,100LP2:MOVAL,[SI]XCHG[DI],ALINCSIINCDILOOPLP2HLT(2)利用换码指令XLATMOVBX,2000HMOVDI,3000HMOVCX,100LP3:XORAL,ALXLATMOV[DI],ALINCBXINCDILOOPLP3HLT(3)利用堆栈实现数据传送MOVSI,2000HMOVDI,3000HMOVCX,50LP4:PUSH[SI]POP[DI]INCSIINCSIINCDIINCDILOOPLP4HLT(4)利用串操作指令REPMOVSBMOVSI,2000HMOVDI,3000HMOVCX,100CLD;DF=0,SI、DI自动+1REPMOVSBHLT调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTORG2000HDB11H,22H,33H,44H,55H.66H,77H,88H,99HDB100DUP(?)ORG3000HDB100DUP(?)DATAENDS-可编辑修改-
20CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVSI,2000HMOVDI,3000HMOVCX,100LP1:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPLP1POPDSHLTCODEENDSENDSTART20.在DATA开始的4个单元中存放着一个32位数,求出其中的“1”的个数,并存入COUNT单元中。解:DATASEGMENTDATA1DB0FEH,86H,7CH,35HCOUNTDB00HDATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSI,OFFSETDATA1MOVBX,[SI]MOVDX,[SI+2]MOVCX,32XORAL,ALLP1:RCRDX,1RCRBX,1JNCLP2INCALLP2:LOOPLP1MOVCOUNT,ALPOPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART-可编辑修改-
211.下列变量各占多少字节?A1A2DWDB23H,5876H3DUP(?),0AH,0DH,‘$’4字节6字节A3DD5DUP(1234H,567890H)4×2×5=40字节A4DB4DUP(3DUP(1,2,‘ABC’))5×3×4=60字节调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTDA1DW23H,5876HDA2DB3DUP(?),0AH,0DH,'$'DA3DD5DUP(1234H,567890H)DA4DB4DUP(3DUP(1,2,'ABC'))DA5DB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVAX,OFFSETDA1MOVBX,OFFSETDA2MOVCX,OFFSETDA3MOVDX,OFFSETDA4MOVDI,OFFSETDA5POPDSHLTCODEENDSENDSTART5.对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?DA1DB?DA2DW10DUP(?)DA3DB‘ABCD’-可编辑修改-MOVMOVMOVAX,TYPEDA1BX,SIZEDA2CX,LENGTHDA3-可编辑修改-解:各条MOV指令执行后,有关寄存器的内容如下:MOVAX,TYPEDA1;(AX)=1MOVBX,SIZEDA2;(BX)=20MOVCX,LENGTHDA3;(CX)=1调试程序STACKSEGMENTSTACKDB100DUP(?)-可编辑修改-
22STACKENDSDATASEGMENTDA1DB?DA2DW10DUP(?)DA3DB'ABCD'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVAX,TYPEDA1MOVBX,SIZEDA2MOVCX,LENGTHDA3POPDSHLTCODEENDSENDSTART5.下段程序完成后,AH等于什么?INAL,5FHTESTAL,80HJZL1MOVAH,0JMPSTOP-可编辑修改-L1:MOVSTOP:HLT解:AH,0FFH-可编辑修改-如果地址为5FH的外设输入到AL中的数据的最高位=1,则(AH)=0,否则,(AH)=0FFH。10.编制两个通用过程,完成两位十六进制数转换成ASCII码,并将ASCII码字符显示。(1)两位十六进制数转换成ASCII码设两位十六进制数存放在DL中,输出的ASCII码存放在BX中。CONPROCPUSHAXPUSHCXMOVCL,4MOVAL,DLANDAL,0FHCMPAL,0AHJNCLP1ADDAL,30HJMPLP2LP1:ADDAL,37HLP2:MOVBL,AL-可编辑修改-
23MOVAL,DLSHRAL,CLANDAL,0FHCMPAL,0AHJNCLP3ADDAL,30HJMPLP4LP3:ADDAL,37HLP4:MOVBH,ALPOPCXPOPAXRETCONENDP四位十六进制数转换成ASCII码,设四位十六进制数存放在存储器BUF1单元中,输出的ASCII码存放在存储器BUF2开始的单元中。CONPROCPUSHAXPUSHCXPUSHDXMOVDI,OFFSETBUF2MOVSI,OFFSETBUF1MOVCL,4MOVDH,4MOVDX,[SI]LP1:ROLDX,CLMOVAL,DLANDAL,0FADDAL,30HCMPAL,3AHJCLP2ADDAL,07HLP2:MOV[DI],ALINCDIDECCHJNZLP1POPDXPOPCXPOPAXRETCONENDP-可编辑修改-
24(1)ASCII码字符显示设2个ASCII码字符在BX中。DISPPROCPUSHAXMOVDL,BLMOVAH,2INT21HMOVDL,BHINT21HPOPAXRETDISPENDP调试程序STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTDA1DB5FH,0A4H,0C7HDA2DB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVDL,DA1CALLCONCALLDISPPOPDSHLT-可编辑修改-CON:PUSHAXPUSHCX-可编辑修改-MOVCL,4MOVAL,DLANDAL,0FHCMPAL,0AHJNCLP1ADDAL,30HJMPLP2LP1:ADDAL,37HLP2:MOVBL,ALMOVAL,DLSHRAL,CLANDAL,0FHCMPAL,0AHJNCLP3ADDAL,30HJMPLP4-可编辑修改-
25LP3:ADDAL,37HLP4:MOVBH,ALPOPCXPOPAXRET-可编辑修改-DISP:PUSHAXMOVDL,BLMOVAH,2INT21HMOVDL,BHINT21HPOPAXRET-可编辑修改-CODEENDSENDSTART13.将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上显示。DATASEGMENTDATA1DB10DUP(?)DATA2DB10DUP(?)DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXKEY:MOVAH,1INT21HZH:CMPAL,3AHJAEZH1SUBAL,30HJMPZH2ZH1:SUBAL,37HADDAL,0DAAZH2:MOVBL,ALANDAL,0F0HMOVCL,4SHRAL,CLADDAL,30HMOVBH,ALMOVAL,BLANDAL,0FHADDAL,30HMOVBL,ALDISP:MOVDL,BHMOVAH,2INT21HMOVDL,BLMOVAH,2-可编辑修改-
26INT21HPOPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTBUF1DB'Pleaseinputonehexadecimal(0-9,A-F):',0DH,0AH,'$'BUF2DB20H,20H,'Decimal(0-15):',0DH,0AH,'$'BUF3DB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXMOVDX,OFFSETBUF1MOVAH,9INT21HKEY:MOVAH,1INT21HPUSHAXMOVDX,OFFSETBUF2MOVAH,9INT21HPOPAXZH:CMPAL,3AHJAEZH1SUBAL,30HJMPZH2ZH1:SUBAL,37HADDAL,0DAAZH2:MOVBL,ALANDAL,0F0HMOVCL,4SHRAL,CLADDAL,30HMOVBH,ALMOVAL,BLANDAL,0FHADDAL,30HMOVBL,ALDISP:MOVDL,BHMOVAH,2INT21HMOVDL,BLMOVAH,2INT21HPOPDSMOVAH,4CHINT21H-可编辑修改-
27HLTCODEENDSENDSTART22.编程序统计学生的数学成绩,分别归类90~99分,80~89分,70~79分,60~69分及60分以下,并将各段的人数送入内存单元中。解:STACKSEGMENTDB100DUP(?)STACKENDSDATASEGMENTDATA1DB200DUP(?)DATA2DB100DUP(?)DATA3DB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXXORCX,CXKEY:MOVSI,OFFSETDATA1KEY1:MOVAH,1INT21HCMPAL,‘$’JZZHINCCXMOV[SI],ALINCSIJMPKEY1ZH:MOVSI,OFFSETDATA1MOVDI,OFFSETDATA2SHRCX,1PUSHCXZH1:MOVAL,[SI]ANDAL,0FHSHLAL,1SHLAL,1SHLAL,1SHLAL,1MOVBL,ALINCSIMOVAL,[SI]ANDAL,0FHORAL,BLMOV[DI],ALINCSIINCDILOOPZH1TJ:POPCXMOVDI,OFFSETDATA2TJ0:MOVAL,[DI]CMPAL,90HJNBTJ1-可编辑修改-
28CMPAL,80HJNBTJ2CMPAL,70HJNBTJ3CMPAL,60HJNBTJ4INC4[DATA3]JMPTJ5TJ1:INC[DATA3]JMPTJ5TJ2:INC1[DATA3]JMPTJ5TJ3:INC2[DATA3]JMPTJ5TJ4:INC3[DATA3]TJ5:INCDILOOPTJ0POPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART调试程序:STACKSEGMENTSTACKDB100DUP(?)STACKENDSDATASEGMENTDATA1DB80DUP(?)DATA2DB80DUP(?)DATA3DB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:PUSHDSMOVAX,DATAMOVDS,AXXORCX,CXKEY:MOVSI,OFFSETDATA1KEY1:MOVAH,1INT21HCMPAL,'$'JZZHINCCXMOV[SI],ALINCSIJMPKEY1ZH:MOVSI,OFFSETDATA1MOVDI,OFFSETDATA2SHRCX,1PUSHCXZH1:MOVAL,[SI]ANDAL,0FHSHLAL,1SHLAL,1SHLAL,1-可编辑修改-
29-可编辑修改-SHLAL,1MOVBL,ALINCSIMOVAL,[SI]ANDAL,0FHORAL,BLMOV[DI],ALINCSIINCDILOOPZH1TJ:POPCXMOVDI,OFFSETDATA2TJ0:MOVAL,[DI]CMPAL,90HJNBTJ1CMPAL,80HJNBTJ2CMPAL,70HJNBTJ3CMPAL,60HJNBTJ4INC4[DATA3]JMPTJ5TJ1:INC[DATA3]JMPTJ5TJ2:INC1[DATA3]JMPTJ5TJ3:INC2[DATA3]JMPTJ5TJ4:INC3[DATA3]TJ5:INCDILOOPTJ0POPDSMOVAH,4CHINT21HHLTCODEENDSENDSTART第5章作业P194-可编辑修改-5.PROM、EPROM、E2PROM的共同特点是什么?它们在功能上主要不同之处在哪里?试举例说明它们的用途。答:(1)共同特点:只读存储器,只能读出,在系统运行过程中不能写入。具有非易失性,写入或擦除一般需用特殊方法。(2)功能上的不同:一次可编程的PROM:用户可根据需要修改存储器中的某些存储单元,只能一次性修改,不能二次编程,成本高,可靠性差,使用具有一定的局限性。用户可部分写入。紫外线可擦除EPROM:显著优点是可多次编程,但不能在线编程,不容易修改局部内容。需要紫外线擦出。一般用于产品开发,或用于小批量生产。电擦可编程E2PROM:可改写任一部分内容,擦写10000次,甚至百万次,数据保存10年。可在电路板上在线编程。一般用于产品开发,或用于小批量生产。性能和次数比EPROM好。EEPROM擦写速度较慢,不能做大容量内存。(3)用途-可编辑修改-
30一次可编程的PROM:用于大批量生产的各种需要存储器的电子设备。紫外线可擦除EPROM:一般用于产品开发,或用于小批量生产。广泛用于微机化仪器设计,可用编程器写入调试好的程序和数据,并能长期保存。一般用于产品开发,或用于小批量生产。主要用于程序存储器,容量不大。电擦可编程E2PROM:用来存放仪器或接口卡的硬件设置数据或构成防止软件非法拷贝的“硬件锁”。擦写速度较慢,容量不大,不能做大容量内存。如计算机主板上的BIOSROM。8.试说出闪存的3项技术特点,并举出至少5个采用闪存的计算机设备或电子产品名称。答:(1)具有非易失性,能不加电而长期保存信息,抗干扰能力强;能在线进行快速电擦除,类似于EEPROM;编程速度可达10ns/byte,比EPROM和EEPROM快;价格已低于DRAM,容量则接近于DRAM。性能好、功耗低、体积小、重量轻。(2)取代EPROM和EEPROM,固化BIOS,并用在打印机、条码阅读器、各种仪器和外设中。制作U盘、固态硬盘。各类小型存储介质:CF卡(紧凑式闪存)、SM卡(固态软盘卡)、SD卡(安全数码卡)、MMC卡(多媒体卡)、MS卡(记忆棒)、XD卡(尖端数字图像卡)等。12.什么是Cache?它处在计算机的什么位置上?起作用是什么?答:(1)Cache:高速缓冲存储器(2)Cache在计算机中位于CPU和DRAM之间。(3)在慢速DRAM和快速CPU之间设置1个容量较小的高速缓冲存储器(Cache)。能不明显增加成本而提高CPU存取数据速度。以解决计算机存储器系统的容量、存取速度及单位成本之间的矛盾。为了解决存储器系统的容量、存取速度及单位成本之间的矛盾,可以采用Cache主存存储结构,即在主存和CPU之间设置高速缓冲存储器Cache,把正在执行的指令代码单元附近的一部分指令代码或数据从主存装入Cache中,供CPU在一段时间内使用,在一定容量Cache的条件下,可以做到使CPU大部分取指令代码及进行数据读写的操作都只要通过访问Cache,而不是访问主存而实现。18.用8K×8位的RAM6264构成一个32K×8位存储器,存储器的起始地址为18000H,要求存储芯片的地址连续,用74LS138做译码器,系统中只用到了地址线A18-A0,采用部分译码法设计译码电路,试画出硬件电路图,并用列表说明每块芯片的地址范围。(选用8088CPU)-可编辑修改-解:RAM6264为8KB×8位SRAM,有13根地址线:A12址线从全0变成全1。AAAA111098AAA765AAAAA,8KB的地址范围,13根地43210-可编辑修改-8KB×8位RAM6264构成一个32K×8位存储器,需要字扩展,32KB/8KB=4,需要四片RAM6264。题目要求存储器的起始地址为18000H,即:00011000000000000000B。题目要求存储芯片的地址连续,则4片RAM6264的地址范围为:-可编辑修改-AAAA19181716AAAA15141312AAAA111098AAAA7654AAAA3210十六进制地址-可编辑修改-1#:00011000000000000000B18000H00011001111111111111B19FFFH2#:00011010000000000000B1A0000H00011011111111111111B1BFFFH3#:00011100000000000000B1C000H00011101111111111111B1DFFFH-可编辑修改-
314#:00011110000000000000B1E000H00011111111111111111B1FFFFH根据CPU外扩存储器的原理,从4片RAM6264的地址范围可以看出:A~A为每片存储器自己的范围,120需要接CPU的低位地址线A~A;变化的地址为AA,译码器输入必须包括AA,题目要求用74LS138做12014131413译码器,因此,74LS138译码器的输入必须为AAA,1#~4#存储器的片选接到74LS138译码器的输出151413Y~Y上。47结论:要求存储芯片的地址连续,译码器的输入必须是除每片存储器的地址外的连续地址。除每片存储器的地址外,所有芯片的相同电平地址通过逻辑门接到译码器的控制端,所有芯片的不同电平的地址位必须参与译码。选择AAA作为74LS138译码器的输入。A=1(接74LS138译码器的G),AA=00(。经或门后接74LS138151413161817译码器的接G),M/IO接74LS138译码器的G。2A2BAAAA19181716AAAA15141312AAAA111098AAAA7654AAAA3210十六进制地址1#:00011000000000000000B18000H00011001111111111111B19FFFH2#:00011010000000000000B1A000H00011011111111111111B1BFFFH3#:00011100000000000000B1C000H00011101111111111111B1DFFFH4#:00011110000000000000B1E000H00011#、2#、3#、4#11111111RAM6264的片选接74L11111111BS138译码器的输出1FFFFHY、Y、Y、Y。4567系统硬件电路如下:每块芯片的地址范围为:芯片号起始地址结束地址-可编辑修改-
321#18000H19FFFH2#1A000H1BFFFH3#1C000H1DFFFH4#1E000H1FFFFH1.静态RAM与动态RAM有何区别?随机存取存储器RAM用来存放数据或指令。其特点是:在微机系统的工作过程中,可以随机地对其中的各个存储单元进行读/写操作,读写方便,使用灵活;缺点是易失性存储器。(1)静态RAM(SRAM)是以双稳态元件作为基本的存储单元来保存信息的,因此,其保存的信息在不断电的情况下,是不会被破坏的。其特点是速度快、片容量小、功耗大。用于RAM容量较小或要求存取速度较高的系统中。在计算机中常用于超高速缓存。(2)动态RAM(DRAM)是靠电容的充、放电原理来存放信息的,必须定时进行刷新。其特点是存储元中管子的数目较少(1个),有利于集成,速度比SRAM慢,片容量大,功耗低,成本比SRAM低。缺点是每隔一定时间需要刷新一次。适合于构成RAM容量较大或要求低功耗的存储器系统。在计算机中常用于内存。8.现有一存储体芯片容量为512×4位,若要用它组成4KB的存储器,需要多少这样的芯片?每块芯片需要多少寻址线?整个存储系统需要多少寻址线?解:(1)组成4KB的存储器需要存储体芯片的数量为:(8/4)×(4×1024/512)=16片(2)因为512=29所以每块芯片需要寻址线数目为:9根(3)因为每块芯片需要寻址线数目为9根,整个存储系统需要8组存储体芯片(每组两片),用138译码器,则至少需要3根地址线。因此整个存储系统需要9+3=12根地址线。13.用8K×8位的EPROM2764,8K×8位的RAM6264和译码器74LS138构成一个16K字ROM,16K字RAM的存储器系统。8086工作在最小模式,系统带有地址锁存器8282,数据收发器8286。画出存储器系统与CPU的连接图,写出各芯片的地址分配。解:(1)用8086CPU组成16K字ROM,16K字RAM的存储器系统。需要4片EPROM2764,4片RAM6264。电路原理图如下图所示。1#、2#2764的地址范围为:00000~03FFFH(1#为偶数地址,2#为奇数地址),3#、4#2764的地址范围为:04000~07FFFH(3#为偶数地址,4#为奇数地址),1#、2#6264的地址范围为:08000~0BFFFH(5#为偶数地址,6#为奇数地址),3#、4#6264的地址范围为:0C000~0FFFFH(7#为偶数地址,8#为奇数地址)。-可编辑修改-
33(1)用8088CPU组成16KBROM,16KBRAM的存储器系统。需要2片EPROM2764,2片RAM6264。电路原理图如下图所示。1#2764的地址范围为:00000~01FFFH2#2764的地址范围为:02000~03FFFH1#6264的地址范围为:04000~05FFFH2#6264的地址范围为:06000~07FFFH第6章作业P2302.什么叫I/O端口?一般的接口电路中可以设置哪些端口?计算机对I/O端口寻址时可采用哪两种方法?在8086/8088CPU中一般采用那种编制方法?答:(1)端口:在接口电路中,存放数据、状态和控制信息的寄存器及其控制逻辑统称为I/O端口。(2)一般的接口电路中可以设置数据端口、状态端口和命令端口(控制端口)等。(3)计算机对I/O端口寻址时可采用I/O统一编址(存储器映像寻址)和I/O端口独立编址两种方法。(4)在8086/8088CPU中对I/O端口寻址采用独立编址方法。-可编辑修改-
342.CPU与外设间传送数据主要有哪几种方式?CPU与外设之间传输数据的控制方式通常有三种:程序控制方式、中断方式和DMA方式。(1)程序控制方式:指用输入/输出指令来控制信息传输的方式,是一种软件控制方式,根据程序控制的方法不同,又可以分为无条件传送方式和条件传送方式。无条件传送方式:CPU认为接口始终是处于“准备好”状态,能随时接收或发送数据,适用于那些能随时读写的设备。特点是接口简单,要求输入有缓冲,输出有锁存。应用的局限性较大,一般只适用于诸如开关控制、七段数码管的显示控制等场合。条件传送方式:通过程序查询相应设备的状态,若状态不符合,则CPU不能进行输入/输出操作,需要等待;只有当状态信号符合要求时,CPU才能进行相应的输入/输出操作。特点是接口电路简单,CPU利用率低(程序循环等待),接口需向CPU提供查询状态。适用于CPU不太忙,传送速度要求不高的场合。要求各种外设不能同时工作,外设处于被动状态。(2)中断传送方式:当外设准备好时,由外设通过接口电路向CPU发出中断请求信号,CPU在允许的情况下,暂停执行当前正在执行的程序,响应外设中断,转入执行相应的中断服务子程序,与外设进行一次数据传送,数据传送结束后,CPU返回继续执行原来被中断的程序。特点是CPU的利用率高,外设具有申请CPU中断的主动权,CPU和外设之间处于并行工作状态。但中断服务需要保护断点和恢复断点(占用存储空间,降低速度),CPU和外设之间需要中断控制器。适用于CPU的任务较忙、传送速度要求不高的场合,尤其适合实时控制中的紧急事件处理。(3)DMA方式:外设利用专用的接口(DMA控制器)直接与存储器、外设进行高速数据传送,并不经过CPU(CPU不参与数据传送工作),总线控制权不在CPU处,而由DMA控制器控制。特点是接口电路复杂,硬件开销大。大批量数据传送速度极快。适用于存储器与存储器之间、存储器与外设之间的大批量、高速数据传送的场合。DMA传送的基本过程:①外设准备就绪时,向DMA控制器(DMAC)发DMA请求,DMAC接到此信号后,向CPU发DMA请求,CPU的HOLD有效。②CPU接到HOLD请求后,如果条件允许(一个总线操作结束),则发出HLDA信号作为响应,同时,释放对总线的控制权③DMAC取得总线控制权后,DMAC成为主设备,DMAC控制存储器与外设端口之间的数据传送(往地址总线发送地址信号,每传送1个字节,就会自动修改地址寄存器的内容,以指向下一个要传送的字节;每传送一个字节,字节计数器的值减1,当减到0时,DMA过程结束)④传送结束,DMAC向CPU发结束信号,将总线控制权交回CPU。⑤DMAC又回到从设备的状态。6.某一个微机系统中,有8块I/O接口芯片,每个接口芯片占8个端口地址,若起始地址为300H,8块接口芯片的地址连续分布,用74LS138作译码器,试画出端口译码电路,并说明每块芯片的端口地址范围。(CPU采用8088)解:8088CPU,地址连续分布,则8片I/O接口芯片的地址应为:300----307H、308----30FH、310----317H、318----31FH、320----327H、328----32FH、330337H、33833FH。AAAAAAAAAAAA十六进制地址111098765432101#:001100000000B300H001100000111B307H2#:001100001000B308H001100001111B30FH-可编辑修改-
353#:001100010000B310H000100010111B317H4#:001100011000B318H001100011111B31FH5#:001100100000B320H001100100111B327H6#:001100101000B328H001100101111B32FH7#:001100110000B330H001100110111B337H8#:001100111000B338H001100111111B33FH根据CPU外扩I/O接口的原理,从8片I/O接口的地址范围可以看出:A~A为每片I/O接口自己的范20围,需要接CPU的低位地址线A~A;变化的地址为,用74LS138做译码器,则译码器输入为AAA,AA=0020(经或门后接74LS138译码器的G2A54376,本题中把未用的高位地址线或门后接74LS138译码器的G),2AAA=11(经与门后接74LS138译码器的G),M/IO接74LS138译码器的G。1#~7#I/O接口的片选接982B到74LS138译码器的输出Y~Y上。07电路原理图如下图所示。各芯片地址范围如下:1#芯片:300----307H2#芯片:30830FH3#芯片:310----317H4#芯片:31831FH5#芯片:320----327H6#芯片:32832FH7#芯片:330----337H8#芯片:33833FH注:8086系统要指出奇偶口地址(16个地址中)1.CPU与外设交换数据时,为什么要通过I/O接口进行?I/O接口电路具有哪些主要功能?-可编辑修改-
36答:(1)由于输入/输出设备(外设)比较复杂,性能的离散性比较大,不同的外设,其结构方式、输入/输出的信号类型、输入/输出信息的速率相差很大。而同一个外设与CPU之间所要传送的信息类型不同,方向不同,作用也不一样。因此,CPU与外部设备之间的信息交换技术比较复杂。所以需要一个中间处理电路——接口电路来分别协调、处理、传送这些不同的信息。(2)I/O接口电路具有寻址、输入/输出、数据缓冲、联络、数据转换、中断管理、时序控制、可编程、电器特征匹配、错误检测等主要功能。8.什么叫总线?总线分哪几类?在微型计算机中采用总线结构有什么好处?答:(1)总线:总线是一组信号线的集合,是一种在各模块间传送信息的公共通路。(2)总线的分类方法:按相对于CPU与其他芯片的位置总线可分为:片内总线和片外总线;按总线传送信息的类别,可把总线分为:地址总线、数据总线和控制总线;按照总线传送信息的方向,可把总线分为:单向总线和双向总线;按总线的层次结构总线可分为:片内总线、片级总线、系统总线和外部总线。(3)在微机系统中,利用总线实现芯片内部、印刷电路板各部件之间、机箱内各插件板之间、主机与外部设备之间或系统与系统之间的连接与通信。总线是构成微型计算机应用系统的重要技术,总线设计好坏会直接影响整个微机系统的性能、可靠性、可扩展性和可升级性。第7章作业P2816.如果中断类型号n=4,它的中断服务子程序的入口地址为CS:IP=0485:0016H,它在中断向量表中如何存放?解:中断类型号n=4,中断向量指针=中断类型号×4=n×4=10H从内存中断向量指针00010H开始的单元开始存放中断向量,CS占高2个字节,IP占低2个字节。具体如下:16H00H85H04H00010H00011H00012H00013H11.8086中断响应和处理有哪些主要步骤?答:(1)CPU响应中断的条件为:外设提出中断申请,CPU允许中断(本中断位未被屏蔽,本中断位优先级别最高),当前指令执行完。(2)CPU在INTR引脚上接到一个中断请求信号,如果此时IF=1,本中断位未被屏蔽,CPU就会在当前指令执行完以后开始响应外部的中断请求,这时,CPU在INTA引脚连续发两个负脉冲,第一个负脉冲用来通知外设,CPU准备响应中断,外设在接到第二个负脉冲以后,在数据线上发送中断类型码,接到这个中断类型码后,CPU做如下动作:①将中断类型码放入暂存器保存;②将标志寄存器内容压入堆栈;③将IF和TF标志清0;-可编辑修改-
37④保护断点;⑤根据取到的中断类型码,计算中断向量指针,在中断向量表中找出相应的中断向量,将其装入IP和CS,即自动转向中断服务子程序;⑥中断返回。第8章作业P2531.8253芯片有几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什么?答:(1)8253芯片有3个计数通道。(2)每个计数通道均可工作于6种工作方式。方式1—可重复触发的单稳态触发器,方式2—自动重装初值的N分频器,方式3—方波发生器,方式4—软件触发的选通信号发生器,方式5—硬件触发的选通信号发生器。输出波形:0、1单稳输出,2、4、5为单次负脉冲,3为方波。2、3为连续波形,其余为不连续波形;1、5可硬件重复触发。初始电平:写入控制字,只有0为低电平,其余均为高电平;写入初值,在GATE有效的情况下(计数期间),0、1为低电平,2、3、4、5均为高电平。触发方式:0、4为电平触发,上升沿继续。0是GATE=0停止计数,GATE再次为1,从中止处继续。4是GATE=0停止,GATE再次为1,从原装初值开始计数。1、5为边沿触发,计数过程中再次出现GATE上升沿,计数器按原装初值开始计数。2、3为电平触发,上升沿有效,GATE=0停止计数,计数过程中再次出现GATE上升沿,计数器按原装初值开始计数。计数过程重新写入初值:0、4在GATE=1时,立即按新初值开始计数。1、5不影响目前的计数,只有在GATE再次出现上升沿时,按新初值开始计数。2、3不影响本次输出,本次计数结束后,若GATE=1,(重装新初值)按新初值开始计数。自动重装能力:2、3具有自动重装能力(其余没有),可输出连续的波形。可重复触发能力:1、5具有可重复触发能力(其余没有)。2.8253的最高工作频率是多少?8254与8253的主要区别是什么?解:8253的最高工作频率是2MHz。8254是8253的增强型产品,引脚兼容,功能几乎完全相同,其主要区别在于:(1)8253的最高工作频率是2MHz,而8254的最高工作频率是10MHz;(2)8254具有读回功能,可以同时锁存13个计数器的计数值及状态值,供CPU读取,而8253每次只能锁存和读取一个通道的计数器,且不能读取状态值。4.设8253的通道02和控制口的地址分别为300H、302H、304H、306H,设系统的时钟脉冲频率为2MHz。要求:(1)通道0输出1KHz的方波;(2)通道1输出频率为500Hz的序列负脉冲;(3)通道3输出单脉冲,宽度为400s。试画出硬件电路图,编写各通道的初始化程序。解:8253的口的地址分别为300H、302H、304H、306H,连续的偶地址,说明CPU为8086.(1)通道0输出1KHz的方波,应工作在方式3。2MHz/1KHz=2000,则可得通道0的定时初值为2000。(2)通道1输出频率为500Hz的序列负脉冲,应工作在方式2。2MHz/500Hz=4000,通道1的定时初值=4000-可编辑修改-
38(1)通道2输出单脉冲,宽度为400µs,应工作在方式0,通道2的定时初值=400µs/(1/2MHz)-1=799。硬件连结图如下图所示。8253的初始化程序:;通道0初始化程序MOVDX,306HMOVAL,00110111B;通道0控制字,读写两字节,方式3,BCD码计数OUTDX,ALMOVDX,300HMOVAL,00HOUTDX,AL;写人低字节MOVAL,20HOUTDX,AL;写人高字节;通道1初始化程序MOVDX,306HMOVAL,01110101B;通道1控制字,读写两字节,方式2,BCD码计数OUTDX,AL;写人方式字MOVDX,302HMOVAL,00H;低字节OUTDX,AL;写人低字节MOVAL,40HOUTDX,AL;写人高字节;通道2初始化程序MOVDX,306HMOVAL,10110001B;通道2方式字,读写两字节,方式0,BCD码计数OUTDX,ALMOVDX,304HMOVAL,99H;计数初值字节OUTDX,AL;写人低字节MOVAL,07HOUTDX,AL;写人高字节HLT4.设8254的端口地址为4043H,时钟频率f=5MHz,通道2接1个LED指示灯。要求LED指示灯点亮4秒钟后,再熄灭4秒钟后。并不断重复该过程。试编写8254初始化程序。解:LED指示灯点亮4秒钟后,再熄灭4秒钟后。并不断重复该过程。利用通道2输出接LED指示灯,需要产生周期为8秒的方波。将5MHz时钟加到CLK2端,OUT2输出的方波脉冲周期最大为0.2μs×65536=13107.2μs=13.1072ms,达不到8秒。此时可以使用2个8254通道级连方式来实现。若级连1、2通道,设其初值分别为N1和N2,-可编辑修改-
398s/(1/5MHz)=40000000,则级连后作为一个整体的计数值为N=20000000=N1×N2=5000×8000。通道1,可选方式2或3,通道2,选方式3,连续波形,实现不断重复。N1=5000N2=8000;通道1初始化程序MOVAL,01110101B;通道1方式字,读写两字节,方式2,BCD码计数OUT43H,ALMOVAX,5000HOUT41H,AL;写人低字节MOVAL,AHOUT41H,AL;写人高字节HLT;通道2初始化程序MOVAL,10110111B;通道2控制字,读写两字节,方式3,BCD码计数OUT43H,ALMOVAX,8000HOUT42H,AL;写人低字节MOVAL,AHOUT42H,AL;写人高字节14.设8253的通道02和控制口的地址分别为300H、302H、304H、306H,定义通道0工作在方式3,CLK0=2MHz,使编写初始化程序,并画出硬件连接图。要求通道0输出1.5KHz的方波,通道1用通道0的输出作计数脉冲,输出频率为300Hz的序列负脉冲。通道2每秒钟向CPU发50次中断请求。解:8253的口的地址分别为300H、302H、304H、306H,连续的偶地址,说明CPU为8086.(1)通道0输出1.5KHz的方波,应工作在方式3,2MHz/1.5KHz=1334,则可得通道0的定时初值为1334=536H。(2)通道1用通道0的输出作计数脉冲,输出频率为300Hz的序列负脉冲,应工作在方式2,1.5KHz/300Hz=5。通道1的定时初值为5。(3)通道2每秒钟向CPU发50次中断请求,可工作在方式2(或方式3),以2MHz信号作计数脉冲,2MHz/50Hz=40000=9C40H。通道2的定时初值9C40H(也可用通道1的输出作计数脉冲)硬件连结图如下图所示。-可编辑修改-
408253的初始化程序:;通道0初始化程序MOVDX,306HMOVAL,00110110B;通道0控制字,读写两字节,方式3,二进制计数OUTDX,ALMOVDX,300HMOVAX,536HOUTDX,AL;写人低字节MOVAL,AHOUTDX,AL;写人高字节;通道1初始化程序MOVDX,306HMOVAL,01010100B;通道1控制字,只读写低宇节,方式2,二进制计数OUTDX,AL;写人方式字MOVDX,302HMOVAL,05H;低字节OUTDX,AL;写人低字节;通道2初始化程序MOVDX,306HMOVAL,10110100B;通道2方式字,读写两字节,方式2,二进制码计数OUTDX,ALMOVDX,304HMOVAX,9C40H;计数初值字节OUTDX,AL;写人低字节MOVAL,AHOUTDX,AL;写人高字节HLT14.某微机系统中,8253的端口地址为4043H,时钟频率为5MHz,要求通道0输出方波,使计算机每秒钟产生18.2次中断;通道1每隔15µs向8237提出一次DMA1请求;通道2输出频率为2000Hz的方波。试编写8253的初始化程序,并画出有关的硬件连线图。解:8253的口地址为40H、41H、42H、43H。(1)通道0输出方波,应工作在方式3,5MHz/18.2Hz=274725.3>16位定时器的最大定时初值65536。因-可编辑修改-
41此,需要两个计数器的级连。若以通道2的输出作为通道0的时钟输入,则可得通道0的定时初值=2000Hz/18.2Hz-1=110=6EH(1)通道1每隔15µs向8237提出一次DMA1请求,可工作在方式2(或方式3),通道1的定时初值=15µs/(1/5MHz)=75=4BH。(2)通道2输出频率为2000Hz的方波,应工作在方式3,通道2的定时初值=5MHz/2000Hz-1=2500-1=9C4H硬件连结图如下图所示。8253的初始化程序:;通道2初始化程序MOVAL,10110110B;通道2控制字,读写两字节,方式3,二进制计数OUT43H,ALMOVAX,9C4HOUT42H,AL;写人低字节MOVAL,AHOUT42H,AL;写人高字节;通道0初始化程序MOVAL,00010110B;通道0控制字,只读写低宇节,方式3,二进制计数OUT43H,AL;写人方式字MOVAL,6EH;低字节OUT40H,AL;写人低字节;通道1初始化程序MOVAL,01010100B;通道1方式字,只读写低字节,方式2,二进制码计数OUT43H,ALMOVAL,4BH;低字节OUT41H,AL;写人低字节HLT第9章作业P2319.8255A的方式选择字和置位复位字都写入什么端口?用什么方式区分它们?答:8255A的方式选择字和C口置位复位字都写入控制端口(写入控制字寄存器中)。用特征位D7区分,D7=1,为方式选择控制字,D7=0,为C口的按位置位/复位12.8255A的端口地址同第11题(80H,82H,84H,86H),要求PC4输出高电平,PC5输出低电平,PC6输出一个正脉冲,试写出完成这些功能的指令序列。解:MOVAL,10000010B-可编辑修改-
42OUT86H,ALMOVAL,00001001BOUT86H,ALMOVAL,00001010BOUT86H,ALMOVAL,00001100BOUT86H,ALMOVAL,00001101BOUT86H,ALMOVAL,00001100BOUT86H,ALHLT;设置8255的工作方式15.8255A的口地址为80H~83H。PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,用来显示开关的状态。当开关合上时相应的指示灯点亮,断开时灯灭。试画出硬件连结电路图(含具体的译码电路),编写实现这种功能的程序段。要求每隔20s检测一次开关状态,并随时在发光二极管LED7~LED0上显示出来。设CPU主频为5MHz,20秒子程序名为DELAY_20S)解:硬件电路如下图所示。8255A的4个端的地址分别为80H、81H、82H和83H,对应于8255A的PA口、PB口、PC口和控制字寄存器。主频率为5MHz时钟周期=主频率的倒数=1/(5×10-6)=0.2µs延时20s需要的时钟周期数=20s/0.2µs=100000000=N×N12假设N=10000=2710H1[((10000-1)×17+5)+4+3+3+16]×N+2×10+2×8+20=1000000002N=588=24CH2程序如下:MOVAL,10010000B;控制字OUT83H,AL;写人控制字TEST-IT:INAL,80H;从A口读人开关状态NOTAL;A口开关状态取反-可编辑修改-
43OUT81H,AL;B口控制LED,指示开关状态CALLDELAY_20SJMPTEST_IT;循环检测DELAY_20S:PUSHBXPUSHCXMOVBX,24CH;延时20s,改变BX和CX中的值,即可改变延时时间。DEL1:MOVCX,2710H;DEL2:LOOPDEL2NOPDECBXJNZDEL1POPCXPOPBXRET延时子程序的时钟周期数:((10000-1)×17+5)+4+3+3+16]×588+2×10+2×8+20=99968288延时子程序的延时时间:99968288×(1/(5×106))=19.9936576s不加NOP指令的计算:延时子程序的时钟周期数:((10000-1)×17+5)+4+3+16]×588+2×10+2×8+20=99966524延时子程序的延时时间:99968288×(1/(5×106))=19.9933048sP28221.某微机系统用8253做定时器,其口地址为40H~43H;8255A的PA口接8个开关K7~K0,PB口接8个指示灯LED7~LED0,其口地址为60H~63H;用8259A做中断控制器,其口地址为20H~21H;每隔1秒钟中断一次,读开关状态,并将开关状态显示在LED指示灯上。当开关合上时相应的指示灯点亮,断开时灯灭。要求:(1)画出硬件连结电路图(2)编写程序。(设8253的CLK上接2MHz的时钟信号)解:8253口地址为40H~43H,8255A口地址为60H~63H,8259A口地址为20H~21H;从地址连续可以看出:CPU是8088。AAAA7654AAAA3210十六进制地址8259:0010000020H0010000121H8253:0100000040H0100000141H0100001042H0100001143H8255:0110001060H0110001161H0110001062H0110001163H采用74LS138译码器,根据:-可编辑修改-
44除用于接口芯片的内部端口的寻址的CPU低位地址线外,CPU的高位地址线中,所有芯片电平相同的地址通过逻辑电路(与、或门)连接到译码器的控制端上,所有芯片电平不同的地址作为译码器的译码输入线,译码器输出连接接口芯片的片选。则:AAA用于译码,AAA=000(AA经与或门后接74LS138译码器的G、A接74LS138译码器的765432432A2G),74LS138译码器的G接电源。8259A片选接译码器的Y,8253片选接译码器的Y,8255A片选2B12接译码器的Y3。系统硬件电路如下:设8259芯片中断类型码为40~47H。8253的OUT1接到8259的IR2上,用于产生中断。8253的定时时间为1s,设8253的CLK上接2MHz时钟信号,则计数初值N=1/[1/(2×106)]=2×106,超过了8253一个通道的最大计数值216=65536,采用用2个8253通道(通道0和通道1)级连方式实现。N=N0×N1=2000×1000。所以:通道0的初值N0=2000,通道1的初值N1=1000。通道0工作在方式2,通道1工作在方式3。程序如下:;设置8259的中断向量MOVAX,SEGIRQ2MOVDS,AXMOVDX,OFFSETIRQ2MOVAL,42HMOVAH,25HINT21H;8259初始化MOVAL,13H;ICW1边沿触发,单片8259,有ICW4OUT20H,ALMOVAL,40H;ICW2中断类型号基值为40HOUT21H,ALMOVAL,01H;ICW48088系统,普通EOI,;完全嵌套式OUT21H,ALMOVAL,0FDHOUT21H,AL;OCW1,设置IMR,中断屏蔽;8255初始化MOVAL,90H;PA口输入,方式0;PB口输出,方式0-可编辑修改-
45OUT63H,AL;8253初始化;通道0初始化程序MOVAL,00110101B;通道0控制字,读写两字节,方式2,十进制计数OUT43H,ALMOVAL,00HOUT40H,AL;写人低字节MOVAL,20HOUT40H,AL;写人高字节;通道1初始化程序MOVAL,01110111B;通道1控制字,读写两字节,方式3,十进制计数OUT43H,ALMOVAL,00HOUT41H,AL;写人低字节MOVAL,10HOUT41H,AL;写人高字节;主程序STIZX:NOPJMPZX;中断服务子程序IRQ2:PUSHAXSTIINAL,60H;从8255的PA口读人开关状态NOTAL;8255的PA口开关状态取反OUT61H,AL;8255的PB口控制LED,指示开关状态MOVAL,20HOUT20H,AL;发中断结束普通EOI命令POPAXIRET19.8255A的口地址为80H~83H,8253的口地址为84H~87H。(1)若A口接8个开关K7~K0,B口接8个指示灯LED7~LED0,当开关合上时相应的指示灯点亮,断开时灯灭。要求每隔0.5s检测一次开关状态,并随时在发光二极管LED7~LED0上显示出来。试画出硬件连结电路图,编写实现这种功能的程序。(2)若把A口接的开关去掉,要求B口接的8个指示灯轮流熄灭(轮流点亮为跑马灯),每只灯熄灭1s,编写实现这种功能的程序。解:(1)硬件电路如下图所示。-可编辑修改-
46其中:8255A的4个端的地址分别为:80H、81H、82H和83H,对应于8255A的A口、B口、C口和控制字寄存器。8253的4个端的地址分别为:84H、85H、86H和87H,对应于8253的T0、T1、T2和控制字寄存器。8259的2个端的地址分别为:88H、89H。设8259的中断类型号为40~48H,IRQ2的中断类型号为42H。8253需要定时0.5s,通过T0,T1通道级联实现。0.5s/(1/2MHz)=1000000,设T0工作于方式2,初值为1000;T1工作于方式3,初值为1000(T1如果工作于方式0,则在中断服务子程序中需要重新写入初值,实现软件触发)。程序如下:;设置8259的中断向量MOVAX,SEGIRQ2MOVDS,AXMOVDX,OFFSETIRQ2MOVAL,42HMOVAH,25HINT21H;8259初始化MOVAL,13H;ICW1边沿触发,单片8259,有ICW4OUT88H,ALMOVAL,40H;ICW2中断类型号基值为40HOUT89H,ALMOVAL,01H;ICW48088系统,普通EOI,;完全嵌套式OUT89H,ALMOVAL,0FDHOUT89H,AL;OCW1,设置IMR,中断屏蔽;8255初始化MOVAL,90H;PA口输入,方式0;PB口输出,方式0OUT83H,AL;8253初始化-可编辑修改-
47;通道0初始化程序MOVAL,00110101B;通道0控制字,读写两字节,方式2,十进制计数OUT87H,ALMOVAL,00HOUT84H,AL;写人低字节MOVAL,10HOUT84H,AL;写人高字节;通道1初始化程序MOVAL,01110110B;通道1控制字,读写两字节,方式3,十进制计数OUT87H,ALMOVAL,00HOUT85H,AL;写人低字节MOVAL,10HOUT85H,AL;写人高字节;主程序STIZX:HLTJMPZX;中断服务子程序IRQ2:PUSHAXSTIINAL,80H;从A口读人开关状态NOTAL;A口开关状态取反OUT81H,AL;B口控制LED,指示开关状态MOVAL,20HOUT88H,AL;发中断结束普通EOI命令POPAXIRET(2)与(1)类似。但1s/(1/2MHz)=2000000,设T0工作于方式2,初值为2000;T1工作于方式3,初值为1000(T1如果工作于方式0,则在中断服务子程序中需要重新写入初值,实现软件触发)。程序如下:;设置8259的中断向量XORAX,SEGIRQ2MOVDS,AXMOVDX,OFFSETIRQ2MOVAL,42HMOVAH,25HINT21H;8259初始化MOVAL,13H;ICW1边沿触发,单片8259,有ICW4OUT88H,ALMOVAL,40H;ICW2中断类型号基值为08HOUT89H,ALMOVAL,01H;ICW48088系统,普通EOI,;完全嵌套式OUT89H,ALMOVAL,0FDH-可编辑修改-
48OUT89H,AL;OCW1,设置IMR,中断屏蔽;8255初始化MOVAL,90H;PA口输入,方式0;PB口输出,方式0OUT83H,AL;8253初始化;通道0初始化程序MOVAL,00110101B;通道0控制字,读写两字节,方式2,十进制计数OUT87H,ALMOVAL,00HOUT84H,AL;写人低字节MOVAL,20HOUT84H,AL;写人高字节;通道1初始化程序MOVAL,01010110B;通道1控制字,读写两字节,方式3,十进制计数OUT87H,ALMOVAL,00HOUT85H,AL;写人低字节MOVAL,10HOUT85H,AL;写人高字节;主程序MOVAL,0FEH;熄灭一个灯,点亮一个灯为:01HOUT81H,AL;写人高字节STIZX:HLTJMPZX;中断服务子程序IRQ2:STIROLAL,1;熄灭灯左移,轮流熄灭OUT81H,ALPUSHAX;MOVAL,20HOUT88H,AL;发中断结束普通EOI命令POPAXIRET-可编辑修改-
49THANKS致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考-可编辑修改-
此文档下载收益归作者所有