首页 《计算机硬件技术基础》实验答案程序

《计算机硬件技术基础》实验答案程序

举报
开通vip

《计算机硬件技术基础》实验答案程序实验一:简单程序设计实验(1)编写一个32位无符号数除法的程序,要求将存放在NUM1中的32位无符号数与存放在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。程序流程图略。参考源程序:DATASEGMENTNUM1DD2A8B7654HNUM2DW5ABCHNUM3DW?NUM4DW?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA;数据段寄存器初始化MOVDS,AXMOVAX,WORDPTRNUM1MOVDX,WORDPTRNUM1+...

《计算机硬件技术基础》实验答案程序
实验一:简单程序设计实验(1)编写一个32位无符号数除法的程序,要求将存放在NUM1中的32位无符号数与存放在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图略。参考源程序:DATASEGMENTNUM1DD2A8B7654HNUM2DW5ABCHNUM3DW?NUM4DW?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA;数据段寄存器初始化MOVDS,AXMOVAX,WORDPTRNUM1MOVDX,WORDPTRNUM1+2DIVNUM2MOVNUM3,AXMOVNUM4,DXMOVAH,4CH;正常返回DOS系统INT21HCODEENDSENDSTART(2)编写一个拆字程序。要求将存放在ARY单元的2位十六进制数X1X2拆为X1和X2两部分,并以0X1和0X2的形式分别存入ARY+1和ARY+2单元中。程序流程图略。参考源程序:DATASEGMENTARYDB2AH,?,?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETARY;取ARY的偏移地址MOVAL,[SI];取16进制数至ALMOVBL,ALANDAL,0F0H;取16进制数的高四位,即X1SHRAL,4MOV[SI+1],AL;存0X1MOVAL,BLANDAL,0FH;取16进制数的低四位,即X2MOV[SI+2],AL;存0X2MOVAH,4CHINT21HCODEENDSENDSTART实验二:分支程序设计实验(1)编写一个字符比较程序,比较3个无符号字节数A,B,C的大小,并根据比较结果对变量K赋值:如果3个数不相等,则K=0;如果3个数中有两个相等,则K=1;如果3个数都相等,则K=2。程序流程图略。参考源程序:DATASEGMENT;定义待比较数A、B、C,比较结果KADB20HBDB20HCDB20HKDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,ACMPAL,B;对A、B进行比较,不相等则转到COMP2JNECOMP2;相等则比较A、CCMPAL,CJNEK1;A、C不相等则K=1JMPK2;A、C相等则K=2COMP2:MOVBL,BCMPBL,CJEK1;对B、C进行比较,相等则K=1CMPAL,CJEK1;对A、C进行比较,相等则K=1K0:MOVK,0JMPEXITK1:MOVK,1JMPEXITK2:MOVK,2EXIT:MOVAH,4CHINT21HCODEENDSENDSTART(2)编写一个能实现下列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式的程序:⎧N=⎨A+BA≤B设A,B,C为小于128的正整数。⎩A−B+C程序流程图略。参考源程序:DATASEGMENTA>BADB22H;定义A、B、C、NBDB10HCDB01HNDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,ACMPAL,BJGCALCUL;A小于或等于B则N=A+BADDAL,BJMPEXITCALCUL:SUBAL,BADCAL,CEXIT:MOVN,ALMOVAH,4CHINT21HCODEENDSENDSTART实验三循环程序设计实验(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。程序流程图略。参考源程序:DATASEGMENTSTRNDB'What$';任意定义一个字串,以“$”结尾COUNTEQU$-STRNNDB?BUFDBCOUNTDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,DATAMOVES,AXLEASI,STRNLEADI,BUFMOVCX,COUNTMOVAL,0LP1:MOVBL,[SI];逐个取字符进行判断ANDBL,BL;自己和自己做与运算JPNEXT;根据PF标志位的变化进行跳转INCALORBL,80HNEXT:MOV[DI],BLINCSIINCDILOOPLP1MOVN,ALMOVAH,4CHINT21HCODEENDSENDSTART(2)在FIRST开始的一片连续的数据区中存放着100个数据,编写一个程序,统计第1个数据‘0’之前的数据个数。程序流程图略。参考源程序:DATASEGMENTFIRSTDB10H,24H,34H,73H,20H,44H,03H,36H,41H;任取9个数做演示COUNTEQU$-FIRSTNUMDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,0;计数值初始为0MOVCX,COUNTMOVBX,OFFSETFIRSTLP1:MOVAL,[BX];每次取一个数,与0比较CMPAL,00HJNENEXTJMPEXIT;找到0则退出NEXT:INCDL;没找到0则计数值加1INCBXLOOPLP1EXIT:MOVNUM,DLMOVAH,4CHINT21HCODEENDSENDSTART实验四:子程序设计实验将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。程序流程图略。参考源程序:(1)实现方法一:远过程调用DATASEGMENTBUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNTEQU$-BUF;定义任意长度的一段BUFDATAENDSSTACK1SEGMENTSTACKDB100DUP(?);设置足够深度的栈区STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTAGAIN:MOVAL,[SI];逐个取数MOVBL,ALSHRAL,4ANDAL,0FH;先对高字节部分转换(寄存器AL传参)CALLFARPTRHEXASC;调用子程序MOVDL,ALMOVAH,02H;显示高字节部分对应的字符INT21HMOVAL,BLANDAL,0FH;再对低字节部分转换(寄存器AL传参)CALLFARPTRHEXASC;调用子程序MOVDL,ALMOVAH,02H;显示低字节部分对应的字符INT21HMOVDL,20HMOVAH,02H;显示空格INT21HINCSILOOPAGAINMOVAH,4CHINT21HCODEENDSCODEBSEGMENTASSUMECS:CODEBHEXASCPROCFARCMPAL,09H;判断是不是数字JAHEXATOF;是字母则转到HEXATOFADDAL,30H;是数字则对应到数字的ASCII码JMPENDHEXHEXATOF:ADDAL,37H;是字母则对应到字母的ASCII码ENDHEX:RETHEXASCENDPCODEBENDSENDSTART(2)实现方法二:近过程调用DATASEGMENTBUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNTEQU$-BUF;定义任意长度的一段BUFDATAENDSSTACK1SEGMENTSTACKDB100DUP(?);设置足够深度的栈区STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTAGAIN:MOVAL,[SI];逐个取数MOVBL,ALSHRAL,4ANDAL,0FH;先对高字节部分做转换CALLHEXASCMOVDL,AL;显示高字节部分对应的字符MOVAH,02HINT21HMOVAL,BLANDAL,0FH;再对低字节部分做转换CALLHEXASCMOVDL,AL;显示低字节部分对应的字符MOVAH,02HINT21HMOVDL,20H;显示空格MOVAH,02HINT21HINCSI;继续循环或退出LOOPAGAINMOVAH,4CHINT21HHEXASCPROCNEARCMPAL,09HJAHEXATOFADDAL,30HJMPENDHEXHEXATOF:ADDAL,37HENDHEX:RETHEXASCENDPCODEENDSENDSTART实验五:DOS中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。试编程实现该功能。程序流程图略。参考源程序:DATASEGMENTMSGDB0AH,0DH,'RIGHT',0AH,0DH,'$'WRNDB0AH,0DH,'ERROR',0AH,0DH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXAGAIN:MOVAH,01H;等待用户输入1个字符并显示INT21HCMPAL,39HJAEMSGCMPAL,30HJBEMSG;判断输入是否是数字,不是则报错MOVAH,01H;等待用户输入1个字符并显示INT21HCMPAL,'A'JBEMSGCMPAL,'Z';判断输入是否是大写字母,不是则继续JBEXIT;判断是不是小写字母CMPAL,'a'JBEMSGCMPAL,'z'JBEXIT;不是字母则报错,是字母则转到EXITEMSG:LEADX,WRNMOVAH,09HINT21HJMPAGAINEXIT:MOVDX,OFFSETMSGMOVAH,09H;显示“RIGHT”并退出INT21HMOVAH,4CHINT21HCODEENDSENDSTART(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter和other3个存储单元中,并显示结果。程序流程图略。参考源程序:DATASEGMENTMSG1DB0AH,0DH,'Numberofdigit:',20H,'$'MSG2DB0AH,0DH,'Numberofletters:',20H,'$'MSG3DB0AH,0DH,'Numberofothercharacters:',20H,'$'BUFDB50DB0DB50DUP(?);设置足够深的栈区DIGITDB?LETTERDB?OTHERDB?DATAENDSSTACK1SEGMENTSTACKDB100DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVAH,0AH;等待用户输入字符串并显示MOVDX,OFFSETBUFINT21HMOVSI,OFFSETBUFMOVCL,[SI+1]MOVCH,00HMOVAL,00HMOVAH,00HMOVBH,00HAGAIN:MOVBL,[SI+2]CMPBL,30HJBOTH;ASCII码小于30H则归类为“其它”CMPBL,3AHJBDIG;ASCII码大于等于30H小于3AH则归类为“数字”CMPBL,41HJBOTH;ASCII码大于等于3AH小于41H则归类为“其它”CMPBL,5BHJBLET;ASCII码大于等于41H小于5BH则归类为“字母”CMPBL,61HJBOTH;ASCII码大于等于5BH小于61H则归类为“其它”CMPBL,7BHJBLET;ASCII码大于等于61H小于7BH则归类为“字母” OTH: INCAL ;“其它”计数器加1 DIG: JMPENDLPINCAH ;“数字”计数器加1 LET: JMPENDLPINCBH ;“字母”计数器加1ENDLP:INCSILOOPAGAIN;继续循环MOVDIGIT,AH;统计各类个数MOVAH,00HMOVDH,0AHDIVDHMOVCH,AHADDAL,30HMOVDL,ALMOVAH,02HINT21HADDCH,30HMOVDL,CHMOVAH,02HINT21HRETDISPENDPCODEENDSENDSTART实验六:扩展定时器/计数器接口实验(1)计数器0工作于方式3,编写初始化程序,观察其输出OUT0信号的波形。修改计数初值,观察OUT0信号的变化情况。硬件连接方法:8254计数器0的CLK0端接规则的脉冲输入(频率自选),OUT0接示波器的正极;示波器负极接地。程序流程图略。参考源程序:DATASEGMENTDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,20FH;写入计数器0的控制字MOVAL,00010110BOUTDX,ALMOVDX,20CH;写入计数器0的计数初值MOVAL,05HOUTDX,ALMOVAH,4CHINT21HCODEENDSENDSTART(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1和OUT0信号的波形,说明二者的关系。修改计数初值,观察OUT0和OUT1输出波形的变化情况。硬件连接方法:8254计数器1的CLK1端接规则的脉冲输入(频率自选),OUT1接8254计数器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。程序流程图略。参考源程序:DATASEGMENTDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,20FHMOVAL,00010110B;写入计数器0的控制字OUTDX,ALMOVDX,20CH;写入计数器0的计数初值MOVAL,05HOUTDX,ALMOVDX,20FHMOVAL,01010110B;写入计数器1的控制字OUTDX,ALMOVDX,20DH;写入计数器1的计数初值MOVAL,02HOUTDX,ALMOVAH,4CHINT21HCODEENDSENDSTART实验七:并行输入/输出接口8255A简单编程实验(1)利用8255A的B口输出控制两组发光二级管L1,L3,L5,L7和L2,L4,L6,L8亮灭交替变化。分析:按照题目要求,当8255A的B口输出为01010101B(55H)时,发光二极管L1,L3,L5,L7会被点亮,当8255A的B口输出为10101010B(0AAH)时,发光二极管L2,L4,L6,L8会被点亮。因此,通过延时改变8255A的B口输出,即可实现两组发光二极管的亮灭交替变化。由于LED随时出于准备好的状态,因此8255A的B口可工作于方式0输出,其它端口未使用,无需考虑。因此,8255A的方式控制字为:10000000B(80H)。硬件连接方法:8255A的B口PB0~PB7分别连接L1~L8。程序流程图略。参考源程序:.486DATASEGMENTPORTADW208H;8255A端口A地址PORTBDW209H;8255A端口B地址PORTCDW20AH;8255A端口C地址PORT_CTRDW20BH;8255A控制端口地址DATAENDSSTACK1SEGMENTSTACKDB100DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AX MOVDX,PORT_CTRMOVAL,10000000B ;8255A初始化;控制字 OUTDX,AL MOVDX,PORTBMOVAL,00HOUTDX,AL ;8255A端口B清零,LED初始化(全灭) LP0: MOVBL,01010101BMOVAL,BLOUTDX,ALCALLDELAY NOTALMOVBL,ALMOVAH,01H;调用BIOS的16H功能判断键盘是否有输入INT16HJNZEXITJMPLP0EXIT:MOVAH,4CHINT21HDELAYPROCNEAR;延时子程序(可通过修改NOP指令数量改变延时时间)MOVECX,0FFFFFFFHLP2:NOPLOOPDLP2RETDELAYENDPCODEENDSENDSTART(2)利用8255A的A口读入8个开关K1~K8的状态,当只有K1合上时,L1~L8显示00000001B;当只有K1和K2合上时,L1~L8显示00000010B;当只有K1,K2和K3合上时,L1~L8显示00000011B;当只有K1,K2,K3和K4合上时,L1~L8显示00000100B;…直到所有开关合上时,L1~L8显示00001000B,并结束程序的运行。发光二极管的状态通过8255A的B口进行控制。分析:按照题目要求,可以通过查询的方式读取8255A的B口状态,并根据查询的结果给A口送出相应数据,A口工作在方式0的输入状态,B口工作在方式0输出状态,C口不需要考虑,所以8255A的方式控制字为:10010000B)硬件连接方法:(1)8255A的A口PA0~PA7对应连接K1~K8;(2)8255A的B口PB0~PB7对应连接L1~L8;源代码:DATASEGMENTLISTDB01H,03H,07H,0FH,1FH,3FH,7FH,0FFHDATAENDSSTACK1SEGMENTSTACKDB100DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVDX,20BH;8255A初始化MOVAL,10010000BOUTDX,ALMOVDX,209H;8255A的B口清零,LED初始化(全灭)MOVAL,00HOUTDX,ALL0:MOVDX,208H;读8255A的A口,获得开关状态INAL,DXMOVBL,00HMOVCX,8MOVSI,OFFSETLISTL1:INCBLCMPAL,[SI]JZFINDINCSILOOPL1JMPL0 FIND: MOVAL,BLMOVDX,209H ;当前开关状态为表中所列状态之一;显示LED状态 OUTDX,ALCMPAL,08HJNZL0 MOVAH,4CHINT21H CODEENDSENDSTART实验八:并行输入/输出接口8255A综合应用实验(1)利用8254计数器0、计数器1和8255A的B口实现对发光二极管的定时控制,让8个发光二极管每隔1s从左到右依次点亮。(要求计数器1的时钟脉冲频率为250kHz)。分析:根据题目要求,需要利用8254进行定时1s控制,定时到后,改变8255A的B口输出。可以利用中断的方式实现,8254定时到时向CPU申请中断,CPU相应中断后在中断程序中改变8255A的B口输出。由于题目要求8254的输入脉冲频率为250kHz,所以需要级联计数器1和计数器0实现1s定时(参考程序中利用计数器1进行20ms定时,计数器0进行50次计数,计数次数到时由OUT0向CPU申请中断)。8255A的B口控制LED,可工作在方式0输出,A口未使用,为了选通实验板上的中断输入C口的PC7须输出低电平,因此C口的高四位工作在方式0输出。综合上述要求,8254和8255A的初始化参数为:8254计数器1的计数初值为:N=20ms/4µs=5000D;方式控制字为:01110100B(74H)8254计数器0的计数初值为:N=50D;方式控制字为:00010100B(14H)8255A的方式控制字:10000000B(80H);C口按位置位/复位控制字:00001110B(0EH)(使PC7复位,允许8254的OUT0中断到达系统8259的IRQ3端)此外,利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统存储器中的中断向量表(修改中断类型号为0BH的中断向量)。硬件连接方法:(1)250kHz脉冲输出接8254的CLK1,OUT1接CLK0,OUT0接IRQ;(2)8255A的B口PB0~PB7对应连接L1~L8。程序流程图略。参考源程序:STACK1SEGMENTSTACKDB100DUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVES,AXMOVAL,80H;8255初始化,B口方式0输出,C口高4位输出MOVDX,PORT_CTROUTDX,ALMOVAL,0EH;PC7清零,允许8254中断到IRQ3OUTDX,ALMOVAL,00H;发光二极管初始化(全灭)MOVDX,PORTBOUTDX,ALMOVAX,350BH;保存系统原有0BH号中断的中断向量至堆栈INT21HPUSHESPUSHBXMOVAX,SEGINTPROCMOVDS,AXMOVDX,OFFSETINTPROCMOVAX,250BH;将程序要求的中断向量写入INT21HINAL,21H;设置8259的IMR寄存器,允许IRQ3中断ANDAL,0F7HOUT21H,ALSTI;开中断,CPU可以响应外部可屏蔽中断MOVDX,PORT3;8254计数器0初始化MOVAL,14HOUTDX,ALMOVDX,PORT0;计数器0写入计数初值50DMOVAL,50DOUTDX,ALMOVDX,PORT3;8254计数器1初始化MOVAL,74HOUTDX,ALMOVDX,PORT1;计数器1写入计数初值5000DMOVAX,5000DOUTDX,ALMOVAL,AHOUTDX,ALMOVBH,80H;BH存放当前8255A的B口输出MOVAL,BHMOVDX,PORTB;8255A的B口输出OUTDX,ALWAIT0:NOPNOPNOPMOVAH,01H;判断键盘上是否有键按下,若有则结束程序INT16HJNZEXITJMPWAIT0EXIT:POPDX;恢复中断向量表中的原有0BH号中断向量POPDSMOVAX,250BHINT21HMOVAH,4CHINT21HINTPROCPROCNEARMOVAL,BHRORAL,1MOVBH,ALMOVDX,PORTB;向8255A的B口写出数据,点亮对应LEDOUTDX,ALMOVAL,20H;向8259发出中断结束命令OUT20H,ALIRETINTPROCENDPCODEENDSENDSTART(2)8255A的A口与8个开关相连,工作于方式1下,要求:利用当前的开关状态通过B口控制L1~L8的亮或灭。A口的/STBA选通信号由按键K发出,每按一次K键,读入当前开关状态。分析:8255A的B口用来控制LED的亮灭,可工作在方式0下。根据题意,可以通过查询方式不断读取8255A的C口状态确定K键是否按下,也可以利用中断方式,当K键按下时,由INTRA(PC3)向CPU申请中断。当判断K键按下后,读取8255A的A口状态,并通过B口显示到LED上。利用查询方式实现时,仅需要给定方式选择控制字;利用中断方式实现时,除控制字外还需设定INTEA为1,允许INTRA申请中断。因此,8255A的方式控制字为:10110000B(0B0H);使INTEA(PC4)置1,其控制字为00001001B(09H)。{注意:利用中断方式实现时还需要置PC7为0,使INTRA能到达8259的IRQ3}硬件连接与参考源程序:(1)利用查询方式实现硬件连接:1)8255A的A口PA0~PA7与K1~K8对应相连;2)8255A的B口PB0~PB7与L1~L8对应相连;3)按键K接8255A的C口PC4。参考源程序:CODESEGMENTASSUMECS:CODESTART:MOVAL,0B0H;8255A初始化,方式控制字10110000BMOVDX,20BHOUTDX,ALMOVDX,209H;LED初始化MOVAL,00HOUTDX,ALAGAIN:MOVAH,01H;判断计算机键盘上是否有键按下,若有结束程序INT16HJNZEXITMOVDX,20AH;读入8255A的C口状态INAL,DXTESTAL,00010000B;判断PC4=1?(K键是否按下)JNZAGAINMOVDX,208H;读入8255A的A口状态INAL,DXMOVDX,209H;将A口状态送8255A的B口OUTDX,ALJMPAGAINEXIT:MOVAH,4CHINT21HCODEENDSENDSTART(2)利用中断方式实现硬件连接:1)8255A的A口PA0~PA7与K1~K8对应相连;2)8255A的B口PB0~PB7与L1~L8对应相连;3)按键K接8255A的C口PC4;4)8255A的C口PC3(INTRA)接IRQ。参考源程序: DATA SEGMENT PORTADW208H ;8255A的A口地址 PORTBDW209H ;8255A的B口地址 PORTCDW20AH ;8255A的C口地址 DATA PORT_CTRDW20BHENDS ;8255A的控制口地址STACK1SEGMENTSTACKDB100DUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVES,AXMOVDX,PORT_CTR;写入8255A方式控制字0B0HMOVAL,0B0HOUTDX,ALMOVAL,09H;写入C口按位置位控制字,PC4置“1”OUTDX,ALMOVAL,0EH;写入C口按位复位控制字,PC7置“0”,开IRQOUTDX,ALMOVAX,350BH;保存系统原有中断号为0BH的中断向量到堆栈INT21HPUSHESPUSHBXMOVAX,SEGINTPROC;向0BH号中断写入新的中断向量MOVDS,AXMOVDX,OFFSETINTPROCMOVAX,250BHINT21HINAL,21H;允许8259的IRQ3中断ANDAL,0F7HOUT21H,ALSTI;允许CPU响应可屏蔽中断WAIT0:MOVAH,01H;判断是否有键按下,若有则结束程序,若无则等待INT16HJZWAIT0POPDX;恢复系统中断向量表POPDSMOVAX,250BHINT21HMOVAH,4CHINT21HINTPROCPROCNEARMOVDX,PORTA;读入8255A端口A的状态(开关状态)INAL,DXMOVDX,PORTB;从8255A的B口输出开关状态,由对应的LED显示OUTDX,ALMOVAL,20H;给8259发中断结束指令OUT20H,ALIRETINTPROCENDPCODEENDSENDSTART实验九:LED显示器接口实验(1)编制一个从左到右循环显示字符“8”的程序,要求每个字位的停留时间约为1s,当从 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 键盘上按下任意键时结束程序。分析:根据题意要求,实验板上的6位8段数码管的段选信号均相同,为字符“8”的段码(80H)。为了实现从左到右循环显示且每个字位停留约1s的功能,只需要每隔一秒给位选信号赋值,选通/断开相应的位即可。当循环显示到最右端时,延时1s再从最左端开始显示。为此,在该题中我们利用8255A的A口作为6位LED显示器的段选口(地址208H),8255A的B口作为6位LED显示器的位选口(地址209H)。8255A的控制字为:10000000B(80H)硬件连接:(1)8255A的A口PA0~PA7分别对应连接LED显示器的段选输入a~h.(2)8255A的B口PB0~PB5分别对应连接LED1~LED6显示器的位选输入。程序流程图略。参考源程序:.486STACK1SEGMENTSTACKDB100DUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,SS:STACK1START:MOVAL,80H;8255A工作方式初始化,A口方式0输出,B口方式0输出MOVDX,20BHOUTDX,ALMOVAL,80H;8255A的A口输出字符“8”的段码80HMOVDX,208HOUTDX,ALL1:MOVBL,20H;LED显示器位选信号存放在BL中,20H表示最左边一位L2:MOVAL,BL;将LED位选信号输出到8255A的B口MOVDX,209HOUTDX,ALCALLDELAY;调研软件延时程序MOVAH,01H;判断标准键盘上是否有键按下,若有则结束程序INT16HJNZEXITSHRBL,1;LED位选信号右移一位,选中下一位LEDJNZL2JMPL1;当循环到最右边一位LED时,重新填充BL值,开始新一轮循环EXIT:MOVDX,208HMOVAL,0FFHOUTDX,ALMOVDX,209HMOVAL,00HOUTDX,AL;关闭所有LEDMOVAH,4CHINT21HDELAYPROCNEARMOVECX,0FFFFFFFHLP:LOOPDLPRETDELAYENDPCODEENDSENDSTART(2)完成多位LED显示器的显示,即设计一个显示字符串1234.56的程序,当标准键盘上有任意键按下时结束程序。基本思想:借助动态扫描、分时显示的办法,利用人眼视觉的滞留效应,实现人眼看上去的各位“同时”显示。分析:利用实验操作面板上引出的8255A的分别A口和B口作为6位8段LED显示器的位选口和段选口,从段选口依次输出待显示字符的段码,并选通相应的位实现对多位LED显示器的刷新。8255A的A口和B口均工作在方式0的输出方式,方式控制字为:1000000B(80H)。硬件连接:(1)8255A的A口PA0~PA5对应连接LED1~LED6的位选;(2)8255A的B口PB0~PB7对应连接段选a~h;程序流程图略。参考源程序:DATASEGMENTSEGTABDB0C0H,0F9H,0A4H,0B0H;定义0~F的段码存储区DB99H,92H,82H,0F8HDB80H,98H,88H,83HDB0C6H,0A1H,86H,8EHDISPMEMDB01H,02H,03H,04H,05H,06H;定义显示缓冲区DATAENDSSTACK1SEGMENTSTACKDB100DUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVAL,80H;8255A初始化,A口输出,B口输出MOVDX,20BHOUTDX,ALL1:MOVAH,20H;预置位选信号LEASI,DISPMEM;SI指向显示缓冲区LEABX,SEGTAB;BX指向段码存储区L2:MOVAL,[SI]XLATCMPAH,04HJNENEXTANDAL,7FH;第4位LED显示小数点NEXT:MOVDX,209H;输出段码OUTDX,ALMOVDX,208H;输出位选信号MOVAL,AHOUTDX,ALMOVCX,4000;延时LP2:LOOPLP2PUSHAXMOVAH,01H;判断标准键盘上是否有键按下,若有键按下则结束程序INT16HJNZEXITPOPAXINCSI;修改显示缓冲区指针SHRAH,1;修改位选信号JNZL2JMPL1EXIT:MOVDX,208HMOVAL,00HOUTDX,ALMOVDX,209HMOVAL,0FFHOUTDX,AL;关闭所有LEDMOVAH,4CHINT21HCODEENDSENDSTART实验十:键盘接口实验编制1个用键盘控制模拟电动机转动的程序,即用非编码键盘上的A和B两个键作转、停控制,并在数码显示器上显示F表示电机转动,计算机屏幕上显示笑脸符表示电机停,按回车键结束程序执行(笑脸符的ASCII码为02H)。分析:根据题目的要求,需要不断扫描4×4非编码键盘,判断键盘上A或B键(控制停转,在屏幕上显示笑脸)是否按下。若按下A键则在LED上显示F,表示电机转动;若按下B键则在计算机屏幕(CRT显示器)上显示笑脸,表示电机停转。可以用8255A的C口作为非编码键盘的行扫描信号,同时作为LED的位选信号,B口作为非编码键盘的列扫描信号,A口作为LED的段选信号。8255A的C口工作在输出方式,B口工作在输入方式,A口工作在输出方式,8255A的方式控制字为:10000010B(82H)硬件连接:(1)8255A的A口的PA0~PA7接段选信号a~f;(2)8255A的B口的PB0~PB3接非编码键盘的列扫描端(J9)(3)8255A的C口的PC0~PC5接LED的位选信号(同时也是非编码键盘的行扫描线)程序流程图略。参考源程序:DATASEGMENTDISPTABDB0C0H,0F9H,0A4H,0B0H;定义LED显示字形码DB99H,92H,82H,0F8HDB80H,98H,88H,83HDB0C6H,0A1H,86H,8EHKEYTABDB0E7H,0D7H,0B7H,077H;定义键值特征表DB0EBH,0DBH,0BBH,07BHDB0EDH,0DDH,0BDH,07DHDB0EEH,0DEH,0BEH,07EHMSGDB'PRESSENTERTOEND.',0AH,0DH,'$';提示消息DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXLEADX,MSG;显示提示信息MOVAH,09HINT21H MOVDX,20BHMOVAL,82HOUTDX,AL ;8255A初始化,A口段选输出,B口键盘列输入,C口键盘行输出 MOVDX,208H ;从段选口输出0FFH关闭所有LED MOVAL,0FFH OUTDX,AL T1: MOVDX,20AH ;使键盘行线为“0” MOVAL,00H OUTDX,AL LOP1: MOVDX,209HMOVAH,0BH ;判断标准键盘上是否有键按下 INT21H CMPAL,0FFH JNZT2MOVAH,00H ;读取标准键盘上所按键的ASCII码 INT16HCMPAL,0DH ;若回车键按下,则结束程序 JZEXIT T2: INAL,DX ;读列线状态 ANDAL,0FH CMPAL,0FHJELOP1 ;非编码键盘上无键按下,等待 MOVBH,ALCALLDELAYMOVAL,0FEHMOVBL,AL ;非编码键盘上有键按下,将列信号存入BH;延时去抖动;逐行扫描;BL中存行扫描信号 LOP2: MOVDX,20AH OUTDX,AL MOVDX,209H INAL,DX ANDAL,0FH CMPAL,0FHJNELOP3 ;该行有键按下,转LOP3 ROLBL,1 MOVAL,BLJMPLOP2 ;无键按下换1行 LOP3: MOVDX,20AH MOVAL,3FH OUTDX,AL SALBH,4 ANDBL,0FHORBL,BHCALLDELAYLEASI,KEYTAB ;形成键值(列+行);延时,等待按键释放;查键值表找键代号 MOVBH,0 LOP4: MOVAL,[SI] CMPAL,BLJELOP5 ;找到键值转LOP5 INCBH INCSI LOP5: JMPLOP4CMPBH,0AH ;判断是否是’A’键按下(非编码键盘) JNZLOP6CALLLEDXS ;若是’A’按下,则调用LED显示 LOP6: CMPBH,0BH ;判断是否是’B’键按下(非编码键盘) JNZLOP7MOVAL,00H ;若是’B’键按下,则关闭LED显示 MOVDX,20AH OUTDX,ALMOVDL,02H ;在计算机屏幕上显示笑脸符(ASCII码为02H) MOVAH,02H LOP7: INT21HJMPT1 ;返回键识别 EXIT: MOVDX,208H ;退出程序前关闭LED显示 MOVAL,0FFH OUTDX,AL MOVDX,20AH MOVAL,00H OUTDX,AL RET MAIN ENDP LEDXSPROCNEARMOVAL,0FH;待显示字符’F’的代号存入ALLEABX,DISPTAB;BX指向字形码表首XLAT;查表交换,将字符’F’的字形码送ALMOVDX,208HOUTDX,AL;送字形码MOVAL,3FHMOVDX,20AHOUTDX,AL;送位选信号RETLEDXSENDPDELAYPROCNEAR;延时子程序MOVCX,0F000HDLP:LOOPDLPRETDELAYENDPCODEENDSENDSTART�MOVLETTER,BHMOVOTHER,AL����MOVDX,OFFSETMSG1MOVAH,09HINT21HMOVAL,DIGITCALLDISP�;显示“数字”有多少个���MOVDX,OFFSETMSG2MOVAH,09HINT21HMOVAL,LETTERCALLDISP�;显示“字母”有多少个���MOVDX,OFFSETMSG3MOVAH,09HINT21HMOVAL,OTHERCALLDISP�;显示“其它”有多少个���MOVAH,4CHINT21H���DISP�PROCNEAR�;显示子程序��DATA�SEGMENT����PORT0DW20CH�;8254计数器0端口地址���PORT1DW20DH�;8254计数器1端口地址���PORT2DW20EH�;8254计数器2端口地址���PORT3DW20FH�;8254控制寄存器端口地址���PORTADW208H�;8255A的A口端口地址���PORTBDW209H�;8255A的B口端口地址���PORTCDW20AH�;8255A的C口端口地址��DATA�PORT_CTRDW20BHENDS�;8255A的控制寄存器端口地址��
本文档为【《计算机硬件技术基础》实验答案程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
WJDTX
暂无简介~
格式:doc
大小:348KB
软件:Word
页数:0
分类:企业经营
上传时间:2020-10-06
浏览量:88