青岛大学期末考试汇编试题整理.doc

上传人:土8路 文档编号:10306877 上传时间:2021-05-07 格式:DOC 页数:13 大小:56.50KB
返回 下载 相关 举报
青岛大学期末考试汇编试题整理.doc_第1页
第1页 / 共13页
青岛大学期末考试汇编试题整理.doc_第2页
第2页 / 共13页
青岛大学期末考试汇编试题整理.doc_第3页
第3页 / 共13页
青岛大学期末考试汇编试题整理.doc_第4页
第4页 / 共13页
青岛大学期末考试汇编试题整理.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《青岛大学期末考试汇编试题整理.doc》由会员分享,可在线阅读,更多相关《青岛大学期末考试汇编试题整理.doc(13页珍藏版)》请在三一文库上搜索。

1、青岛大学20122013 IBM-PC汇编语言程序设计期末试题一、单项选择题(10分)十个题,每题一分二、填空题(12分)八个题,十二个空,每空一分三、程序填空题(20分)四个题,十个空,一个空2分1、 字符串挪动的问题,从一个地址移动到另一个地址2、 找偶数的(貌似就是课本上的那个,第五章习题)3、 在字符串中查找某个字符并用另一个字符代替4、 关于宏的问题四、程序分析题(20分)四个题,每题五分1、 做过的练习题2、 两个数比较的问题3、 第四章存储单元的分配dw,db,$,EQU4、 在一个字符串中查找某个字符的问题五、程序设计题(38分)四个题,第一题八分,第二三四题每个十分1、 在内

2、存空间里的数用其他字符代替2、 字符串比较的题目3、 数组的运算,包括加减乘除4、 课后练习题三、程序填空题1.1试编制宏定义,要求把存储器中的一个用EOT(ASCII码04H)字符结尾的字符串传送到另一个存储区去。答:宏定义如下:SENDMACROSCHARS, DCHARSLOCALNEXT, EXITPUSHAXPUSHSIMOVSI, 0NEXT:MOVAL, SCHARSSIMOVDCHARSSI, ALCMPAL, 04H;是EOT字符吗?JZEXITINCSIJMPNEXTEXIT:POPSIPOPAXENDM2、试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最

3、小偶数,并把它存放在AX中。答:程序段如下:BEGIN:MOVBX, 0 MOVCX, 100COMPARE:MOVAX, DATABX;取数组的第一个偶数ADDBX, 2TESTAX, 01H;是偶数吗?LOOPNZ COMPARE;不是,比较下一个数JNZSTOP;没有偶数,退出JCXZSTOP;最后一个数是偶数,即为最小偶数,退出COMPARE1:MOVDX, DATABX;取数组的下一个偶数ADDBX, 2TESTDX, 01H;是偶数吗?JNZNEXT;不是,比较下一个数CMPAX, DX ;(AX)(DX)吗?JLENEXTMOVAX, DX;(AX)(DX),则置换(AX)为最小

4、偶数NEXT:LOOPCOMPARE1STOP:RET3、 编写程序段,把字符串STRING中的&字符用空格符代替。STRING DB The date is FEB&03答:程序段如下:MOVCX, 18MOVAL, &CLDMOVDI, SEG STRINGMOVES, DILEADI, STRINGREPNESCASBJNENEXTDECDIMOVES:BYTE PTR DI, ;送空格符NEXT: 4、试编写宏定义SUMMING,要求求出双字数组中所有元素之和,并把结果保存下来。该宏定义的哑元应为数组首址ARRAY,数组长度COUNT和结果存放单元RESULT。答:宏定义如下:SUMM

5、INGMACROARRAY,COUNT,RESULTLOCALADDITIONMOVESI, 0MOVECX, COUNTADDITION:MOVEAX, ARRAYESI*4;双字为4字节ADDRESULT, EAXADCRESULT+4, 0;将进位加到结果的高位双字中INCESILOOPADDITIONENDM四、程序分析题1.1(这个极有可能考)、假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作?MOV DX, X+2MOV AX, XADD AX, XADC DX, X+2CMP DX, Y+2JL L2JG L1C

6、MP AX, YJBE L2L1: MOV AX, 1JMP SHORT EXITL2: M发OV AX, 2EXIT:INT 20H答:此程序段判断p*2q,则使(AX)=1后退出;p*2q,则使(AX)=2后退出。1.2、试分析下面的程序段完成什么功能?MOVCL, 04SHLDX, CLMOVBL, AHSHLAX, CLSHRBL, CLORDL, BL答:本程序段将 (DX),(AX) 的双字同时左移4位,即将此双字乘以10H (16)。1.3、试分析下列程序段:ADDAX, BXJNOL1JNCL2SUBAX, BXJNC L3JNOL4JMPSHORT L5如果AX和BX的内容给

