欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    新编汇编语言知识程序设计四五章习题集参考总结解答.doc

    • 资源ID:2774846       资源大小:120KB        全文页数:15页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    新编汇编语言知识程序设计四五章习题集参考总结解答.doc

    #+习题四4.5 已知(AX)= 836BH,X分别取下列值,执行“CMPAX, X”后,标志位ZF、CF、OF、SF各是什么?(1)X=3000H(2)X=8000H(3)X=7FFFFH(4)X=0FFFFH(5)X=0答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是: (1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101 (5) ZCOS=00014.7 测试名为X的一个字节,如果X的第1,3位均为1,转移到L1,如果只有一位为1,转移到L2,如果两位全为0,转移到L3。写出对应的指令序列。答:MOVAL, XANDAL, 0000 1010BJZL3CMPAL, 0000 1010BJEL1JMPL24.12 计算分段函数: X的值从键盘输入,Y的值送显示器输出。答:INCLUDEYLIB.HDATASEGEMNTMESS1DB0DH, 0AH, Input value of X please : $MESS2DB0DH, 0AH, Y= : $DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXLEADX, MESS1CALLREADINT;输入X的值CMPAX, -2JGEL2L1:SUBAX, 3;AXX-3JMPDONEL2:CMPAX, 3JGL3MOVBX, AXADDAX, AX;AX2XADDAX, AX;AX4XADDAX, BX;AX5XADDAX, 6;AX5X+6JMPDONEL3:MOVAX, 2;AX2DONE:LEADX, MESS2CALLWRITEINT;输出Y的值CALLCRLFMOVAX, 4C00HINT21HCODEENDSENDSTART4.14 编写程序,求10元素字数组LIST中绝对值最小的数,存入MIN单元。答:DATASEGEMNTLISTDW-56, +12, 88, -126, -5, 16, 32, -99, 72, -18MINDW?MINABSDW?DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVAX, LISTMOVMIN, AX;将数组第一个元素假设为绝对值最小的数MOVMINABS, 32767;最小的绝对值假设为32767LEASI, LISTMOVCX, 10AGAIN:MOVAX, SICMPAX, 0JGESKIP1NEGAX;求绝对值SKIP1:CMPAX, MINABS;绝对值与假设的最小绝对值比较JGESKIP2;假设的绝对值较小,跳过MOVMINABS, AX;保存新的最小绝对值MOVAX, SI;取出新的绝对值最小的数MOVMIN, AX;保留新的绝对值最小的数SKIP2:ADDSI, 2LOOPAGAINMOVAX, 4C00HINT21HCODEENDSENDSTART说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自LIST数组。4.16 一个有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。答:DATASEGEMNTLISTDW-56, +12, 88, -126, -5, 16, 32, -99, 72, -18, 0MINDW?MAXDW?AVGDW?DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVMIN, 32767;将32767假设为最小的数MOVMAX, -32768;将-32768假设为最大的数MOVAVG, 0;AVG用作累加器,清零LEASI, LISTMOVCX, 0AGAIN:MOVAX, SICMPAX, 0JZDONE;找到零元素,转DONE结束处理INCCX;纪录非零元素个数ADDAVG, AX;累加CMPAX, MINJGESKIP1MOVMIN. AX;比预设最小值还小,保留SKIP1:CMPAX, MAXJLESKIP2 MOVMAX, AX;比预设最大值还大,保留SKIP2:ADDSI, 2JMPAGAINDONE:JCXZNULL;元素个数为零,转NULL处理MOVAX, AVGCWDIDIVCXMOVAVG, AX;计算平均值JMPEXIT NULL:MOVMIN, 0;元素个数为0,将“最大值”、“最小值”MOVMAX, 0;“平均值”清零MOVAVG, 0EXIT:MOVAX, 4C00HINT21HCODEENDSENDSTART4.21编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送P数组,负数送M数组。答:DATASEGEMNTARRAYDW30 DUP(?);汇编之前置入数据PDW30 DUP(?)MDW30 DUP(?)DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXLEABX, ARRAY;ARRAY数组指针MOVSI, 0;P数组指针MOVDI, 0 ;M数组指针MOVCX, 30ONE:MOVAX, BX;从ARRAY数组取出一个数据ANDAX, ALJGEPLUS;正数、零转PLUSMINUS:MOVMDI, AX;负数存入M数组ADDDI, 2JMPNEXTPLUS:MOVPSI, AX;正数、零存入P数组ADDSI, 2NEXT:ADDBX, 2 LOOPONEMOVAX, 4C00HINT21HCODEENDSENDSTART4.30 编写程序,输入N,计算:S=1*2+2*3+(N-1)*N 答:INCLUDEYLIB.HCODESEGMENTASSUMECS: CODEMESS1DB0DH, 0AH, Input N please: $MESS2DB0DH, 0AH, S= $START:PUSHCSPOPDSLEADX, MESS1CALLREADDEC;输入NMOVCX, AXXORBX, BX;BX用作累加器ONE:MOVAX, CXMOVSI, AXDECSIMULSI;计算J*(J-1)ADDBX, AX;累加LOOPONELEADX, MESS2MOVAX, BXCALLWRITEDEC;输出结果CALLCRLF MOVAX, 4C00HINT21HCODEENDSENDSTART4.31 编写程序,输入N,输出如下矩阵(设N=5)1 1 1 1 12 2 2 2 13 3 3 2 14 4 3 2 15 4 3 2 1答:设I为行(15), J为列(15),则(I, J)位置上的数据为:I>(6-J)? I: 6-J 。INCLUDEYLIB.HCODESEGMENTASSUMECS: CODESTART:CALLCRLFMOVSI, 1;SI为行号ROW:MOVCX, 5;CX为6-列号COL:CMPSI, CX;判断当前位置JBUPDOWN:MOVAX, CX;下半三角,取6-列号JMPOUTPUTUP:MOVAX, SI;上半三角,取行号OUTPUT:MOVDX, -1CALLWRITEDEC;输出一个数据LOOPCOLCALLCRLF;结束本行INCSI;修改行号CMPSI, 5JBEROW;未满5行,继续MOVAX, 4C00HINT21HCODEENDSENDSTART习题五5.4 阅读下面的程序,指出该程序计划完成的功能,同时指出程序中尚存在的错误。CODE SEGMENTASSUME:CS: CODESTART:MOVCX, 20LOOP0:CALLPRINTSPACELOOPLOOP0MOVAH, 4CHINT21HPRINTSPACEPROCNEARMOVCX,40;该行上面添加:PUSH CXPSLOOP:MOVAL, MOVAH, 02HINT21HLOOPPSLOOPMOVAL, 0AHMOVAH, 02HINT21HMOVAL, 0DHMOVAH, 02HINT21H; 该行下面添加:POPCXRETPRINTSPACE ENDPCODE ENDS END START功能:输出20行空行,每行有40个空格。5.6 阅读下面的子程序,叙述它完成的功能,它的入口参数和出口参数各是什么?CLSCREENPROCMOVAX, 0600HMOVCX, 0MOVDH, XMOVDL, YMOVBH, 07HINT10HRETCLSCREENENDP解:屏幕窗口上卷,左上角为(0,0),右下角为(y, x),卷入行属性为黑底白字。5.7 编写程序,键入一个以$为结束符的数字串,统计其中“0”“9”各个数字出现的次数,分别存放到S0S9这10个单元中去。解:.MODEL SMALL.DATAS0DB0S1DB?S2DB0S3DB0S4DB0S5DB0S6DB0S7DB0S8DB0S9DB0KEYINDB100 DUP(0).CODESTART:MOVAX, DATAMOVDS, AXMOVCX, 0LEABX, KEYINNEXT:MOVAH, 01HINT21HCMPAL, $JZCOUNTINCCXMOVBX, ALINCBXJMPNEXTCOUNT:LEABX, KEYINCOUNT1:LEADI, S0MOVAL, BXSUBAL, 30HMOVAH, 0ADDDI, AXINCBYTE PTRDIINCBXLOOPCOUNT1MOVAX, 4C00HINT21HENDSTART5.8 下面程序求某数据区中无符号数据最大值,观察程序执行中堆栈变化,画出以下5个堆栈状态图。(1)CALLMAX指令执行之前(2)CALLMAX指令执行之后。(3)保护现场之前(4)恢复现场之后(5)执行指令POPSMAX之后程序清单如下:DATASEGMENTBUFDW98, 34, 897, 345, 678, 21345, 67, 2COUNTEQU($-BUF) / 2SMAXDW?DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXLEAAX, BUF; 入口参数进栈PUSHAXMOVAX, COUNTPUSHAXCALLMAXPOPSMAX; 最大值出栈,送SMAXMOVAH, 4CHINT21HMAXPROC PUSHBPMOVBP, SPMOVSI, BP+6; BUF的偏移地址送SIMOVCX, BP+4; COUNT送CXMOVBX, SI; 取第一个数据至BXDECCXMAX1:ADDSI, 2CMPBX, SIJAENEXTMOVAX, SI; 取第二个数至AXNEXT:LOOPMAX1MOVBP+6, BX; 最大值进栈POPBPRET2; 返回后SP指向最大值MAXENDPCODEENDSENDSTARTSP返回偏移地址COUNTBUF的偏移地址CALL MAX执行之后SPCOUNTBUF的偏移地址CALL MAX执行之前 SP返回偏移地址COUNTBUF的偏移地址保护现场之前 BPSP返回偏移地址COUNT最大值恢复现场之后BP返回偏移地址COUNTSP最大值执行RET 2之后5.9 编写求绝对值的子程序,利用它计算三个变量的绝对值之和。解:.MODELSMALL.DATAVALUEDW-5, 5, -10SUMDW0.CODESTART:MOVAX, DATAMOVDS, AXLEABX, VALUEMOVCX, 3MOVSUM, 0ONE:CALLABSADDSUM, AXADDBX, 2LOOPONEMOVAX, 4C00HINT21H; 子程序ABS; 功能:求一个字整数的绝对值; 入口:字整数的偏移地址在BX中; 出口:该字整数的绝对值在AX中ABSPROCMOVSUM, 0AGAIN:MOVAX, BXANDAX, AXJGESKIPNEGAXSKIP:RETABSENDPENDSTART5.10 子程序计算从2开始的N(N<50)个偶数之和(246),主程序从键盘输入整数N,调用子程序求出N个偶数之和,并显示结果。用以下3种方法编写完整程序。(1)子程序和主程序在同一代码段。(2)在同一模块(源程序文件),但不在同一代码段。(3)各自独立成模块,即在不同的源程序文件中。解:(1)INCLUDEYLIB.H.MODEL SMALL.DATASUMDW0PROMPT1DB0DH, 0AH, INPUT THE NUMBER N:$PROMPT2DB0DH, 0AH, THE SUM IS :$.CODESTART:MOVAX, DATAMOVDS, AXLEADX, PROMPT1CALLREADDECCMPAX, 0JZEXITMOVCX, AXCALLSUMMLEADX, PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX, 4C00HINT21HSUMMPROCMOVAX, 0NEXT:MOVBX, CXADDBX, BXADDAX, BXLOOPNEXTRETSUMMENDPENDSTART(2)INCLUDE YLIB.HDATA SEGMENTSUMDW0PROMPT1DB0DH, 0AH, INPUT THE NUMBER:$PROMPT2DB0DH, 0AH, THE SUM IS:$DATA ENDSCODE1SEGMENTASSUMEDS: DATA, CS: CODE1START:MOVAX, DATAMOVDS, AXLEADX, PROMPT1CALLREADDECCMPAX, 0JZEXITMOVCX, AXCALLFAR PTR SUMMLEADX, PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX, 4C00HINT21HCODE1ENDSCODE2SEGMENTASSUMECS: CODE2, DS: DATASUMMPROCFARMOVAX, 0NEXT:MOVBX, CXADDBX, BXADDAX, BXLOOPNEXTRETSUMMENDPCODE2ENDSENDSTART(3); EXEC5103A.ASMPUBLICSUMMCODE2SEGMENTASSUMECS: CODE2SUMMPROCFARMOVAX, 0NEXT:MOVBX, CXADDBX, BXADDAX, BXLOOPNEXTRETSUMMENDPCODE2ENDSEND; EXEC5103B.ASMINCLUDEYLIB.HEXTRNSUMMDATASEGMENTSUMDW0PROMPT1DB0DH, 0AH, INPUT THE NUMBER:$PROMPT2DB0DH, 0AH, THE SUM IS:$DATAENDSCODE1SEGMENTASSUMEDS: DATA, CS: CODE1START:MOVAX, DATAMOVDS, AXLEADX, PROMPT1CALLREADDECCMPAX, 0JZEXITMOVCX, AXCALLFAR PTR SUMMLEADX, PROMPT2CALLWRITEDECCALLCRLFEXIT:MOVAX, 4C00HINT21HCODE1ENDSENDSTART5.19 编写排序子程序SORT,以DS、SI和CX作为入口参数,把DS:SI为起始地址的一个带符号的字数组进行由小到大排序,参数CX中存放的是数组中元素个数。解:DATAREASEGMENTARRAYDW1, 9, 6, 8, 5, 4CNTDW6ADDRDW?DATAREAENDSCODESEGMENTASSUMECS: CODE, DS: DATAREASTART:MOVAX, DATAREAMOVDS, AXLEASI, ARRAYMOVCX, CNTCALLSORTMOVAX, 4C00HINT21HSORTPROCPUSHCXPUSHAXPUSHBXPUSHSIINIT:MOVBX, 1DECCXJZSORTEDPUSHSIPUSHCXNEXT:MOVAX, SICMPSI+2, AXJGECONTXCHGSI+2, AXMOVSI, AXXORBX, BX; 置交换标志CONT:ADDSI, 2LOOPNEXTPOPSIPOPCXCMPBX, 0JEINITSORTED:POPSIPOPBXPOPAXPOPCXRETSORTENDPCODEENDSENDSTART5.20 编写一个子程序,以AX为入口参数,把AX中的各个二进制位颠倒次序后还放回AX中。例如,入口参数AX=1011000111101001B,处理后AX应为1001011110001101B。解:INVERTPROCPUSHCXPUSHBXMOVCX, 16NEXT:ROLAX, 1RCRBX, 1LOOPNEXTMOVAX, BXPOPBXPOPCXRETINVERTENDP5.21 编写子程序,入口参数是一个字数据,存放在AX中,统计该字的16个二进制位中含有多少个1和多少个0。解:DATASEGMENTNUMDW1234HZERODB0ONEDB0DATAENDSCODESEGMENTASSUMEDS: DATA, CS: CODESTART:MOVAX, DATAMOVDS, AXMOVAX, NUMMOVCX, 16CALLCOUNTMOVONE, ALMOVZERO, AHMOVAX, 4C00HINT21HCOUNTPROCPUSHBXMOVBX, 0NEXT:ROLAX, 1ADCBX, 0LOOPNEXTMOVBH, 16SUBBH, BLMOVAX, BXPOPBXRETCOUNTENDPCODEENDSENDSTART5.24 编写一段递归子程序计算N!(N>=0)。其递归定义如下:0!1N! =N * (N-1)!(N>0)解:.DATANDW5MDD?.CODESTART:MOVAX, DATAMOVDS, AXMOVCX, NCALLFACTMOVWORD PTR M, AXMOVWORD PTR M+2, DXMOVAX, 4C00HINT21HFACTPROCNEARCMPCX, 0JZDONEPUSHCXDECCXCALLFACTPOPCXMULCXJMPEXITDONE:MOVAX, 1EXIT:RETFACTENDPENDSTART

    注意事项

    本文(新编汇编语言知识程序设计四五章习题集参考总结解答.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开