版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HarbinInstituteofTechnologyatWeihai汇编语言试验汇报试验一第一部分:dubug使用方法问题描述上机前预习debug惯用命令使用方法,复习汇编语言基本指令,上机时进行debug命令练习。问题分析使用dubug调试汇编程序,MS-DOS环境,使用WINNT文件夹下system32子文件夹DEBUG.EXE文件。三、设计思想1.在DOS提醒符下,能够下键入Debug开启调试程序:DEBUG[路径\文件名][参数1][参数2]2.Debug后能够不带文件名,仅运行Debug程序;需要时,再用N和L命令调入被调试程序。命令中能够带有被调试程序文件名,则运行Debug同时,还将指定程序调入主存;参数1/2是被调试程序所需要参数。3.在Debug程序调入后,依照有没有被调试程序及其类型对应设置存放器组内容,发出Debug提醒符“-”,此时就可用Debug命令来调试程序。4.运行Debug程序时,假如不带被调试程序,则全部段存放器值相等,都指向当前可用主存段;除SP之外通用存放器都设置为0,而SP指示当前堆栈顶在这个段尾部;IP=0100h;状态标志都是清0状态。5.运行Debug程序时,假如带入被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小字节数(BX为高16位),其余同不带被调试程序情况。6.运行Debug程序时,假如带入被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP依照被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用主存段,BX.CX包含被调试文件大小字节数(BX为高16位),其余通用存放器为0,状态标志都是清0状态。7.运行Debug程序时,假如带入被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小字节数(BX为高16位),其余同不带被调试程序情况。8.运行Debug程序时,假如带入被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP依照被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用主存段,BX.CX包含被调试文件大小字节数(BX为高16位),其余通用存放器为0,状态标志都是清0状态。Debug命令都是一个字母,后跟一个或多个参数:字母[参数]四、注意事项命令使用中注意:①字母不分大小写;
②只使用16进制数,没有后缀字母;
③分隔符(空格或逗号)只在两个数值之间是必须,命令和参数间可无分隔符;
④每个命令只有按了回车键后才有效,能够用Ctrl+Break中止命令执行;
⑤命令假如不符合Debug规则,则将以“error”提醒,并用“^”指示错误位置。许多命令参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址能够是段存放器或数值;偏移地址是数值。假如不输入段地址,则采取默认值,能够是缺省段存放器值。假如没有提供偏移地址,则通常就是当前偏移地址。命令形式1.显示命令DD(Dump)命令显示主存单元内容,它格式以下(注意分号后部分用于解释命令功效,不是命令本身):D[地址];显示当前或指定开始地址主存内容
D[范围];显示指定范围主存内容比如,显示当前(接着上一个D命令显示最终一个地址)主存内容:左边部分是主存逻辑地址,中间是连续16个字节主存内容(16进制数,以字节为单位),右边部分是这16个字节内容ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。2.修改命令EE(Enter)命令用于修改主存内容,它有两种格式:E地址;格式1,修改指定地址内容
E地址数据表;格式2,用数据表数据修改指定地址内容3.填充命令FF(Fill)命令用于对一个主存区域填写内容,同时改写原来内容,其格式为:F范围数据表该命令用数据表数据写入指定范围主存。假如数据个数超出指定范围,则忽略多出项;假如数据个数小于指定范围,则重复使用这些数据,直到填满指定范围。4.存放器命令RR(Register)命令用于显示和修改处理器存放器,它有三种格式。R;格式1,显示全部存放器内容和标志位状态R存放器名;格式2,显示和修改指定存放器5.汇编命令A输入A命令后,就能够输入8086指令,Debug将它们汇编成机器代码,相继地存放在指定地址开始存放区中,记住最终要输入一个回车结束A命令。进行汇编步骤以下:①输入汇编命令A[地址],按回车。Debug提醒地址,等候你输入新指令;
②输入汇编指令,按回车;
③如上继续输入汇编指令,直到输入全部指令;
④不输入内容就按回车,结束汇编,返回Debug提醒符状态。反汇编命令反汇编命令U(Unassemble)将主存内容按照机器代码形成汇编指令显示:U[地址];从指定地址开始,反汇编32个字节(80列显示模式)U范围;对指定范围主存内容进行反汇编U命令中假如没有指定地址,则接着上一个U命令最终一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。屏幕显示左边是主存逻辑地址,中间是该指令机器代码,而右边则是对应指令汇编格式。7.运行命令G运行命令G(Go)从指定地址处开始运行程序,直到碰到断点或者程序正常结束。G[=地址][断点地址1,断点地址2,...,断点地址10]G命令等号后地址指定程序段运行起始地址,如不指定则从当前CS:IP开始运行。断点地址假如只有偏移地址,则默认是代码段CS;断点能够没有,但最多只能有10个。程序碰到断点(实际上就是断点中止指令INT3),停顿执行,并显示当前全部存放器和标志位内容、以及下一条将要执行指令,方便观察程序运行到此情况。程序正常结束,将显示“Programterminatednormally”。8.跟踪命令T跟踪命令T(Trace),也称为单步命令,每执行一条指令就显示运行结果,使程序员能够细致地观察程序执行情况。T[=地址];逐条指令跟踪T[=地址][数值];多条指令跟踪从指定地址起执行一条或数值参数指定条数指令后停下来,每条指令执行后都要显示全部存放器和标志位值以及下一条指令。如未指定地址则从当前CS:IP开始执行。注意给出执行地址前有一个等号,不然会被认为是被跟踪指令条数(数值)。9.继续命令P继续命令P(Proceed)类似T命令,逐条执行指令、显示结果。不过当碰到子程序调用、中止功效调用和循环指令等时,不在子程序、中止服务程序或循环体中单步执行,而是直接执行完成子程序、中止服务程序或循环体,然后显示结果。当不需要调试子程序、中止服务程序或循环程序段时,要应用P命令,而不是T命令。P[=地址][数值]10.退出命令Q退出命令Q(Quit)使Debug程序退出,返回DOS。Q命令并无存盘功效,可使用W命令存盘。第二部分:编写比较两个字符串是否相等程序问题描述编写程序,程比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NOMATCH”。编译链接后,依照所定义字符串情况用debug观察程序运行结果是否正确,而且会用debug修改字符串值,方便检验程序两个分支是否都能正确运行。二、问题分析定义两个字符串,从前向后依次比较每个字符是否相等,假如不相等,则输出nomatch结束,不然继续比较下一个,全部比较完成之后,输出match,结束。设计思想分支结构设计,循环设计。前向后依次比较每个字符是否相等,假如不相等,则输出nomatch结束,不然继续比较下一个,全部比较完成之后,输出match,结束。四、流程图调试分析主要在在于分支结构跳转语句设计。源程序代码datasegmentstr1db'mes'str2db'mess'str3db'match$'str4db'notmatch$'dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmoves,axmovcx,4movdi,offsetstr1movsi,offsetstr2repzcmpsbjzlab1jnzlab2lab1:movdx,offsetstr3movah,09hint21hmovah,4chint21hlab2:movdx,offsetstr4movah,09hint21hmovah,4chint21hcodeendsendstart运行结果总结经过这次试验了解了分支程序设计,熟悉了字符串比较基本操作流程,对设计一个汇编程序有了深入了解。试验二一、问题描述输入一个关键字和一个句子,判断句子中是否包含关键字,如包含,显示其在句子中位置,不然给出未找到信息。二、问题分析比较方法,依次比较,不是关键字则回溯,回溯时让源串回溯,模式串指针回到开始位置,继续进行比较,知道比较到有符合条件部分输出match,不然输出nomatch.三、设计思想本道题目标设计方法就是用比较回朔法进行比较,若关键字字符串指针在比较过程中移动到字符串尾,则证实找到此字符串,然后母串指针减去字串长度,即求到此字串位置。程序流程图重复上述输入过程,输入子串str2应用INT21H0AH号功效获取str1偏移地址并赋值给DX应用INT21H09H号功效获取INFO1偏移地址并赋值给DX初始化代码段初始化数据段开始重复上述输入过程,输入子串str2应用INT21H0AH号功效获取str1偏移地址并赋值给DX应用INT21H09H号功效获取INFO1偏移地址并赋值给DX初始化代码段初始化数据段开始CH=MAX1;CL=MAX2CH=MAX1;CL=MAX2SI=DI=0SI=DI=0判断str1和str2相对应位置是否相等N判断str1和str2相对应位置是否相等NSI后移,DI清零YSI后移,DI清零YDI,SI后移DI,SI后移CL减一CL减一CL减一CL减一NNCH是否为0CH是否为0NCL是否为0NCL是否为0Y输出nomatchY输出nomatch输出match输出match结束结束六、试验源程序:DATA SEGMENTSTRdb50MAX1db?STRING1db50dup(?) KEYWORDdb50MAX2db?STRING2db50dup(?)INFO1 DB0AH,0DH,'inputstring:','$'INFO2 DB0AH,0DH,'inputkeyword:','$'INFO3 DB0AH,0DH,'weatheryoucanfindkeyword:'JUDG DB20H,20H,20H,20H,20H,0AH,0DH,'$' DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX LEADX,INFO1 MOVAH,09H INT21H MOVDX,OFFSETSTR MOVAH,0AH INT21H LEADX,INFO2 MOVAH,09H INT21H MOVDX,OFFSETKEYWORD MOVAH,0AH INT21H MOVCH,MAX1MOVCL,MAX2MOVSI,0MOVDI,0NEXT: MOVAH,STRING1[SI] CMPAH,STRING2[DI] JNZNOJZYES YES:INCDIINCSI DECCLCMPCL,0JNZNEXTJZFINI2NO: INCSIMOVDI,0DECCHCMPCH,0JZFINIJNZNEXT FINI: LEADX,INFO3MOVJUDG,'N' MOVJUDG+1,'O'MOVJUDG+2,'M'MOVJUDG+3,'A'MOVJUDG+4,'T'MOVJUDG+5,'C'MOVJUDG+6,'H' MOVAH,09HINT21H MOVAH,4CH INT21HFINI2:LEADX,INFO3MOVJUDG+2,'M'MOVJUDG+3,'A'MOVJUDG+4,'T'MOVJUDG+5,'C'MOVJUDG+6,'H' MOVAH,09HINT21HMOVBX,OFFSETSTRING2MOVCX,SISUBCX,BXMOVDL,CLADDDL,30HMOVAH,02HINT21H MOVAH,4CH INT21HCODE ENDS ENDSTART五、调试分析在进行计算字符串位置时候出现了问题,不知道偏移指针差怎样使用,也是在老师指导下,才完成调试。六、运行结果八.总结:本道题目我采取是普通比较方法,即确定主串指针SI,字串指针DI,先将串指针清零,然后从第一个字符开始比较,假如字串第一个字符与主串第一个字符相同,则DI向后移一位,SI向后移一位,同时判断是否到字串结尾,假如到字串结尾,则表示匹配成功,同时将SI偏移地址减去DI相对于字串首地址长度,即为字串在主串中位置。试验三:统计字符个数问题描述输入一个字符串,统计其中字符,数字及其它字符个数。二、问题分析依照问题可知要求为判断字符串字符种类及统计不一样种类字符个数;三、设计思想首先设定几个统计函数,再依次读取字符串,依照读取到不一样种类字符调用不一样函数进行统计,从而得到结果;四、流程图输入结果开始输入字符串判断字符格式输入结果开始输入字符串判断字符格式调用统计函数结束结束五、调试分析试验难点是判断字符串类型并调用函数,需要满足很多要求才能实现,而且在统计其余字符上出现了许多问题。六、源程序代码datasegmentmessdb0dh,0ah,'InputString:$'szdb0;数字个数dAxdb0;大写个数xXxdb0;小写个数SZ_CDB100DUP('$')DX_CDB100DUP('$')XX_CDB100DUP('$')CRLFDB0DH,0AH,'$'dataendscodesegmentassumecs:code,ds:datamainprocfarstart:pushdsxorax,axpushaxmovax,datamovds,axcallcrlf_pmovah,09movdx,offsetmessint21hnext:movah,01int21hCMPAL,0DHJNZGOONJMPDISP_1GOON:cmpal,'0'jlNEXTcmpal,'9'jgNO_0_9incSZMOVBX,OFFSETSZ_CMOVCX,0MOVCL,SZADDBX,CXDECBXMOV[BX],ALJMPNEXTNO_0_9:cmpal,'A'jlNEXTcmpal,'Z'jgNO_D_AZincDAXMOVBX,OFFSETDX_CMOVCX,0MOVCL,DAXADDBX,CXDECBXMOV[BX],ALJMPNEXTNO_D_AZ:cmpal,'a'jlNEXTcmpal,'z'jgNO_X_AZincXXXMOVBX,OFFSETXX_CMOVCX,0MOVCL,XXXADDBX,CXDECBXMOV[BX],ALJMPNEXTNO_X_AZ:JMPNEXTDISP_1:CALLCRLF_PCALLCRLF_Pmoval,SZCALLDISP_CZRmovah,09leadx,SZ_Cint21hCALLCRLF_Pmoval,DAXCALLDISP_CZRmovah,09leadx,DX_Cint21hCALLCRLF_Pmoval,XXXCALLDISP_CZRmovah,09leadx,XX_Cint21hCALLCRLF_PENDD:retmainendpDISP_CZRPROCNEARxorah,ah;moval,nummovbl,100ddivblpushaxaddal,30hmovdl,almovah,2int21hpopaxmoval,ahxorah,ahmovbl,10ddivbladdax,3030hpushaxpopdxmovah,2int21hmovdl,dhint21hMOVDL,':'INT21Hmovdl,''int21hRETDISP_CZRENDPCRLF_PPROCNEARmovah,09LEADX,CRLFINT21HRETCRLF_PENDPcodeendsendstart运行效果总结经过此次试验,对汇编程序了解愈加深刻了解,对ASCII码也有了愈加深刻了解。试验四:梵塔问题一、问题描述:假设有三个分别命名为A,B和C塔座,在塔座上A上游直径大小各不相同、从小到大编号为1,2,...,n圆盘。项要求将塔座A上n个圆盘移至塔座C上并仍按一样次序叠排,圆盘移动时必须恪守以下规则:=1\*GB2⑴每次只能移动一个圆盘;=2\*GB2⑵圆盘能够插在A,B和C中任意塔上;=3\*GB2⑶任何时刻都不能将个较大圆盘压在较小圆盘之上。问题分析递归汇编程序设计问题。这个问题在盘子比较多情况下,极难直接写出移动步骤。我们能够先分析盘子比较少情况。假定盘子从大向小依次为:盘子1,盘子2,...,盘子64。假如只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。假如有2个盘子,能够先将盘子1上盘子2移动到B;将盘子1移动到c;将盘子2移动到c。这说明了:能够借助B将2个盘子从A移动到C,当然,也能够借助C将2个盘子从A移动到B。假如有3个盘子,那么依照2个盘子结论,能够借助c将盘子1上两个盘子从A移动到B;将盘子1从A移动到C,A变成空座;借助A座,将B上两个盘子移动到C。这说明:能够借助一个空座,将3个盘子从一个座移动到另一个。三、设计思想上述思绪能够一直扩展到64个盘子情况:能够借助空座C将盘子1上63个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上63个盘子移动到C。流程图调试分析递归程序编写较为简单,不过复杂程序则难于分析,循环调用本身来完成功效。源程序代码datareasegment;主页菜单显示messdb' **************************************************************************',0ah,0dh db' * welcomeyou! *',0ah,0dh db' * thisishanoigame *',0ah,0dh db' * youcanknowhowmanytimeswhenyouplaythisgame *',0ah,0dh db' * thecasebyHERUIRUI *',0ah,0dh db' * XueHaois41012186 *',0ah,0dh db' **************************************************************************','$';bindw0 ;将bin初始化为0chnumdb10dup('0'),'$';给chnum分配存放空间onedw'A';三个塔座twodw'B'threedw'C'strshowdb'-->$';连接符号chline db0dh,0ah,'$'prompt db'Pleaseinputtheplatenumber(1-99):$';提醒语句chtimes1db0dh,0ah,'Youhavemoved$';提醒语句chtimes2db'times',0dh,0ah,'$'inputlist labelbytemaxlen db3actlen db0chinputdb3dup('0'),'$'multfactdw1datareaends;-----------------------------------------------------;代码段定义codesegmentmainprocfar ;主函数assume cs:code,ds:datareastart: mov ax,datarea ;将数据段送到dx mov ds,ax lea dx,mess ;输出mess mov ah,09h int 21hloopagain: movdl,0dh ;换行指令movah,2int21hmovdl,0ahmovah,2 int21h lea dx,prompt ;输出prompt mov ah,09h int 21h lea dx,inputlist ;输出inputlist mov ah,0ah int 21h call asctobin ;调用asctobin mov ax,1 ;把一送到ax cmp ax,bin ;比较bin与ax ja loopagain ;假如大于跳转到loopagain mov ax,99 ;把99送到ax cmp bin,ax ;比较ax与bin ja loopagain ;假如大于跳转到loopagain push bin ;压栈操作 push one push two push three lea dx,chline ;将chline送入dx mov ah,09h ;输出指令 int 21h call hanoi ;调用Hanoi lea dx,chtimes1 ;送chtimes并输出 mov ah,09h int 21h mov cx,0010 ;把10送到cx lea si,chnum ;把chnum送到sishownum: ;输入 cmp byteptr[si],'0' je notadd add byteptr[si],48notadd: inc si loop shownum lea dx,chnum mov ah,09h int 21h lea dx,chtimes2 mov ah,09h int 21h mov bin,0 mov actlen,0 mov [chinput],'0' mov [chinput+1],'0' mov cx,0010 lea si,chnumput0: mov byteptr[si],'0' inc si loop put0 jmp loopagainloopend: mov ah,4ch int 21h main endpasctobinprocnear ;子程序 push ax push cx cmp actlen,0 je loopend cmp actlen,1 je l2 jmp l3l2: ;若一个数执行 xor ah,ah mov al,[chinput] sub al,48 add bin,ax jmp out1l3: ;若输入俩个数执行 xor ah,ah mov al,[chinput+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度二手房买卖合同中的付款方式及期限
- 全新贷款中介服务费合同下载
- 2024年度品牌授权与产品代理经营合同2篇
- 货物买卖合同模板大全
- 专利合作合同范本2篇
- 幼儿园供货简单的合同范本
- 使用权房屋转让合同
- 墓地买卖及绿化配套工程合同(2024年度)
- 货物配送承包合同范本
- 二零二四年工程质量保修合同3篇
- 2023-2024年中考语文三年真题分类汇编(全国版)作文 试卷(含答案解析)
- GB/T 43933-2024金属矿土地复垦与生态修复技术规范
- 营养专科护士进修汇报
- 新一代信息技术基础智慧树知到期末考试答案章节答案2024年哈尔滨师范大学
- 我为南京带货英语作文
- 医院安保反恐防暴演练
- 2024年社区工作者考试必考1000题含完整答案(名师系列)
- 《煤矿重大事故隐患判定标准》解读培训课件2024(中国煤矿安全技术培训中心)
- 委托收款授权书英文版
- 化工和危险化学品生产经营单位二十条重大隐患判定标准释义(中化协)
- 加速康复外科在我国发展现状、挑战与对策
评论
0/150
提交评论