第1页共8页五邑大学期中试卷学期:2014至2015学年度第2学期课程:微机系统与接口技术使用班级:130804~130808姓名:学号:题号一二三四五六七八九总分得分一、(14分)数据段定义如下,请写出执行下列程序时右边寄存器或标志状态的内容。数据段DATASSEGMENTV1DB25H,4AH,6DUP(0BBH)NUM=$-V1V2DB‘A68RTISNOT’V3DW2346H,567CHDATASEBDS代码片段MOVAL,V1AL=(25H)MOVAH,V1+1AX=(4A25H)MOVBX,V3BX=(2346H)ADDBX,AXBX=(6D6BH)MOVSI,OFFSETV1ADDSI,2MOVDL,[SI]DL=(0BBH)MOVDH,V2+1DX=(36BBH)STCCF=(1)ADCBX,DXBX=(A427H)MOVCX,NUMCX=(0008H)ANDAL,CLAL=(00H)MOVBX,1000HBX=(1000H)DECBXBX=(0FFFH)CMPBX,0FFFHZF=(1),BX=(0FFFH)二、(6分)2将下列程序执行后的结果填入相应的寄存器中MOVAX,700MOVBX,800MOVCX,10得分得分第2页共8页MOVDX,15MOVSI,6000H-000AHMOVDI,2000HLAB:SUBAX,CXADDBX,DXDECSIINCDILOOPLABHALTAX=(0285H645),BX=(03B6H950),CX=(0000H),DX=(000FH),SI=(5FF6H),DI=(200AH)三、(30分)标志判断MOVAX,1000HCMPAX,2000HCF=(1),ZF=(0),SF=(1),OF=(0),PF=(0)XORAXCF=(0),ZF=(1),SF=(0),OF=(0),PF=(1)DECAXCF=(1),ZF=(0),SF=(1),OF=(0),PF=(0)SUBAX,0FFFHCF=(0),ZF=(1),SF=(0),OF=(0),PF=(1)ORAX,63ACHCF=(0),ZF=(1),SF=(0),OF=(0),PF=(1)ADDAX,0BC85HCF=(0),ZF=(1),SF=(0),OF=(0),PF=(0)四、(10分)数据段定义如下,请编制一个计算Y=X2+2X+5的程序,并将计算结果的十六制数显式在屏幕上。DATASSEGMENTXDB56YDW?ASCDB4DUP(?),‘$’DATASENDSMOVAL,XMOVBL,XMULBL;AX=X*XMOVDX,AXMOVAL,XXORAH,AHSHLAX,1;AX=2XADDAX,DX;AX=X2+2XADDAX,5;AX=X2+2X+5MOVY,AXMOVSI,OFFSETYMOVCX,4;循环计数得分得分第3页共8页MOVDI,OFFSETASCADDDI,03HMOVDX,[SI]A1:MOVAX,DXANDAX,000FHCMPAL,0AHJBA2ADDAL,07HA2:ADDAL,30HMOV[DI],ALDECDISHRDX,4;右移4位LOOPA1MOVDX,OFFSETASCMOVAH,09HINT21H五、(10分)数据段定义如下,请编制一个计算Y=A*X+B的程序,并将计算结果转换成十进制数显式在屏幕上。DATASSEGMENTXDB56ADB20BDB67YDW?ASCDB5DUP(?),‘$’DATASENDSMOVAL,XMOVBL,AMULBLADDAL,BMOVY,AXMOVAX,DATASMOVDS,AXMOVDX,YMOVSI,OFFSETASCMOVDI,SIADDSI,0005HA1:DECSIMOVAX,DXMOVDX,0000HMOVCX,000AHDIVCXXCHGAX,DXADDAL,30HMOV[SI],AL得分第4页共8页CMPDX,0000HJNZA1A2:CMPSI,DIJZA3DECSIMOVAL,30HMOV[SI],ALJMPA2A3:MOVDX,OFFSETASCMOVAH,09HINT21H六、(10分)数据段定义如下,请编制一个分支程序实现下列函数功能。X2+20当X<10Y=10*X+20当10≤X<20220当X≥20DATASSEGMENTXDB56YDW?DATASENDSXORAH,AHMOVAL,XCMPAL,10JLA1;小于10CMPAL,20JGEA2;大于等于20MOVBL,10MULBLADDAX,20JMPA3A1:MOVBL,ALMULBLADDAX,20JMPA3A2:MOVAX,220A3:MOVY,AX七、(10分)数据段定义如下,请编制一个循环程序计算S=1+2+...+100的求和程序,并将计算的结果存在SUM单元中。(自己根据需要定义数据段)得分得分第5页共8页DATASSEGMENT;数据段;请在这里定义您的数据SUMDW?DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATAS;初始化MOVDS,AX;请在这里添加您的代码MOVCX,100XORAX,AXADDITION:ADDAX,CXLOOPADDITIONMOVSI,OFFSETSUMMOV[SI],AX八、(10分)编制一个n!循环计算程序,当计算结果大于1000时结束,并将结果存在NF单元中。(自己根据需要定义数据段)DATASSEGMENT;数据段;请在这里定义您的数据NDB80NFDW?DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATAS;初始化MOVDS,AX;请在这里添加您的代码XORCX,CXXORAX,AXMOVCL,NMOVAL,NDECALA1:MULCX得分第6页共8页CMPAX,1000JGA2LOOPA1A2:MOVSI,OFFSETNFMOV[SI],AX九、选作题(加10分)改编第五题,利用INT21H中断的0AH号功能调用,从键盘上输入X=0~255,A=0~255,B=0~255,然后计算Y=A*X+B的程序,并将计算结果转换成十进制数显式在屏幕上。(自己根据需要定义数据段)DATASSEGMENT;数据段;请在这里定义您的数据XDB?ADB?BDB?YDW?ASCDB5DUP(?),'$'BUFDB5DB0DB5DUP(0)DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATAS;初始化MOVDS,AX;请在这里添加您的代码MOVCX,0CALLHEXPB1:MOVX,ALCALLHEXPB2:MOVA,ALCALLHEXPHEXPPROCINCCXXORDX,DXLEADX,BUFMOVAH,0AHINT21HMOVSI,OFFSETBUF+1;取出字符个数得分第7页共8页PUSHCXMOVCL,[SI]DECCLMOVCH,00HMOVBX,000AHMOVAH,00HINCSIMOVAL,[SI];取出第一个字符SUBAL,30HB3:MULBXMOVDX,[SI+1]ANDDX,00FFHADDAX,DXSUBAX,30HINCSILOOPB3POPCXHEXPENDPCMPCX,1JZB1CMPCX,2JZB2MOVB,ALMOVAL,XMOVBL,AMULBLADDAL,BMOVY,AXMOVAX,DATASMOVDS,AXMOVDX,YMOVSI,OFFSETASCMOVDI,SIADDSI,0005HA1:DECSIMOVAX,DXMOVDX,0000HMOVCX,000AHDIVCXXCHGAX,DX;余数和商换位ADDAL,30HMOV[SI],ALCMPDX,0000HJNZA1A2:CMPSI,DIJZA3第8页共8页DECSIMOVAL,30HMOV[SI],ALJMPA2A3:MOVDX,OFFSETASCMOVAH,09HINT21H