版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言上机实验报告时间:地点:实验人员:一、题目180X86汇编语言程序设计》教材中P95的3.7题。1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。(2)请事先指出依次执行每条程序指令后(AX)的内容。(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。(4)记录上机执行后与(2(3)中对应的内容。说明:MOV指令不影响标志位,DEC指令不影响CF标志位,NOT指令不影响标志位。280X86汇编语言程序设计》教材中P94的3.3题。1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以(2)请事先画出数据段中数据的存储形式。(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。(4)请事先给出各调指令在汇编后的形式。(5)比较上机执行后,看到的各项内容是否与(2(3),(4)内容一致。不一致的应分析错误原因。说明:MOVBX,OFFSETSTR1+3对应的汇编后的指令为:MOVBX,3MOVBX,STR1对应的汇编后的指令为:MOVBX,[0000](上条指令等价于MOVBX,DS[0000])380X86汇编语言程序设计》教材中P96的3.11题。1)请事先指出程序运行结束后,显示器显示的内容。(2)若将NUM的定义改成如下形式:NUMDB35显示的结果是什么?(3)若将NUM的定义改成如下形式:NUMDB59显示的结果是什么?(4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。4.从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH!”,不相等显示“NOMATCH!要求:(1)使用10号功能调用输入字符串;(2)使用9号功能调用输出提示信息;提示:先比较长度是否相等。5选做题输入一个无符号的数字串,然后以16进制形式显示出串的值。例如:INPUTANUMBER:59RESULT:3BH其中下划线上的内容(59)为程序运行时输入的串。6.已知X、、、W、Q、T为五个定义在数据段中的字变量的内容由编程者自己给出),请计算(X-Y*Z+W)/Q,并将商→T、余数→T+4,并判断:①若结果大于0,则显示“T=(X-Y*Z+W)/Q>0②若结果等于0,则显示“T=(X-Y*Z+W)/Q=0③若结果小于0,则显示“T=(X-Y*Z+W)/Q<0要求:算术运算指令的使用;分支程序的设计;结果(商和余数)的组合判断方法;要尽量避免运算结果的溢出。给出测试数据、预期结果。7.《80X86汇编语言程序设计》教材中的习题4.7(P147)8.进行排序,按照按从大到小的顺序输出排序后的结果。例如:BUFDW123,0,-100,-50,300,25输出结果:-100-50025123300要点:循环程序的设计;内存中数据的操纵方法;数据到串的转换,观察排序的执行过程。要求:画出程序流程图,给出寄存器、存储单元的分配方法。9.选做题输入一个字符串,统计在该字符串中各个字母(不区分大小写字母)出现的次数。显示出现次数不为0的字母及其出现的次数。二、实验要求1、掌握分支循环程序的设计方法;2、掌握循环程序的设计方法;3、熟悉相关汇编指令的使用;4、熟练掌握TD的使用。5、加深对一些常用的汇编指令的理解;6、加深对常用DOS功能调用指令的理解;三、实验过程180X86汇编语言程序设计》教材中P95的3.7题。1)将该题改成一完整的程序(可以省略实验报告中的程序框图)。.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16BUFDB50DB0DB50DUP(0)DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,0DECAXADDAX,07FFFHADDAX,2NOTAXSUBAX,0FFFFHADDAX,8000HORAX,0BFDFHANDAX,0EBEDHXCHGAH,ALSALAX,1RCLAX,1CODEENDSENDSTART(2)请事先指出依次执行每条程序指令后(AX)的内容。00007FFFFFFF7FFE800000008000BFDFABCDCDAB9B56(3)请事先指出执行ADD、SUB、SAL、RCL指令后,CF、ZF的值。CF、ZFADDAX,07FFFHADDAX,20,01,00,01,00,01,0SUBAX,0FFFFHADDAX,8000HSALAX,1RCLAX,1(4)记录上机执行后与(2(3)中对应的内容。说明:MOV指令不影响标志位,DEC指令不影响CF标志位,NOT指令不影响标志位。280X86汇编语言程序设计》教材中P94的3.3题。1)将该题改成一完整的程序,其中数据段的定义为习题3.1中的数据段(可以省略.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16STR1DB0,1,2,3,4,5STR2DB'012345'COUNTEQU30NUMBDB3DUP(2)NUMWDW10H,-60HPOINDW0DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETSTR1+3MOVSI,OFFSETSTR2MOVCL,COUNTMOVDX,WORDPTRNUMBMOVBP,NUMW+2MOVAL,3[SI]MOVAH,[SI+BX+1]MOVCH,BYTEPTRNUMW+3MOVSXEAX,AXCODEENDSENDSTART(2)请事先画出数据段中数据的存储形式。0001020304053031323334350202021000A0FF(3)请事先指出依次执行每条程序指令后相应寄存器中的内容。movbx,offsetstr1+3movsi,offsetstr2movcl,countbx0003si0006cx001Edx0202bpFFA0ax5B33ax3433cxFF1Eeax00003433movdx,wordptrnumbmovbp,numw+2moval,3[si]movah,[si+bx+1]movch,byteptrnumw+3movsxeax,ax(4)请事先给出各调指令在汇编后的形式。MOVAX,DATAMOVAX,5B56MOVDS,AXMOVDS,AXMOVBX,OFFSETSTR1+3MOVSI,OFFSETSTR2MOVCL,COUNTMOVBX,0003MOVSI,0006MOVCL,1EMOVDX,WORDPTRNUMBMOVBP,NUMW+2MOVDX,[000C]MOVBP,[0011]MOVAL,[SI+03]MOVAH,[BX+SI+01]MOVCH,[0012]MOVEAX,AXMOVAL,3[SI]MOVAH,[SI+BX+1]MOVCH,BYTEPTRNUMW+3MOVSXEAX,AX(5)比较上机执行后,看到的各项内容是否与(2(3),(4)内容一致。不一致的应分析错误原因。第一次程序段没有加入MOVAX,DATA和MOVDS,AX,致使DS段的内容与原数据不一致。说明:MOVBX,OFFSETSTR1+3对应的汇编后的指令为:MOVBX,3MOVBX,STR1对应的汇编后的指令为:MOVBX,[0000](上条指令等价于MOVBX,DS[0000])380X86汇编语言程序设计》教材中P96的3.11题。要求:(1)请事先指出程序运行结束后,显示器显示的内容。<NUM>=39H(2)若将NUM的定义改成如下形式:NUMDB35显示的结果是什么?<NUM>=23H(3)若将NUM的定义改成如下形式:NUMDB59显示的结果是什么?<NUM>=3,H(4)指出程序运行后看到的结果,若不一致,分析产生错误的原因。将NUM定义为NUMDB5910进制转换为16进制过程中,未定义16进制中的10h-15h转换为相应的A-F的ASC码。因此,输出产生错误。4.从键盘输入两串字符分别存入BUF1和BUF2区,比较两串内容是否相等,相等显示“MATCH!”,不相等显示“NOMATCH!要求:(1)使用10号功能调用输入字符串;(2)使用9号功能调用输出提示信息;提示:先比较长度是否相等。源程序.386DATASEGMENTUSE16BUF1DB50DB0DB50DUP(0)BUF2DB50DB0DB50DUP(0)CRLFDB0DH,0AH,'$'INFO1DB0DH,0AH,'MATCH!$'INFO2DB0DH,0AH,'NOMATCH!$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUF1MOVAH,10INT21HLEADX,CRLFMOVAH,9INT21HLEADX,BUF2MOVAH,10INT21HLEADX,CRLFMOVAH,9INT21HMOVBL,BUF1+1MOVBH,0MOVDL,BUF2+1MOVDH,0CMPBL,DLJNEEXITLEASI,BUF1+2LEADI,BUF2+2MOVCX,BXLOPA:MOVAL,[SI]CMPAL,[DI]JNEEXITINCSIINCDIDECCXJNZLOPALEADX,INFO1MOVAH,9INT21HMOVAH,4CHINT21HEXIT:LEADX,INFO2MOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDSTARTMatch:Nomatch:5选做题输入一个无符号的数字串,然后以16进制形式显示出串的值。例如:INPUTANUMBER:59RESULT:3BH其中下划线上的内容(59)为程序运行时输入的串。.386DATASEGMENTUSE16BUF1DB80DB0DB80DUP(0)BUF2DB80DB0DB80DUP(0)INFO1DB'INPUTANUMBER:$'INFO2DB'RESULT:$'CRLFDB0DH,0AH,'$'DATAENDSSTACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXLEADX,INFO1MOVAH,9INT21HLEADX,BUF1MOVAH,10INT21HLEADX,CRLFMOVAH,9INT21HMOVSI,0MOVCL,BUF1+1MOVAX,0MOVBX,0AHLOOPA:MOVDL,BUF1+2[SI]SUBDL,30HIMULAX,BXADDAX,DXINCSILOOPLOOPAXORCX,CXMOVEBX,16LEADI,BUF2LOOPB:XOREDX,EDXDIVEBXPUSHDXINCCXOREAX,EAXJNZLOOPBLOOPC:POPAXCMPAL,10JBL1ADDAL,7L1:ADDAL,30HMOV[DI],ALINCDILOOPLOOPCMOVBYTEPTR[DI],'H'INCDIMOVBYTEPTR[DI],'$'LEADX,INFO2MOVAH,9INT21HLEADX,BUF2MOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDBEGIN调试:输入:123输出:7BH6.已知X、Y、Z、W、Q、T为五个定义在数据段中的字变量(X,Y,Z,W,Q的内容由编程者自己给出),请计算(X-Y*Z+W)/Q,并将商→T、余数→T+4,并判断:①若结果大于0,则显示“T=(X-Y*Z+W)/Q>0②若结果等于0,则显示“T=(X-Y*Z+W)/Q=0③若结果小于0,则显示“T=(X-Y*Z+W)/Q<0要求:算术运算指令的使用;分支程序的设计;结果(商和余数)的组合判断方法;要尽量避免运算结果的溢出。给出测试数据、预期结果。.386DATASEGMENTUSE16XDW10YDW3ZDW5WDW5QDW2TDW2DUP(0)STR1DB'T=(X-Y*Z+W)/Q>0!$'STR2DB'T=(X-Y*Z+W)/Q=0!$'STR3DB'T=(X-Y*Z+W)/Q<0!$'DATAENDSSTACKSEGMENTUSE16STACKSTADB100DUP(?)STACKENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,XMOVBX,YIMULBX,ZSUBAX,BXADDAX,WCMPAX,0JZOUTPUT2CWDIDIVQMOVT,AXMOVT+4,DXSALAX,1JCOUTPUT3JNCOUTPUT1OUTPUT1:LEADX,OFFSETSTR1MOVAH,9INT21HJMPEXITOUTPUT2:MOVDX,OFFSETSTR2MOVAH,9INT21HJMPEXITOUTPUT3:MOVDX,OFFSETSTR3MOVAH,9INT21HJMPEXITEXIT:MOVAH,4CHINT21HCODEENDSENDSTART若数据为:XDW10YDW3ZDW5WDW5QDW2结果为:若数据为:XDW10YDW3ZDW5WDW2QDW2结果为:若数据为:XDW10YDW3ZDW5WDW9QDW-2结果为:7.《80X86汇编语言程序设计》教材中的习题4.7(P147)源代码:.386DATASEGMENTUSE16ACODB0DH,0AH,'THEASCIICODEOF$'ISDB'IS',?,?,'H$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXAGAIN:MOVAH,9MOVDX,OFFSETACOINT21HMOVAH,1INT21HCMPAL,0DHJEBACKMOVAH,ALMOVCL,4SHRAH,CLADDAH,30HCMPAH,3AHJCNAD7ADDAH,7NAD7:MOVIS+4,AHANDAL,0FHADDAL,30HCMPAL,3AHJCNA7ADDAL,7NA7:MOVIS+5,ALMOVAH,9MOVDX,OFFSETISINT21HJMPAGAINBACK:MOVAH,4CHINT21HCODEENDSENDSTART测试结果:8.进行排序,按照按从大到小的顺序输出排序后的结果。例如:BUFDW123,0,-100,-50,300,25输出结果:-100-50025123300要点:循环程序的设计;内存中数据的操纵方法;数据到串的转换,观察排序的执行过程。要求:画出程序流程图,给出寄存器、存储单元的分配方法。源代码:NAMEMAINEXTERNF10T2:FAR,F2T10:FAR,QUEUE:FARIF1INCLUDEMACRO.LIBENDIF.386DATASEGMENTUSE16PARAPUBLIC'DATA'BUFDB8DUP(0)ARRDB32DUP(0)SIGNDB0COUNTDW0ERRORDB'ISILLEGALDIGIT!$'DATAENDSSTACK0<200DUP(0)>CODESEGMENTUSE16PARAPUBLIC'CODE'ASSUMEDS:DATA,ES:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXLEABX,ARRMOVCOUNT,0MOVSIGN,0BEG:LEADI,BUFMOVCX,0NEXT0:MOVAH,1INT21HCMPAL,','JEDIGITCMPAL,0DHJNEPCMPCOUNT,0JEEXITINCSIGNJMPDIGITP:STOSBINCCXJMPNEXT0DIGIT:LEASI,BUFMOVDX,16CALLF10T2CMPSI,-1JEERRMOV[BX],AXADDBX,2INCCOUNTCMPSIGN,1JEEND0JMPBEGEND0:MOVCX,COUNTLEASI,ARRMOVBP,1CALLQUEUECRLFMOVBX,COUNTLEASI,ARROUT2:MOVAX,[SI]ADDSI,2MOVDX,16CALLF2T10OUT1','DECBXJNEOUT2JMPEXITERR:WRITEERROREXIT:MOVAH,4CHINT21HCODEENDSENDSTARTNAMEF2T10PUBLICF2T10.386DATASEGMENTUSE16PARAPUBLIC'DATA'BUFDB12DUP(?)DATAENDSCODESEGMENTUSE16PARAPUBLIC'CODE'ASSUMECS:CODE,DS:DATAF2T10PROCPUSHBXPUSHSILEASI,BUF;CMPDX,32;JNEB;MOVSXEAX,AX;B:ORAX,AXJNSPLUSNEGAXMOVBYTEPTR[SI],'-'INCSIPLUS:MOVBX,10CALLRADIXMOVBYTEPTR[SI],'$'LEADX,BUFMOVAH,9INT21HPOPSIPOPBXRETF2T10ENDPRADIXPROCPUSHCXPUSHDXXORCX,CXLOP1:XORDX,DXDIVBXPUSHDXINCCXORAX,AXJNZLOP1LOP2:POPAXCMPAL,10JBL1ADDAL,7L1:ADDAL,30HMOV[SI],ALINCSILOOPLOP2POPDXPOPCXRETRADIXENDPCODEENDSEND.386NAMEF10T2PUBLICF10T2DATASEGMENTUSE16PARAPUBLIC'DATA'SIGNDB?DATAENDSCODESEGMENTUSE16PARAPUBLIC'CODE'ASSUMECS:CODE,DS:DATAF10T2PROCPUSHEBXMOVEAX,0MOVSIGN,0MOVBL,[SI]CMPBL,'-'JNENEXT2MOVSIGN,1DECCXJZERRNEXT1:INCSIMOVBL,[SI]NEXT2:CMPBL,'0'JBERRCMPBL,'9'JAERRSUBBL,30HMOVZXEBX,BLIMULEAX,10JOERRADDEAX,EBXJOERRJSERRJCERRDECCXJNZNEXT1CMPDX,16JNEPP0CMPEAX,7FFFHJAERRPP0:CMPSIGN,1JNEQQNEGEAXQQ:POPEBXRETERR:MOVSI,-1JMPQQF10T2ENDPCODEENDSEND.386NAMEQUEUEPUBLICQUEUECODESEGMENTUSE16PARAPUBLIC'CODE'ASSUMECS:CODEQUEUEPROCPUSHAXPUSHDXPUSHDIMOVDI,SIDECCXQU1:MOVDX,CXMOVSI,DIQU2:MOVAX,[SI]CMPBP,0JENOCMPAX,[SI+2]JGENOXCHXCH:XCHG[SI+2],AXMOV[SI],AXNOXCH:ADDSI,2DECDXJNEQU2LOOPQU1POPDIPOPDXPOPAXRETNO:CMPAX,[SI+2]JAENOXCHJMPXCHQUEUEENDPCODEENDSEND建立库:MACRO.LIB测试结果:输入:123,0,-100,-50,300,25输出:300,123,25,0,-50-100程序流程图:0→ARR中数组元素个数计数器COUNT→BX,0→SIGNBUF→→CX输入一字符→AL是回车符?NYYSIGN将BUF中的ASC码转换为16位二进制数→AXY?N(AX)→ARR存储区,(COUNT)+1→COUNTN(SIGN)=1?Y调用F10T2子模块将ARR存储区中的数转换为十进制ASC码输出结束本题寄存器、存储单元的分配方法:主模块中:AX——中间寄存器BX——往ARR字存储区送数指针,初值为ARRCX——作以逗号分隔的一个十进制数字串长度计数器,初值为0DX——按系统功能调用的规定使用DI——往BUF字节存储区送输入的字符指针,初值为BUFSI——调用F10T2子模块的入口参数,作从BUF区取字符指针BUF——输入缓冲区首址ARR——经转换得到的二进制数组存储区首址COUNT——ARR存储区中数组元素个数计数器,初值为0SIGN——输入字符串处理结束标志,1——处理结束,0——处理未结束子模块F10T2中:SI——指向待转换的十进制ASC码存储区首址CX——存放该十进制ASC码串的长度DX——存放16位标志EBX——中间寄存器SIGN——正负数标记子模块F2T10中:AX——存放待转换的二进制数DX——存放16位标志BUF——存放转换后的十进制ASC码数字串的字节缓冲区RADIX中:EBX——存放要转换的数制基数EAX——存放待转换的32位无符号二进制数SI——存放转换后的P进制ASC码数字串的字节缓冲区首址CX——P进制数字入栈、出栈时的计数器EDX——按除法指令和系统功能调用的规定使用子模块QUEUE中:SI——从数组存储区取数指针,初值为该存储区首址CX——待排序数组元素个数BP——对无符号或有符号数排序标记,若(BP)=0,则对无符号数进行排序;若(BP)=1,则对有符号数排序DI——中间寄存器,保存数组首址AX——存放待比较数DX——内循环计数器CX——外循环计数器9.选做
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床皮肌炎疾病影像表现
- 销售会计工作职责
- 热性惊厥患儿的护理教育与培训方法
- 贵州省六盘水市2026届高考冲刺语文模拟试题含解析
- 医学26年:睡眠呼吸暂停诊疗 查房课件
- 26年老年辅助器具总结课件
- 26年基础护理技能直播脚本课件
- 【2025】葫芦岛市龙港区双龙街道工作人员招聘考试真题
- 26年社区老年群体生理护理
- 医学26年:出血性疾病指南更新 查房课件
- 2024年国网安徽省电力有限公司高校毕业生招聘考试真题
- 2025年内蒙古兴安盟工会招聘社会化工会工作者考试笔试试题含答案
- 文物安全文件解读课件
- 考叉车证科目一模拟试题
- 充电站安全生产责任制
- 串串店加盟易合同范本
- 2025年检察院书记员考试真题(附答案)
- 新闻编辑实践作业汇报
- 电力拖动自动控制系统-运动控制系统(第5版)习题答案
- JG/T 355-2012天然石材用水泥基胶粘剂
- 合伙贷款合同协议书
评论
0/150
提交评论