7、定如下:AX BX(1) 147BH80DCH(2) B568H42C8H(3) 42C8H608DH (4) D023H 9FD0H(5) 94B7H B568H问该程序分别在上面5种情况下执行后,程序转向哪里?答:(1) 转向L1(2) 转向L1(3) 转向L2(4) 转向L5;因为加法指令后AX中已经是6FF3H(5) 转向L5;因为加法指令后AX中已经是4A14H3.1假设程序中的数据定义如下:PARTNODW?PNAMEDB16 DUP (?)COUNTDD?PLENTHEQU$-PARTNO问PLENTH的值为多少?它表示什么意义?答:PLENTH=22=16H,它表示变量PART

8、NO、PNAME、COUNT总共占用的存储单元数(字节数)。4.1设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN:xxxx”显示出次数。答:程序如下:DSEGSEGMENTENGDBHere is sun, sun ,$DISPDB SUN:DATDB 0000 , 0DH, 0AH, $KEYWORDDB sunDSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX

9、, DSEGMOVDS, AX;给DS赋值MOVES, AX;给ES赋值BEGIN:MOVAX, 0MOVDX, DISP-ENG-2;计算ENG的长度(每次比较sun,因此比较次数-2)LEABX, ENGCOMP:MOVDI, BXLEASI, KEYWORDMOVCX, 3REPECMPSB;串比较JNZNOMATCHINCAX;是,SUN的个数加1ADDBX, 2NOMATCH:INCBX;指向ENG的下一个字母DECDXJNZCOMPDONE:MOVCH, 4;将次数转换为16进制数的ASCII码MOVCL, 4LEABX, DAT;转换结果存入DAT单元中DONE1:ROLAX,

10、CLMOVDX, AXANDDL, 0FH;取一位16进制数ADDDL, 30HCMPDL, 39HJLESTOREADDDL, 07H;是“AF”所以要加7STORE:MOVBX, DL;转换结果存入DAT单元中INCBXDECCHJNZDONE1DISPLAY:LEADX, DISP;显示字符串程序(将DISP和DAT一起显示)MOVAH, 09HINT21HRETMAINENDPCSEGENDS;以上定义代码段;-ENDSTART4.2从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。答:程序段如下:DSEGSEGMENTBUFFDB50 DUP ( )

11、COUNTDW 0DSEGENDSBEGIN:LEABX, BUFFMOVCOUNT, 0INPUT:MOVAH, 01;从键盘输入一个字符的功能调用INT21HMOVBX, ALINCBXCMPAL, $;是$结束符吗?JNZINPUT;不是,继续输入LEABX, BUFF;对非数字字符进行计数NEXT:MOVCL, BXINCBXCMPCL, $;是$结束符,则转去显示JZDISPCMPCL, 30H;小于0是非数字字符JBNEXTCMPCL, 39H;大于9是非数字字符JANEXTINCCOUNT;个数+1JMPNEXTDISP:;16进制数显示程序段(省略)4.3现有一个以$结尾的字符

12、串,要求剔除其中的空格.datastringdb Let us have a try !,$.code.startupmov si,offset stringoutlp:cmp byte ptr si,$;外循环,先判断后循环jz done;为$结束cmp byte ptr si, ;检测是否是空格jnz next;不是空格继续循环mov di,si;是空格,进入剔除空格分支;该分支是循环程序段 inlp:inc dimov al,di;前移一个位置mov di-1,alcmp byte ptr di,$;内循环,先循环后判断jnz inlpjmp outlpnext:inc si;继续对后续

13、字符进行处理jmp outlpdone:.exit 0;结束五、程序设计题1.1、编写程序段,把字符串STRING中的&字符用空格符代替。STRING DB The date is FEB&03答:程序段如下:MOVCX, 18MOVAL, &CLDMOVDI, SEG STRINGMOVES, DILEADI, STRINGREPNESCASBJNENEXTDECDIMOVES:BYTE PTR DI, ;送空格符NEXT: 2.1、试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示MATCH, 若不相同则显示NO MATCH。答:程序如下:DS

14、EGSEGMENTSTRING1DB I am a student.STRING2DB I am a student!YESDB MATCH, 0DH, 0AH, $NODB NO MATCH, 0DH, 0AH, $DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEG, ES: DSEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DSEGMOVDS, AX;给DS赋值MOVES, AX;给ES赋值;BEGIN:LEASI, STRING1;设置串比较指令的初值LEADI, STRING2CL

15、DMOVCX, STRING2 - STRING1REPECMPSB;串比较JNEDISPNOLEADX, YES;显示MATCHJMPDISPLAYDISPNO:LEADX, NO;显示NO MATCHDISPLAY:MOVAH, 9;显示一个字符串的DOS调用INT21HRETMAINENDPCSEGENDS;以上定义代码段;-ENDSTAR2.2编写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串则执行NEW_LESS;否则顺序执行程序。答:程序段如下:MOVCX, 5CLDMOVDI, SEG OLDSMOVDS, DIMOVES, DILEA

