还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
汇编练习及答案习题
4.2写出完成下列要求的变量定义语句
1.在变量中保存个字变量1varl64512H,4512,-1,100/3,10H,65530;在变量中保存字符2var2串‘BYTE,word,WORD;;在缓冲区中留出个字节的存储空间3bufl100在缓冲区中,保存个字节的,再保存个字节的4buf2555H10240,并将这一过程重复次;7在变量中保存缓冲区的长度;5var3bufl在变量中保存变量和缓冲区的偏移地址6pointer varlbufl.设变量的逻辑地址为画出下列语句定义的变量的2varl0100:0000,存储分配图varl DB12,-12,20/6,4DUP0,55H var2DB Assemblevar3DW ABcd,Evar4DW var2var5DD var
2.指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错3误指令指出原因设为字变量,为标号VARI,VAR2L11MOV SI,1002MOV BX,VAR1[SI]3MOV AX,[BX]4MOV AL,[DX]5MOV BRAL6MOV VARI,VAR27MOV CS,AX8MOV DS,0100H9MOV[BX][SI],110MOV AX,VAR1+VAR211ADD AX,LENGTH VARI12OR BL,TYPE VAR213SUB[DI],78H14MO VSVARI,VAR215PUSH100H16POP CSLEADI,STRINGMOV CX,200CLDMOV AL,20HREPZ SCASBJNZFOUNDJMP NOT_FOUND问转移至」的条件I FOUND.设在数据段的变量和中保存有个字节的字符串,52OLDS NEWS5如果字符串不同于OLDS字符串,则执行否则顺序执行程序NEWS NEW,LESS,.编程实现将字符串中的小写字母变换成大写字母53STRING.设在数据段中定义了54STUDENT_NAME DB30DUPSTUDENT_ADDR DB9DUPSTUDENT_PRINT DB50DUP编写程序实现用空格符清除缓冲区1STUDENT.PRINT;在中查找第一个‘二字符;2STUDENT_ADDR在中查找最后一个‘二字符;3STUDENT_ADDR如果中全为空格符,则全4STUDENT_NAME STUDENT_PRINT存入,*;传送至」的前个字5W STUDENT_NAME ISTUDENT_PRINT30节中,将STUDENT_ADDR传送到的后个字节中STUDENT.PRINT
9.在为起始地址的表中存有按由小到大顺序排列的一组55DS:X_BUF位无符号数,其中16该表的第
一、二两字节存放数据个数现在中存有一个关DS:X_KEY键字位无符号数,要求从上述表中查找第一个此关键字,若找到此关16键字,则中存放该关键字在该表中的偏移量;若无此关键字,则将该关DI键字插入表中,使该表依然有序,并将该关键字在表中的偏移量X_BUF存放在中DI.分析下列子程序,并回答相应的问题56FUNC1FUNCI PROCNEARXOR CX,CXMOV DX,01MOV CL,XJCXZ A20INC DXINCDXDEC CXJCXZA20A10:MOV AX,02SHL AX,CLADD DX,AXLOOP A10A20:MOV Y,DXRETFUNCI ENDP若该子程序的入口参数为,其输出参数为则x0X10Y,该子程序的功能是二;1Y=fX若,则2X=0Y=;若,则X=3Y=;若,则=X=5Y.已知个位无符号数已存放在缓存区中,其中第57N3n1008inx一个字节存放个数个位无符号数已存n,bdsfid=324p=/n1008放在缓存区中,其中第一个字节存放个数inx n,从第二个字节开始存放数据,下列的子程序完成对这个数FUNC2N据按由大到小排序,在划线处填入必要指令,使以下子程序完整FUNC2PROC NEARLEA SI,INXXOR CX,CXMOV CL,[SI]DEC CXBIO:INC SIMOV DI,SIPUSH SIMOV AL,[SI]B20:INC SICMP AL,[SI]MOV AL,[SI]MOVDI,SIB30:LOOP B20POPCXPOP SIMOV AHJSI]MOV[SI],ALMOV[DI],AHLOOP BIOFUNC2ENDP.假设和单元的内容为双精度数和单元的内容为58X X+2P,Y Y+2双精度数(均Q P,Q为无符号数,其中为低位数),下列的子程序完成使X,Y FUNC3时,()2PQ AX=1;〈二时,(),在划线处填入必要指令,使以下子程2P QAX序完整FUNC3PROC NEARMOVDX,X+2MOV AX,XADD AX,AXADC DX,DXJCC10CMP DX,Y+2C20CIOCMP AX,YC20CIO:MOV AXJC30C20:MOV AX,-1C30:RETFUNC3ENDP上机题编写程序实现,将缓冲区中的个字按递增
59.BUFFER100排序,并按下列格式顺序显示数据〈原序号〉1数据〈原序号〉2上机题按同余法产生一组随机数,并按赋
60.N ln=50n+50给名同学的门并按赋给名455bdsfid=372p=/n=50,n+5045同学的门5课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数A:90~100,B:80~89,C:70~79,D:66分以下,按下列格式显示~69,E:60~65,F:60〈总人数〉Total〈人数A:1〈人数B:2〈人数C:3〈人数D:4〈人数E:5〈人数F:6上机题编写程序实现下列项功能,通过从键盘输入进行
61.51〜5菜单式选择按数字键,完成将字符串中的小写字母变换成大写字母用户11输入由英文大小写字母或数字组成的字符串以回车结束,变换后〜9按下列格式在屏幕上显示〈原字符串〉例如abcdgyt0092〈新字符串〉ABCDGYT0092按任一键重做按键返回主菜单;Esc按数字键,完成在字符串中找最大值用户输入由英文大小写22字母或数字组成的字符串以回车结束,找出最大值后按下列格式0〜9在屏幕上显示〈原字符串〉〈最大值》.The maximumis按任一键重做;按键返回主菜单Esc按数字键,完成输入数据组的排序用户输入一组十进制数值3〃3小于然后变换成十六进制数,并按递增方式进行排序,按下列格式255,在屏幕上显示〈原数值串〉〈新数值串〉按任一键重做;按键返回主菜单Esc按数字键,完成时间的显示首先提示用户对时,即改变系统4〃4的定时器以冒号间隔,回车结束,然后在屏幕的右上角实时显示HH:MM:SS出时间HH:MM:SS按任一键重新对时;按键返回主菜单Esc按数字键,结束程序的运行,返回操作系统55〃[参考答案]
1.W1varl DW4512H,4512,-1,100/3,10H,655302var2DBBYTE,word7/WORD73bufl DB100DUP4buf2DB7DUP5DUP55H,10DUP2405var3DB LENGTHbufl6pointer DWvarl,var
2.答;指令正确,源立即数寻址,目的寄存器31MOV SI,100寻址;指令正确,源寄存器相对寻址,目的2MOV BX,VAR1[SI]寄存器寻址;指令正确,源寄存器间接寻址,目的3MOV AX,[BX]寄存器寻址;指令错误,不能用作为地址寄存器4MOV AL,[DX]DX;指令错误,类型不一致5MOV BRAL;指令错误,指令不能从存储器到存储6MOVVAR1,VAR2MOV器传送;指令错误,不能用作为目的操作数7MOV CS,AX CS;指令错误,指令不能将立即数传送到段寄8MOV DS,0100H MOV存器;指令错误,类型不定9MOV[BX][SI],1;指令错误,指令中不能完成加法10MOV AX,VAR1+VAR2MOV运算;指令正确,源:立即数寻址,目的11ADD AX,LENGTH VARI寄存器寻址;指令正确,源立即数寻址,目的寄12OR BL,TYPE VAR2存器寻址指令错误,类型不定13SUB[DI],78H;;指令正确,源隐含寻址,目的:隐含寻14MOVS VARI,VAR2址;指令错误,立即数不能直接压入堆栈15PUSH100H;指令错误,不能用作为目的操作数16POP CSCS;指令错误,指令中不能使用段寄存17XCHG AX,ES XCHG;指令错误,指令不能从段寄存器到18MOV DS,CS MOV段寄存器;指令正确,段内直接转移19JMP L1+5指令错误,指令格式错误20DIV AX,10;DIV;指令错误,移位指令的移位数要么是,要么是21SHL BL,21CL指令正确,源立即数寻址,目的寄存器寻址22MOV AL,15+23;23;指令正确,源寄存器寻址,目的隐含寻址MUL CX;指令正确,源:寄存器间接寻址,目的:寄存器24XCHG CL,[SI]寻址;指令正确,源寄存器寻址,目的直接25ADC CS:
[0100],AH寻址;指令正确,源立即数寻址,目的直接寻26SBB VAR1-5,154址.答;段内直接寻址;段内直接寻址51JMP L12JMP NEARL1;段内相对寻址;段内间接寻址3JNZL14JMPBX;段内相对寻址;段内间接寻址5JG L16JMP VAR1[SI];段间直接寻址;段间间接寻7JMP FARPTR L18JMP DVAR1址.答寄存器中的内容为7DX10FFH.答;指令错误,因为超出一个字节91ADD AL,N1-N2Nl-N2的范围;指令正确2MOV AX,N3+N4指令正确3SUBBX,N4-N3;;指令错误,因为超出一个字节4SUB AH,N4-N3-N1N4-N3-N1的范围;指令正确5ADD AL,N2;指令正确6MOV AH,N2*N
2.解:111MOV AL,40H2SHL AL,13MOV AH,16H4ADD AL,AH执行后AL=96H.解:;执行后131XOR BX,VAR BX=00F9H;执行后2AND BX,VAR BX=0002H;执行后3OR BX,VAR BX=OOFBH;执行后4XOR BX,11110000B BX=003BH;执行后5AND BX,00001111B BX=00C4H;执行后不变6TEST BX,1BX=OOCBH.答:151d2c3b.解设要传送的字符串有个1730N=30STACK SEGMENTSTACK STACKDW100H DUPTOPLABEL WORDSTACKENDSDATA SEGMENTASCIDB abcdefghijklmnopqrstuvwxyzl234ASC2DB30DUPDATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SRTOPMOV CX,NLEA SI,ASCIADD SI,CXLEA DI,ASC2LI:DEC SIMOV AL,[SI]MOV[DI],ALINC DILOOP LI;返回MOV AH,4CH DOSMOV AL,0INT21HCODE ENDS.解程序如下19STACK SEGMENTSTACK STACKDW100H DUPTOPLABEL WORDSTACKENDSDATA SEGMENTVARDW2100,1750,2410DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SRTOPMOV AX,VARCMP AX,VAR+2JBE LIXCHG AX,VAR+2LI:CMP AX,VAR+4JBE L2XCHG AX,VAR+4L2:MOV VAR,AXMOV AX,VAR+2CMP AX,VAR+4JBE L3XCHG AX,VAR+4MOV VAR+2,AXL3:;返回MOV AH,4CH DOSMOV AL,0INT21HCODE ENDSENDSTART如果中保存的为有符号数,则只需将上述程序中的条指令VAR3JBE改成儿指令E.解:21XOR DX,DXMOV CX,8L1:SHL BL,1RCL DX,1SHL AL,1RCL DX,117XCHGAX,ES18MOV DS,CS19JMP Ll+520DIV AX,1021SHL BL,222MOVAL,15+2323MUL CX24XCHG CL,[SI]25ADC CS:
[0100],AH26SBB VARI-5,
154.说明下列指令对的区别4与1MOV AX,VARI MOV AX,OFFSET VARI与2MOV AX,VAR2LEA AX,VAR2与3MOVAL,LENGTH VARIMOVAL,SIZE VARI与4MOVAL,ES:[DI]CMPAL,[SI]CMPSB与5SHR AL,1SARAL,1与6SHR AL,1RORAL,1与7ROL BX,1RCL BX,
1.写出下列转移指令的寻址方式设为标号,为字型变量,5L1VAR1为双字型变量DVAR11JMP L12JMP NEARL13JNZ L14JMPBX5JG L16JMP VAR1[SI]7JMP FARPTR LI8JMP DVAR
1.设6DS=2000H,BX=0100H,SI=0002H,20100=3412H,20102求下列指令执行=7856H,21200=4C2AH,21202=65B7H,后寄存器的内容AX1MOV AX,1200H;2MOV AX,BX;3MOVAX,[1200H];4MOV AX,[BX];5MOV AX1100[BX];6MOV AX,[BX][SI];z7MOV AX,1100[BX][SI].执行下列指令后,寄存器中的内容是多少?7DXTABLE DW25,36,-1,-16,10000,13PYL DW7LOOPLI.解假设字变量、和中至少有两个相等,程序23VARI VAR2VAR3段如下MOV AX,VARICMP AX,VAR2JNZ LICMP AX,VAR3JNZ L2MOV AX,-1LI:CMPAX,VAR3JNZ L3MOV AX,VAR2LEA SI,VAR2JMP L4L3:LEA SI,VARIJMP L4L2:MOV AX,VAR3LEA SI,VAR3L4:.答:25BX=C02DH.提示在个字节变量中存入,每次报数时相当于加上该变量32n1的内容;当报数到m时该人出列,相当于使变量内容为其编号为其相当偏移地址,因此0,最好采用寄存器相当寻址方式这样处理的好处是,继续报数时不必考虑已出列的人,只是他们对后续报数的影响是加也就是说他已不起作用0,.提示显示部分应调用题编写的显示子程序
3433.解定义的宏指令如下43TRANSSEG MACRODATAMOV AX,DATAMOV DS,AXMOV ES,AXENDM.解定义的宏指令如下44INPUTSTR MACROBUFLEA DX,BUFMOV AH,OAHINT21HENDM.解定义的宏指令如下45DISPSTR MACROBUFLEA DX,BUFMOV AH,09INT21HENDM.答:从缓冲区传送个字节到缓冲区50FIRST100SECOND.答在缓冲区中,找到第一个非空格字符时转到51STRING FOUNDoMOV BX,OFFSET TABLEADDBX,PYLMOV DX,[BX].如果堆栈的起始地址为,栈底为82200:00000100H,SP求=00A8H,栈顶地址;1的内容;2SS再存入数据后,的内容35678H,3AF2H SP.设已用伪指令定义了个标识符9EQU4N1EQU2100N2EQU10N3EQU20000N4EQU25000下列指令是否正确?并说明原因1ADD AL,N1-N2;2MOVAX,N3+N4;3SUBBX,N4-N3;4SUB AH,N4-N3-N1;5ADD AL,N2;6MOVAH,N2*N2按下列要求写出指令
10.;寄存器的低位清零,其余位不变1WAX4将寄存器的低位置,其余位不变;2BX41将寄存器的低位保持不变,高位取反;3AL44测试中的位和位当这两位同时为时将置否4BX12,0AL OFFH,则清零;AL测试中的位和位当这两位有一位为时将置5BX12,0AL,否则清零;OFFH AL将中保存的字母码变换成相应的大写字母的6AL ASCIIASCH码;将中保存的字母码变换成相应的小写字母的7AL ASCIIASCII码;将中的各位取反;8AX将中的低位取反,高位不变;9DX79将中的低位与高位互换10CX88写出完成下述功能的程序段
11.传送至寄存器;140H IJAL将的内容乘以2AL2;传送至」寄存器;316H lAH的内容加上的内容4AL AH计算最后结果二?AL.写出完成下述功能的程序段12从缓冲区的偏移地址处传送一个字到寄存器;1BUF0004AX寄存器的内容右移位;2WAX2将内容与的偏移地址处的一个字相乘;3AX BUF0006相乘结果存入的偏移地址处低位在前4BUF0020H.设变量的内容为求下列13BX=110010116,VAR OOUOOIOB,指令单独执行后的内容BX1XOR BX,VAR;2AND BX,VAR;3OR BX,VAR;4XOR BX,11110000B;5AND BX,00001111B;6TEST BX,lo.设求下列指令单独执行14DX=10111011B,CL=3,CF=1z后的内容DX1SHR DX,1;2SAR DX,CL;3SHL DX,CL;4SHLDX,1;5ROR DX,CL;6ROL DL,CL;7SAL DH,1;8RCL DX,CL;9RCR DL,
1.选择题各小题只有一个正确答案15执行下列三条指令后1MOV SP,1000HPUSH AXCALLBXa.SP=1000H;b.SP=OFFEH;c.SP=1OO4H;d.SP=OFFCH;要检查寄存器中的内容是否与相同,应使用的指令为2AL AH
1.AND AL,AH
2.ORAL,AH
3.XOR AL,AH
4.SBB AL,AH指令与为标号的区别在于53JMP NEARPTR LICALL LILI寻址方式不同;a.是否保存的内容;b.IP目的地址不同;c.对标志位的影响不同d..寄存器组成位数,为高位,编写程序段实现16DX:AX32DX右移位,并将移出的低位保存在中;1DX:AX33CL左移位,并将移出的高位保存在中;2DX:AX33CL.已知在的起始处保存有个字符的码,编写汇编语17BUF NASCII言程序实现,将这组字符串传送到缓冲区中,并且使字符串的顺序BUFR与原来的顺序相反.利用移位、传送和相加指令实现的内容扩大倍18AX
10.在缓冲区中连续存放着个位的无符号数,编写程序实19VAR316现将其按递增关系排列;如果中保存的为有符号数,则再编写程序VAR实现将其按递减关系排列.编写程序段实现将中的每一位重复次,构成位的双字20BL432DX:例如当时,得到的二AX,BL=01011101B DXOFOFH,AX=0FF0FHo.编写程序段实现将和中的每一位依次交叉,得到的位21AL BL16字保存在中,例如则得至DX AL=01100101B,BL=11011010B,U的DX=1011011010011001Bo.在变量和中分别保存有两个字节型的正整数,编写22VAR1VAR2完整的汇编语言程序实现当两数中有一个奇数时,将奇数存入,偶数存入1VAR1VAR2;当两数均为奇数时,两个变量的内容不变;2当两数均为偶数时,两数缩小一倍后存入原处
3.已知在字变量、和中保存有个相同的代23VARI VAR2VAR33码,但有一个错码,编写程序段找出这个错码,并将它送,其地址送AX如果个代码都相同,则在中置-标志SI;3AX
1.分析下列程序段的功能:24MOV CL,04SHL DX,CLMOV BL,AHSHL AX,CLSHR BL,CLOR DL,BL.下列程序段执行后,求寄存器的内容25BXMOVCL,3MOV BX,0B7HROL BX,1ROR BX,CL.下列程序段执行后,求寄存器的内容26BXMOVCL,5MOVBX,7D5CHSHR BX,CL.设数组的第个字节存放数组的长度,从第个27ARRAY12562字节开始存放无符号位数,求数组元素之和结果放在中如果计算8AX的和超出位数的范围,则给出溢出标志二16DX-
1.设中存放有个无符号数或有符号数,编程实现求它们28BUF N的最小值(存入)和最大值(存入)AX DX.设中存放有个无符号(第个字节存放缓冲区的长度),29BUFFER N1编程实现将其中的元素抹去,并更新其长度0编写程序实现个字乘以或除以个字,设存放个字,
30.N1BUFN N存放乘数或除数,存放乘积,存放商,BUF1PRODUCT QUOTIENT存放余数REMAINDER.编写一个子程序实现统计中的个数,然后检测出字节型缓31AL1冲区中和个数相等的元素个数BUF
1.设有(设为)个人围坐在圆桌周围,按顺时针给他们编号32n17(1,,…,),从第个人开始按顺时针方向加报数,当报数到(设为2n11m)时,该人出列,余下的人继续进行,直到所有人出列为止编写程序11模拟这一过程,求出出列人的编号顺序.编写子程序实现以十六进制数在屏幕上显示的内容33AL.从键盘上读入一个正整数(),转换成十六进制34N0N65535数存入,并在屏幕上显示出来AX.在缓冲区中,第个字节存放数组的长度()从35BUFFER1256,第个字节开始存放字符的码,编写子程序完成在最高位给字符加2ASCII上偶校验.编写程序完成求多位数(个字)的绝对值36N.已知斐波那契数列的定义为37)3(,1,12121FFFF编写F i,求该数列前项的子程序n.编写程序实现循环显示条信息,保存每条信息的变量分别为3810INFOM1~INFORM
10.编写程序实现将包含个数据的数组分成两个数组正3920ARRAY数数组和负数数组并分别将这两个数组中数据的个ARRAYP ARRAYN,数显示出来.编写程序实现求缓冲区个字中的最小偶数(存入40BUFFER100)AXO.编写程序实现求级数+++41+2222的前项和刚大于的项数In n2000no.已知数组中包含有个互不相等的整数,数组中包含有42A15B20个互不相等的整数,编写程序实现将既在数组中出现又在数组中出A B现的整数存放于数组中C.定义一条宏指令,实现将指定数据段的段地址传送到段寄存器43或的功能ES DS.定义一条宏指令,实现从键盘中输入一个字符串利用44INT21H的号功能
09.定义一条宏指令,实现在屏幕上显示出指定的字符串
45.定义一条宏指令,实现在屏幕上输出回车、换行
46.利用其它指令完成与下列指令一样的功能471REP MOVSB;2REP LODSB;3REP STOSB;4REP SCASB
0.设在数据段中定义了48STR1DB ASSEMBLELANGUAGE7STR2DB20DUP利用字符串指令编写程序段实现从左到右将中的字符串传送到1STR1STR2;从右到左将中的字符串传送到2STR1STR2;将中的第个和第个字节装入3STR167DX;扫描字符串中有无空格,如有则将第一个空格符的地址4STR1传送到SI
0.设在数据段中定义了49STRING DBToday isSundayJuly16,2000z编写程序实现将中的‘用‘/代替STRING.分析下列程序段完成的功能50MOV CX,100LEASI,FIRSTLEA DI,SECONDREP MOVSB.分析下列程序段51。