华中师范大学网络教育学院《汇编语言程序设计》练习测试题库参考答案一、选择题答案:1.B2.C3.B4.C5.C6.C7.A8.A9.D10.C11.B12.A13.C14.B15.A16.D17.A18.A19.D20.A21.A22.D23.C24.B25.C26.D27.B28.D29.A30.A31.D32.A33.D34.D35.D36.D37.B38.C39.A40.D41.A42.C43.B44.B45.C46.D47.D48.D49.A50.A51.D52.B53.C54.A55.B56.C57.A58.C59.D60.C61.A62.D63.C64.C65.D66.A67.B68.C69.B70.D71.D72.A73.D74.C75.D76.C77.C78.D79.D80.B二、判断题答案:1.×2.×3.√4.√5.×6.√7.×8.×9.×10.×11.√12.√13.×14.√15.√16.√17.×18.×19.√20.√21.√22.√23.√24.×25.√26.×27.√28√29.√30.√31.√32.√33.√34.√35.√36.√37.√38.√39.×40.√41.×42.√三、填空题答案:1.运行管理程序2.汇编程序汇编3.存储器译码分析4.源地址目标地址存储器IO设备5.636.64KD字节7.不能64K8.009.5510.FF11.5512.源操作数13.目的操作数14.CNT1CL15.字字节16.带符号数无符号数17.CFOF18.SIDI19.ALAXDF20.ALAXSI21.+-22.段内转移段间转移23.IPCS24.段地址偏移地址25.-128+12726.条件码27.末尾28.不影响29.内部外部30.IPCSPSW31.第一个32.不能33.PTR34.标号35.:36.PTR37.地址表达式38.SEG39.OFFSET40.TYPE41.LENGTH42.HIGH43.标号、变量44.指令、伪操作、宏指令的助记符45.表达式46.注释项47.操作数项48.顺序线性法49.算法存储工作50.1-几没有51.00H4CH52.数据工作53.计数控制法54.任一55.25656.已知未知57.单重循环58.满足59.条件60.DO-UNTILDO-WHILE61.IF62.EXE63.堆栈,SS64.;(或分号)65.AH66.用寄存器传递、用存储单元传递、用堆栈传递(顺序可调换)67.中断,中断源。68.SI,DI69.接口70.16H、10H和17H71.ASCII码,属性72.000DH85B92H73.85B92H74.SHLAX,1SHL,AX,175.OF,AF,PF76.DH=0F0HCF=177.+65528__,____-32760___78.___状态___,__控制___79._CF__,_OF___80.下一条指令的首地址81.___6__,___3__82.__ES:[DI]___83.SI或DI84.320EH85.100H四、编程题答案:1.试编写一个程序段,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。…MOVAH,01INT21HMOVCH,ALDOWN:MOVAH,02HMOVDL,07HINT21HDECCHJNZDOWN…2.编写一个完整的汇编语言程序,在屏幕上显示“华中师范大学”的英文名称。DATASEGMENTSTRDB”HUAZHONGSHIFANDAXUE$”DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXLEADX,STRMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN3.编程求从1开始连续50个奇数之和,并将结果存放在SUM字存储单元中。DATASEGMENTSUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXMOVCX,50MOVAX,1MOVBX,1LOP:ADDAX,BXADDBX,2DECCXJNZLOPMOVSUM,AXMOVAH,4CHINT21HCODEENDSENDBEGIN4.已知数组A包含6个互不相等的整数,数组B包含9个互不相等的整数,试编一程序将在A、B两数组中都出现的整数存放于数组C中。DATASEGMENTADB2,……BDB5,…..CDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXLEASI,ALEADI,BLEABX,CMOVCH,6LOP1:MOVCL,9LOP:MOVAH,[SI]CMP[DI],AHJNZLMOV[BX],AHINCBXL:INCDIDECCLJNZLOPINCSILEADI.BDECCHJNZLOP1MOVAH.4CHINT21HCODEENDSENDBEGIN5.试编写从内存BUF单元开始的256个字单元的清零程序。DATASEGMENTBUFDW21,22,……..DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXLEABX,BUFMOVCX,0FFHLOP:MOV[BX],0ADDBX,2DECCXJNZLOPMOVAH,4CHINT21HCODEENDSENDBEGIN6.设在变量ADR为起始地址的字节存储单元中存放一组有符号数据,编写程序分别统计:(1)正数的个数;(2)负数的个数;(3)0的个数。DATASEGMENTADRBD9,-1,3,-5,4,….SUMDB?,?,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS.AXLEABX,ADRLOP:MOVAH,[BX]CMPAH,0JZL1JLL2INCCHJMPDOWNL1:INCCLJMPDOWNL2:INCDLDOWN:DECDLJNZLOPMOVSUM,CLMOVSUM+1,CHMOVSUM+2,DLMOVAH,4CHINT21HCODEENDSENDBEGIN7.在DATA1首址区有100个字节数据,试编写一个完整程序,将其中的奇、偶数分开。统计奇、偶数的个数,并将奇数送DATA2首址区,偶数送DATA3首址区。DATASEGMENTDATA1DB12,3,4,……..DATA2DB100DUP(?)DATA3DB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXLEABX,DATA1LEASI,DATA2LEADI,DATA3MOVCH,0MOVCL,0MOVDX,100LOP:MOVAH,[BX]TESTAH,01HJNZLMOV[DI],AHINCDIINCCLJMPL1L:MOV[SI],AHINCSIINCCHL1:INCBXDECDXJNZLOPMOVAH,4CHINT21HCODEENDSENDBEGIN8.编写一程序段,将AL中的第7位和第0位,第6位和第1位,第5位和第2位,第4位和第3位互换。…MOVCX,8MOVAH,0K1:SHRAL,1RCLAH,1DECCXJNZK1MOVAL,AH…9.编制一个程序求数组变量ARRAY中有多少个二进制位为1的程序。DATASEGMENTARRAYDW-l,7FFFH,-80000H.+9,-56ABHDW0B12H,-2,O,6578H,30EFHCOUNTEQU($-ARRAY)/2NUMBITDB2DUP(?)TEMDW?DATAENDSSTACKSEGMENTSTAPNDB1000DUP(?)SYACKENDSCODESEGMENTASSUMECS,CODE,DS:DATA,SS:STACKBEGINPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVTEM,SPLEABX,ARRAYMOVCX,COUNTGOON:MOVAX,LBX]AGAIN:SHLAX,1JNCNEXTADDWORDPTRNUMBIT+1ADCNUMBIT+2,0NEXT:ANDAX,AXJNZAGAlNADDBX,2LOOPGOONMOVSP,TEMRETBEGINENDPCODEENDS10.写一子程序CRLF,其功能是输出回车换行。CRLFPROCPUSHAXPUSHDXMOVAH,2MOVDL.0DHINT21HMOVDL,0AHINT21HPOPDXPOPAXRETCRLFENDP11.编一程序将字节变量DATAl中的压缩BCD数转换成二进制数,并将其存储到原变量中去的程序。DATASEGMENTDATAlDB99HTEMDW?DATAENDSSTACKSEGMENTSTABDBl00DUP(?)STACKENDSCODESEGMENTASSUMECS;CODE,DS:DATA,SS:STACKSTARTPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVTEM,SPMOVAL,DATAlMOVCL.4SHRAL,CLMOVDL,lOMULBLMOVDL,AlMOVAL,DATAlANDAL,0FHADDAL,BLMOVDATA1。ALMOVSP,TEMRETSTARTENDPCODEENDSENDSTART12.试编写一程序段,在CHAR为首址的26个字节单元中依次存放字母'A'~'Z'。chardb26dup(?)...start:leabx,charmoval,'A'movcx,26lop1:mov[bx],alincalincbxlooplop1...13.设在DAT1,DAT2字单元中存放一双字长有符号数,编一程序段,完成求出该双字长数的绝对值后送ABS1和ABS2字存储单元。…start:movax,dat1movdx,dat2ordx,dxjnsnextnotaxnotdxaddax,1adcdx,0next:movabs1,axmovabs2,dx…14.有两个无符号数分别存放于DATA1和DATA2单元,要求将两数中大的一个挑选出来,并送入DATA3单元。…MOVAL,DATA1CMPAL,DATA2JNCS1MOVAL,DATA2S1:MOVDATA3,ALHLT…15.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。…BEGIN:MOVAH,1INT21HCMPAL,’a’JBSTOPCMPAL,’z’JASTOPSUBAL,20HMOVDL,ALMOVAH,2INT21HJMPBEGINSTOP:RET…16.编制程序段实现:将AX寄存器中的16位二进制数分成四组,每组4位,然后把这4组数分别放在AL、BL、CL、和DL中。BCMOVBH,ALMOVCH,AHMOVAL,AHANDAL,0F0HMOVBL,AHANDBL,0FHMOVCL,BHANDCL,0F0HMOVDL,BHANDDL,0FH17.编制完整程序实现下列算式:W=X+Y+36-Z。设X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。BCDATASEGMENTXDD…YDD…ZDD…WDD…DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XADDAX,YMOVBX,X+2ADCBX,Y+2ADDAX,36ADCBX,0SUBAX,ZSBBBX,Z+2MOVW,AXMOVW+2,BXCODEENDSE