电气工程学院《计算机与通信综合实验》报告学号:2012302540159姓名:周过海2015年6月15日1实验一A/D转换实验1.实验目的了解模/数转换基本原理,掌握ADC0809的使用方法2.实验内容利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。3.实验接线图24.程序流程图、程序及运行结果(1)、流程图:(2)、实验程序:CODESEGMENT;H0809.ASMASSUMECS:CODEADPORTEQU8000hPAEQU0FF21H;字位口PBEQU0FF22H;字形口PCEQU0FF23H;键入口ORG1000HSTART:JMPSTART0BUFDB?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FHSTART0:CALLBUF1ADCON:MOVAX,00MOVDX,ADPORTOUTDX,ALMOVCX,0500HDELAY:LOOPDELAYMOVDX,ADPORTINAL,DXCALLCONVERSCALLDISPJMPADCONCONVERS:MOVAH,ALANDAL,0FHMOVBX,OFFSETBUFMOV[BX+5],ALMOVAL,AHANDAL,0F0HMOVCL,04H3SHRAL,CLMOV[BX+4],ALRETDISP:MOVAL,0FFH;00HMOVDX,PAOUTDX,ALMOVCL,0DFH;20H;显示子程序,5msMOVBX,OFFSETBUFDIS1:MOVAL,[BX]MOVAH,00HPUSHBXMOVBX,OFFSETDATA1ADDBX,AXMOVAL,[BX]POPBXMOVDX,PBOUTDX,ALMOVAL,CLMOVDX,PAOUTDX,ALPUSHCXDIS2:MOVCX,00A0HLOOP$POPCXCMPCL,0FEH;01HJZLX1INCBXRORCL,1;SHRCL,1JMPDIS1LX1:MOVAL,0FFHMOVDX,PBOUTDX,ALRETBUF1:MOVBUF,00HMOVBUF+1,08HMOVBUF+2,00HMOVBUF+3,09HMOVBUF+4,00HMOVBUF+5,00HRETCODEENDSENDSTART(3)、运行结果45实验二8255A并行口实验(一)1.实验目的(1)掌握8255A和微机接口方法。(2)掌握8255A的工作方式和编程原理。2.实验内容用8255PA口控制PB口。3.实验接线图4.程序流程图、程序及运行结果(1)、流程图:(2)、程序:CODESEGMENT;H8255-1.ASMASSUMECS:CODEIOCONPTEQU0FF2BHIOBPTEQU0FF29HIOAPTEQU0FF28HORG11B0H6START:MOVAL,90HMOVDX,IOCONPTOUTDX,ALNOPNOPNOPIOLED1:MOVDX,IOAPTINAL,DXMOVDX,IOBPTOUTDX,ALMOVCX,0FFFFHDELAY:LOOPDELAYJMPIOLED1CODEENDSENDSTART(3)、运行结果:7实验三软件实验(一)1.实验内容编写一段程序,已知长度为10的BUF1中有10个无符号数,将其中的数据依次取出并乘2,逆序存放在BUF2中。2.程序流程图开始取BUF1首地址放入SI,BUF2尾地址放入DI设置循环次数CX=10将“2”存入AL取[SI]中数据与AL相乘,结果放入AL。同时SI加1将AL中的数值放入[DI],同时DI减1CX减1判断CX是否等于0YES结束NO3.源代码DSEGSEGMENT'DATA';TODO:addyourdatahere!!!!BUF1DB01H,02H,03H,04H,05H,06H,07H,08H,09H,0AHBUF2DB10DUP(?)DSEGENDSSSEGSEGMENTSTACK'STACK'DW100hDUP(?)SSEGENDS8CSEGSEGMENT'CODE';*******************************************STARTPROCFAR;StorereturnaddresstoOS:PUSHDSMOVAX,0PUSHAX;setsegmentregisters:MOVAX,DSEGMOVDS,AXMOVES,AX;TODO:addyourcodehere!!!!LEASI,BUF1LEADI,BUF2ADDDI,09HMOVCX,10NEXT:MOVAL,02HMUL[SI]MOV[DI],ALINCSIDECDIDECCXJNZNEXTHLT;returntooperatingsystem:RETSTARTENDP;*******************************************CSEGENDSENDSTART;setentrypoint.94.仿真运行结果10实验四软件实验(二)1.实验内容编写一段程序,已知BUF1单元中有一带符号字节数据X,BUF2中有一带符号字节数据Y,根据以下函数关系编写程序求Z的值,结果存入RESUL.Z=|2*X-Y|.2.流程图开始结束取BUF1、BUF2、RESULT首地址分别放入SI,BX,DI中将“2”存入AL[SI]与AL相乘,结果放入ALAL减去[BX],结果放入AL取相反数,结果放入AL将AL的值存入[DI]判断AL是否小于0YESNO3.源代码DSEGSEGMENT'DATA';TODO:addyourdatahere!!!!BUF1DB025HBUF2DB010HRESULTDB1DUP(?)11DSEGENDSSSEGSEGMENTSTACK'STACK'DW100hDUP(?)SSEGENDSCSEGSEGMENT'CODE';*******************************************STARTPROCFAR;StorereturnaddresstoOS:PUSHDSMOVAX,0PUSHAX;setsegmentregisters:MOVAX,DSEGMOVDS,AXMOVES,AX;TODO:addyourcodehere!!!!LEASI,BUF1LEABX,BUF2LEADI,RESULTMOVAL,02HIMUL[SI]SBBAL,[BX]TESTAL,80HJZDONENEST:NEGALJMPDONEDONE:MOV[DI],AL;returntooperatingsystem:RETSTARTENDP;*******************************************CSEGENDSENDSTART;setentrypoint.124.运行结果13实验五软件实验(三)1.实验内容若自STRING单元开始存放一个字符串,以'$'结尾,试编写程序,统计字符串中“x”元素的个数,并将结果存入COUNT单元。2.程序流程图开始结束取STRING、COUNT首地址分别放入SI、DI初始化COUNT的值为0取[SI]的值放入AL,SI加1DI加1判断AL是否等于x判断AL是否等于$YESYESNONO3.源代码DSEGSEGMENT'DATA';TODO:addyourdatahere!!!!STRINGDB'HELLOWORLD!$'COUNTDB00HDSEGENDSSSEGSEGMENTSTACK'STACK'14DW100hDUP(?)SSEGENDSCSEGSEGMENT'CODE';*******************************************STARTPROCFAR;StorereturnaddresstoOS:PUSHDSMOVAX,0PUSHAX;setsegmentregisters:MOVAX,DSEGMOVDS,AXMOVES,AX;TODO:addyourcodehere!!!!LEASI,STRINGLEADI,COUNTMOV[DI],00HAGAIN:MOVAL,[SI]INCSITESTAL,07H;将AL与0000111进行与运算判断是否为'x'JNZNEXTINC[DI]NEXT:TESTAL,48H;将AL与1001000比较判断是否为'$'JNZAGAINHLT;returntooperatingsystem:RETSTARTENDP;*******************************************CSEGENDSENDSTART;setentrypoint.154.运行结果16实验六软件实验(四)1.实验内容从BUF1的20个无符号数中,取出其最大最小值,并计算其平均值,分别存放在BUF2中。2.程序流程图开始结束初始化BUF2的值为0设置循环次数CX=20CX减1比较[SI]是否大于[DI]比较[SI]是否小于[DI+1]判断CX是否为0计算[DI],[DI+1]的平均值结果放入[DI+2]将[SI]的值放入[DI]将[SI]的值放入[DI+1]将[SI]的值放入AL,SI加1NONONOYESYESYES取BUF1,BUF2首地址分别放入SI,DI173.源代码DSEGSEGMENT'DATA';TODO:addyourdatahere!!!!BUF1DB20DUP(?)BUF2DB3DUP(00H)DSEGENDSSSEGSEGMENTSTACK'STACK'DW100hDUP(?)SSEGENDSCSEGSEGMENT'CODE';*******************************************STARTPROCFAR;StorereturnaddresstoOS:PUSHDSMOVAX,0PUSHAX;setsegmentregisters:MOVAX,DSEGMOVDS,AXMOVES,AX;TODO:addyourcodehere!!!!LEASI,BUF1LEADI,BUF2MOVCX,20HAGAIN:MOVAL,[SI]INCSICMPAL,[DI]JNCX1JMPDO1DO1:CMPAL,[DI+1]JCX2JMPDO2DO2:DECCXJNZAGAIN18JMPDONEX1:MOV[DI],AL;将较大值赋给[DI]JMPDO1X2:MOV[DI+1],AL;将较小值赋给[DI+1]JMPDO2DONE:MOVAL,00H;求平均数ADDAL,[DI]MOVBL,02HDIVBLMOV[DI+2],ALHLT;returntooperatingsystem:RETSTARTENDP;*******************************************CSEGENDSENDSTART;setentrypoint.4.运行结果19