16、SI, OLDSLEADI, NEWSREPECMPSBJNENEW_LESSNEW_LESS:3.1把0100D之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生的人数加1。)答:程序如下:DSEGSEGMENTGRADEDW 30 DUP (?);假设已预先存好30名学生的成绩RANKDW 30 DUP (?)DSEGENDS;-CSEGSEG

17、MENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DSEGMOVDS, AX;给DS赋值BEGIN:MOVDI, 0MOVCX, 30;外循环计数器LOOP1:PUSHCXMOVCX, 30;内循环计数器MOVSI, 0MOVAX, GRADE DIMOVDX, 1;起始名次为第1名LOOP2:CMPGRADE SI, AX;成绩比较JBEGO_ONINCDX;名次+1GO_ON:ADDSI, 2LOOPLOOP2POPCXMOVRNAK DI, DX;名次存入RANK数组ADDD

18、I, 2LOOPLOOP1RETMAINENDPCSEGENDS;以上定义代码段;-ENDSTART3.1实现数组运算数组X(X1,X10)和数组Y(Y1,Y10),计算Z1=X1+Y1Z5=X5Y5Z8=X8Y8Z2=X2+Y2Z6=X6+Y6Z9=X9+Y9Z3=X3Y3Z7=X7Y7Z10=X10+Y10Z4=X4Y4结果存入Z数组。;设置标志位:0做加法;1做减法;逻辑尺:存放10各标志位,在LOGIC_RULE存储单元中0000 00 00 1101 1100最高的6位无意义,从低位开始所设的标志位指示每次要做的操作顺序。.modelsmall.stack.dataxdwx1 , x

19、2 ,x3 ,x4 ,x5 ,x6 ,x7 ,x8 ,x9 ,x10ydwy1 , y2 ,y3 ,y4 ,y5 ,y6 ,y7 ,y8 ,y9 ,y10zdwz1 ,z2 ,z3 ,z4 ,z5 ,z6 ,z7 ,z8 ,z9 ,z10logic_ruledw00dch.code.startupmovbx , 0movcx , 10movdx , logic_ruleNext: mov ax , xbx shrdx , 1 jc subtract addax , ybx jmpshort resultSubstract: subax , ybxResult: mov zbx , ax add

20、bx ,2 loop next .exit 0 end4.1试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。答:程序段如下:BEGIN:MOVAH, 1;从键盘输入一个字符的DOS调用INT21HSUBAL, 0JBSTOP;输入字符9吗?JASTOPCBWMOVCX, AX;响铃次数NJCXZSTOPBELL:MOVDL, 07H;准备响铃MOVAH, 2;显示一个字符的DOS调用,实际为响铃INT21HCALLDELAY100ms;延时100msLOOPBELLSTOP:RET4.2把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编

21、写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。答:程序段如下:BEGIN:MOVDL, 0;计数初始值MOVCX, 8COMPARE:TESTAX, 03H;是数03吗?JNZNOEQUAL;不是,转走INCDL;是,计数NOEQUAL:RORAX, 1;准备判断下一个数RORAX, 1LOOPCOMPAREADDDL, 0;将计数值转换为ASCII码MOVAH, 2;进行显示INT21HSTOP:RET4.3有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。答:程序如下:D

22、SEGSEGMENTMEMDW 100 DUP (?)DSEGENDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DSEGMOVDS, AX;给DS赋值BEGIN:MOVSI, (100-1)*2;(SI)指向MEM的末元素的首地址MOVBX, -2;地址指针的初值MOVCX, 100COMP:ADDBX, 2CMPMEM BX, 0JZCONSLOOPCOMPJMPFINISH;比较完了,已无0则结束CONS:MOVDI, BXCONS1:CMPDI, S

23、I;到了最后单元码?JAENOMOVMOVAX, MEM DI+2 ;后面的元素向前移位MOVMEM DI, AXADDDI, 2JMPCONS1NOMOV:MOVWORD PTR SI, 0;最后单元补0LOOPCOMPFINISH:RETMAINENDPCSEGENDS;以上定义代码段;-ENDSTART4.4试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息:(1) 如果三个数都不相等则显示0;(2) 如果三个数有二个数相等则显示1;(3) 如果三个数都相等则显示2。答:程序如下:DSEGSEGMENTARRAYDW 3 DUP (?)DSEGE

24、NDS;-CSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEGSTART:PUSHDS;设置返回DOSSUBAX, AXPUSHAXMOVAX, DSEGMOVDS, AX;给DS赋值BEGIN:LEASI, ARRAYMOVDX, 0;(DX)用于存放所求的结果MOVAX, SIMOVBX, SI+2CMPAX, BX;比较第一和第二两个数是否相等JNENEXT1INCDXNEXT1:CMPSI+4, AX;比较第一和第三两个数是否相等JNENEXT2INCDXNEXT2:CMPSI+4, BX;比较第二和第三两个数是否相等JNENUMINCDXNUM:CMPDX, 3JLDISPDECDXDISP:ADDDL, 30H;转换为ASCII码MOVAH, 2;显示一个字符INT21HRETMAINENDPCSEGENDS;以上定义代码段;-ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1