如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1、编程编写一个汇编语言程序,计算16位二进制数X中“1”的个数,并将结果存入Count单元。定义数据段DSEGSEGMENTNUMDWXCOUNTDW?DSEGENDS;定义代码段CSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTARTPROCFARMOVAX,DSEGMOVDS,AXMOVCX,0MOVAX,NUMREPEAT:TESTAX,0FFFFHJZEXITJNSSHIFTINCCXSHIFT:SHLAX,1JMPREPEATEXIT:MOVCOUNT,CXMOVAH,4CHINT21HSTARTENDPCSEGENDSENDSTART2、读程序程序清单如下:DSEGSEGMENTXADRDW7458HDSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTARTPROCFARPUSHDS;MOVAX,0PUSHAX;MOVAX,DSEGMOVDS,AX;MOVAX,XADR;ANDAX,AX;JNSDONE;NEGAX;MOVXADR,AX;DONE:RETSTARTENDPCSEGENDSENDSTART3.设有一块8253的四个端口地址为240H~243H,其计数器0的时钟CLK0为1MHz,编程使其实现计数器0能产生10KHz的连续方波。通道0的控制字为:00010110B=16H计数值=计数器输入频率/计数器输出频率=1106/(1104)=100初始化程序段MOVAL,16HMOVDX,243HOUTDX,ALMOVAL,100MOVDX,240HOUTDX,AL4.在下列程序段中有错误,请找出并更正之。CSEGSEGMENTSTARTPROCFARASSUMECS:CSEG,DS:CSEGORG100HBEGIN:MOVDX,05MOVBH,DXADDBYTEPTR[BX],1000MOVCX,04L20:MOVAX,[SI][DI]ADDDX,AXSRRDX,1MOVCS,AXRETSTARTENDPCSEGENDSENDBEGIN5.程序阅读:CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:CSEGSTART:PUSHDSXORAX,AXPUSHAXPUSHCSPOPDSMOVCX,64HMOVBX,300MOVSI,0MOVDI,0NEXT:MOVAL,BYTEPTRNUM1[BX][SI]ADDAL,ALMOVNUM2[DI],ALINCDIINCSILOOPNEXTRETMAINENDPNUM1DW500DUP(?)NUM2DB150DUP(?)CSEGENDSENDSTART6.DSEGSEGMENTNUMDB12,13DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXLEABX,NUMMOVAL,[BX]ANDAL,01HJNZEEEMOVAL,[BX+1]ANDAL,01HJNZDDDINCBYTEPTR[BX]INCBYTEPTR[BX+1]EEE:MOVAH,4CHINT21HDDD:MOVCL,[BX+1]MOV[BX],CLJMPEEECSEGENDSENDSTART7.完成两个多位十进制数相加,设相加的两个5位十进制数以其非压缩的BCD码形式已分别存入DATA1和DATA2开始的单元中,要求将其存入DATA3单元并显示输出在CRT上。要点:多字节加法;转换为非压缩的BCD码;再转换为对应的ASCII码,调用DOS中断显示。8.P129例3-36,要点:给出四个条件后,使用MOVSB指令。9.以下8086汇编语言程序完成的操作要求是:在首址为SEGDATA的数据区中存放了待定的100个元符号字节数据ARY。逐个累加该组数据中的每一个数,把和数存入变量SUM中。试按上述操作要求完成程序中指令空缺部分的填空。SEGDATA;数据段定义开始ARYDBDUP(?);预留100个字节SUMDW?;数据段定义结束SEGCODESEGMENT;预分配段寄存器START:PUSHDSXORAX,AXPUSHAXMOVBX,OFFSETARY;取数组ARY的首址MOVCX,100;计数器CX置初值NEXT:ADDAL,[BX]ADCAH,0;处理AL向AH的进位INCBXLOOPNEXT;累加,直至CX=0MOVSUM,A