实验报告课程名称:微型计算机原理及接口技术实验指导老师:李春泉学生姓名:学号:专业班级:前湖学院综合实验班1412016年6月28日目录实验一多位十进制数相减实验......................2实验二统计学生成绩程序设计......................7实验三8255可编程并行接口实验...................13实验四定时器/计数器实验........................16实验五8259中断控制实验.........................20实验六8251可编程串行口与PC机通讯实验..........23实验七直流电动机驱动实验.......................29实验八串并行转换实验...........................341实验一多位十进制数相减实验一、实验目的1.学习数据传送和算术运算指令的用法。2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。二、实验要求将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。三、实验程序框图显示减数和被减数被减数和减数转换成十六进制数设置计数值清除最低进位位带进位减结果送被减数区调整偏移量计数值-1=0开始结果转换成ASCII码字符串显示结果结束NY2四、实验程序DATASEGMENTDATA1DB33H,39H,31H,37H,38H;第一个数据(作为被减数)DATA2DB36H,35H,30H,38H,32H;第二个数据(作为减数)MES1DB'-','$'MES2DB'=','$'DATAENDSSTACKSEGMENT;堆栈段STADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVSI,OFFSETDATA1MOVBX,05CALLDISPL;显示被减数MOVAH,09HLEADX,MES1INT21HMOVSI,OFFSETDATA2MOVBX,05;显示减数CALLDISPLMOVAH,09HLEADX,MES2INT21HMOVSI,OFFSETDATA1MOVDI,OFFSETDATA2CALLSUBA;减法运算MOVSI,OFFSETDATA1MOVBX,05;显示结果CALLDISPLMOVDL,0DHMOVAH,02HINT21HMOVDL,0AH3MOVAH,02HINT21HINT21HMOVAX,4C00HINT21HDISPLPROCNEAR;显示子功能DSI:MOVAH,02MOVDL,[SI+BX-1];显示字符串中一字符INT21HDECBX;修改偏移量JNZDSIRETDISPLENDPSUBAPROCNEARMOVDX,SIMOVBP,DIMOVBX,05SU1:SUBBYTEPTR[SI+BX-1],30HSUBBYTEPTR[DI+BX-1],30HDECBX;将ASCII码表示的数字串JNZSU1;转化为十六进制的数字串MOVSI,DXMOVDI,BPMOVCX,05;包括进位,共5位CLC;清进单位SU2:MOVAL,[SI]MOVBL,[DI]SBBAL,BL;带进位相减AAS;非组合BCD码的减法调整MOV[SI],AL;结果送被减数区INCSIINCDI;指向下一位LOOPSU2;循环MOVSI,DXMOVDI,BPMOVBX,05SU3:ADDBYTEPTR[SI+BX-1],30HADDBYTEPTR[DI+BX-1],30HDECBX;十六进制的数字串转化ASCII码表示的数字串JNZSU3RETSUBAENDP4CODEENDSENDSTART五、实验步骤1.点击桌面DOSBox0.74软件,进入DOS操作系统。2.建立源文件,输入dos命令:D:\editshhiyan1进入编写程序的窗口,编写代码。3.汇编通过执行MASM程序对PROG.ASM进行汇编。即键入命令Masmshiyan1.asm再回车,生成目标文件PROG.OBJ。4.连接汇编生成的目标文件PROG.OBJ必须经过连接,转换成可执行文件PROG.EXE后,才能在操作系统下运行。故用程序LINE.EXE实现连接。即键入命令linkshiyan1.obj55.运行程序键入shiyan1.exe即可执行这个程序。实验结果为871932806559137-=。六、实验总结通过这次软件实验,我对数据传送和算术运算指令的用法更加熟悉。明白了多位十进制数相减需要进行非组合码的减法调整。知道了如何将十六位进制的数字串转化为ASII码表示。更加清楚地明白过程调用在汇编程序设计中的作用。汇编语言程序中把某些能完成特定功能而又经常用到的程序段,编写成独立的模块,这种分模块的设计思想与方法,在其他高级语言如C语言中处处可见。然而在汇编语言中编程语句直接指向存储器单元,理解起来却更加麻烦。通过本次是实验,使我对书本上的汇编语言程序设计这一章知识的理解更加深刻了。6实验二统计学生成绩程序设计一、实验目的(1)熟悉和掌握排序编程方法。(2)进一步熟悉在PC机上建立、汇编、连接、调试和运行汇编程序的过程。二、实验要求根据提示将0~100之间的10个成绩存入首址为1000H的单元,1000H+i表示学号为i的学生成绩,编写程序能在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次,并将其显示在屏幕上。三、实验程序框图开始初始化显示提示信息入口CX入栈保存学生数送CXAL送0分SI指向成绩表首址学生数送CX调GETNUM,读成绩送[SI]SI+1CX-1=0BX和SI指向成绩表首址AL=[SI][SI]送AL,DX记录对应学号SI+1CX-1=0将本次扫描的最高成绩清0CX出栈返回YYNN学生数送CXDI指向名次表首址调SCAN子程序,扫描成绩表计算名次,填入DX学号对应的名次单元CX-1=0显示学生名次返回DOSYNNY7四、实验程序CRLFMACROMOVAH,02HMOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21HENDMDATASEGMENTSTUNUMEQU10MESS1DB'pleseinpuescoreoftenstudents:',0DH,0AH,'$'ERRORDB'inputeroor!tryagain!',0DH,0AH,'$'MESS2DB'theorderoftenstudentsis:',0DH,0AH,'$'EMARKDB?ORG1000HSCOREDB30DUP(?)ORG2000HSEQUDB30DUP(?)DATAENDSSTACKSEGMENTSTADW32DUP(?)TOPDW?STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVSP,TOP;初始化MOVAH,09HMOVDX,OFFSETMESS1INT21H;显示提示信息MOVSI,OFFSETSCORE;成绩表首址MOVCX,STUNUM;学生数送CXMOVEMARK,0UUU:CALLGETNUM;读取键入数值送DXCMPEMARK,01HJESTARTMOV[SI],DL;存入成绩表缓冲区中INCSI;指向下一单元8LOOPUUUMOVCX,STUNUM;学生数MOVDI,OFFSETSEQU;名次表首址VVV:CALLSCAN;扫描子程序MOVAL,STUNUM;学生数SUBAL,CLINCAL;计算名次MOVBX,DXDAAMOV[DI+BX],AL;记DX学号对应名次LOOPVVVMOVAH,09HLEADX,MESS2INT21HMOVCX,STUNUM;学生数MOVSI,OFFSETSEQU;名次表首址[SI]CALLDISPIPUSHDXPUSHAXMOVAH,02MOVDL,20HINT21HPOPAXPOPDXINCSILOOP显示排定的学生名次MOVAX,4C00HINT21HSCANPROCNEAR;子程序,每扫描一遍成绩表缓冲区,找出其成绩最高者;(由DX指针指示对应学生),之后将该成绩清除以便下一次扫描MOVDX,0PUSHCXMOVCX,STUNUM;学生数MOVAL,00H;最低成绩MOVBX,OFFSETSCOREMOVSI,BX;指向成绩表首址CCC:CMPAL,[SI]JAEJJJ;AL中的成绩不低于成绩表指针SI所指单元的成绩则转JJJMOVAL,[SI];AL存放较高的成绩MOVDX,SI9SUBDX,BX;DX为对应学号JJJ:INCSI;指向下一单元LOOPCCCADDBX,DXMOVBYTEPTR[BX],00H;本次扫描成绩最高者清0POPCXRETSCANENDPDISPIPROCNEAR;显示子程序PUSHCXMOVBL,ALMOVDL,BLMOVCL,04ROLDL,CLANDDL,0FHCALLDISPLMOVDL,BLANDDL,0FHCALLDISPLPOPCXRETDISPIENDPDISPLPROCNEARADDDL,30HCMPDL,3AHJBDDDADDDL,27HDDD:MOVAH,02HINT21HRETDISPLENDPGETNUMPROCNEAR;键读入子程序PUSHCXXORDX,DXGGG:MOVAH,01HINT21HCMPAL,0DHJZPPPSUBAL,30HJBKKKCMPAL,09H10JBEGETSJMPKKKGETS:PUSHAXMOVAL,DLMOVCL,10MULCLMOVDX,AXPOPAXXORAH,AHADDDX,AXCMPDX,100JAKKKJMPGGGKKK:MOVAH,09HMOVDX,OFFSETERRORINT21HMOVEMARK,01HPPP:PUSHDXCRLFPOPDXPOPCXRETGETNUMENDPCODEENDSENDSTART五、实验步骤(1)和实验一的操作一样,在DOS操作系统下完成汇编语言编译、汇编、连接和调试的全过程。得到实验结果如图:11运行实验程序得到:如图所示,当输入学生成绩为12,34,56,24,52,87,68,93,94,57时,得到的名次表为10080609070304020105.六、实验总结在本次实验中程序代码不能出现中文,否则dos环境运行不出中文结果,会出现乱码。如下图所示:所以,应该把下图的中文改成英文通过本次软件实验让我对冒泡法排序有了更加深刻的认识,实验程序中对循环结构的多次使用让我对汇编语言循环结构的使用方法有了更加深刻的认识。12实验三8255可编程并行接口实验一、实验目的1.学习在单板方式下扩展简单I/O接口的方法。2.学习编制数据输出程序的设计方法。二、实验要求编写程序,以8255作为输出口,控制8个单色LED灯。三、实验电路及连线PC0~PC7连L0~L7。CS8255连218H。四、实验说明8255工作于方式0,此时PA、PB、PC均为可独立输入/输出的并行口。8255的各寄存器对应的口地址为:PA口:218HPB口:219HPC口:21AH8255控制寄存器:21BH由于各PC机速度不同,为达到较好的实验效果,可适当调节LED亮灭的延时时间。13五、实验程序框图六、实验程序PC55EQU218HP55CTLEQU21BHDATASEGMENTDATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STAC