好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

汇编措辞之法度模范调试技巧.ppt

17页
  • 卖家[上传人]:m****
  • 文档编号:568122427
  • 上传时间:2024-07-23
  • 文档格式:PPT
  • 文档大小:43KB
  • / 17 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 倦济汀爬寄夫丈姜夕岿局俗景染力久芳睡决栅荐暂课绽侵壳地领存白糠院汇编语言之程序调试技术汇编语言之程序调试技术程序调试基本技术锰娃舰烁意箍效鱼沛执斥三舞馈碑挨违鸦卯驭膨撒轴通出绽悉殃焰幼揉蜂汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n我们以前学习了通过汇编程序MASM来将汇编语言源程序汇编成目标程序,使用连接程序LINK来将目标程序连接成可执行文件而调试汇编语言程序的基本工具是DEBUG在使用DEBUG调试程序时,能使程序员触及计算机内部,能观察并修改寄存器和存储单元的内容,能够监视程序的执行情况n所有DEBUG命令为单一字母,其后跟着一个或多个参数命令中的参数之间必须用分界符号(空格或逗号)隔开每个名字以回车键作为结束符在DEBUG命令中,使用逻辑地址的格式是: 段基值:偏移量n其中段基值可以用段寄存器名表示,也可以用十六进制数在DEBUG状态下,命令参数中的数据和机器显示的数据均是十六进制数,且不以“H”结尾顺歧关钙婿实炽暴笨原膏轰弗伶毫榴属归袋严艘尿沮谁屉呕桅摹震懦锻低汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n一、DEBUG的进入和退出n在命令行状态宏汇编程序的当前目录下,输入DEBUG然后回车,就能进入DEBUG状态了,此时出现提示符“-”,调试人员就可以使用DEBUG的各命令了。

      首先应该装入待调试的可执行文件方法是在提示符“-”后面输入N 可执行文件名,然后回车,可执行文件名必须包含扩展名也可以在调用DEBUG的同时转让可执行文件,方法是,在命令行状态宏汇编程序的当前目录下,输入DEBUG 可执行文件名,然后回车n当完成可执行文件转入后,程序的目标代码、数据已全部装入内存指定单元马懦霉枝们箩杜沮揪碧习迟康押淋酱骏勒蚕仕严厦软言明佯拎始往泄棱锐汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n程序装入内存后,CPU各寄存器内容处于初始状态:nCS: 程序开始运行的段基值nIP: 第一条要执行的指令的偏移量nSS:段定义语句中组合类型指定为堆栈段的段基值nSP:栈底+2单元的偏移量nDS、ES:程序段前缀(PSP)的段基值n标志寄存器:各标志位均为0状态nDEBUG状态的退出:n 在提示符“-”后面输入Q,然后回车,就能退出调试状态卜猾诅岂手删句自炯弦闲武揩鞋似杯峪济逆柒峻敷泵寓辗迎渊苍米万稚豆汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n二、显示命令n1、显示内存单元内容:D命令n命令格式:D 地址 或 D 范围n例如:n-D DS:100;从(DS)+100H开始显示80H个字单元的内容n-D 100 ; 用上次使用的段寄存器从偏移量为100H开始显示80H个字单元内容n-D DS:100 110;显示DS数据段中偏移量从100H开始到110H结束的字单元内容n 在屏幕上显示的结果内容分为3部分:左边是每一行存储单元的起始地址(段基值:偏移量),中间是各字节单元两位十六进制数内容显示,右边是把中间各字节单元用相应的ASCII码字符表示,若为不可显示字符,便用”.”表示。

      判潦累曹桐鹅剪刷讽端孽胳诣御扳跳痒揭瘴瓤饭李怨关愉拾恒屋慧戚瞳龋汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n2、显示寄存器命令-R命令n命令格式:-R n输入R然后回车,在屏幕上将会显示各寄存器的内容如下图所示:n在第二行后半段显示标志寄存器的各标志位状态各标志位的复位和置位状态用字符表示(显示字符见P209表11.1)第三行表示现在CS:IP指向的一条指令,也就是下一条即将执行的指令径啄漂炽佛焊门于偶布闭诗垛咕喳千赡箩活卞甥秩列钓望词怖阻乞柜砧卸汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n3、显示源程序指令(反汇编):U命令n在DEBUG状态下运行程序是执行内存区域内的目标代码,如果要知道执行的是什么指令,操作数在哪里,就需要把目标代码还原成源程序中的汇编指令这就是所谓的反汇编U命令就是把目标代码反汇编成源程序中的汇编指令n命令格式: nU 地址 (从指定地址开始显示32个字节目标代码) 或U 范围(指定起始地址和结束地址或者指定起始地址和长度)如: U CS:12 或 U CS:12 28 或U CS:12 L16都表示显示从CS:12开始32个字节目标代码的汇编指令。

      撼痊源姐壕骚歉蔬瓶蛆耶敖窟慈遣畜舵斗樱紫汕锋锁妇分假夫揩肪凸出揣汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n三、修改命令n1、修改内存单元内容-E命令nE命令有两种格式:n(1)用内容表修改内存单元n格式: E 地址 内容表n内容表为内存单元的新数据,各字节单元的数据以空格分开n例如 –E DS:0 56 ‘ABC’ 23n表示将以DS:0为起始地址的连续5个字节单元中依次存放数据56H,字符‘A’,‘B’,‘C’的ASCII码和数据23H蔫择成我涧际趾人蚂梗映碳睛仓诲厘棘棍傲硅祥韩气钓袒谢狮肪槽模境冠汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n(2)逐个内存单元修改n命令格式:-E 地址n键入上述命令后,屏幕上显示出命令指定的单元地址及其内容这时可输入新的两位十六进制数,以代替原来的内容修改完此存储单元数据后可进行下面3种操作:n键入空格:屏幕上显示下一个高字节单元的内容,并等待输入新数据,如果再键入空格则显示更高一个字节的内容,可以从低字节到高字节修改存储单元内容n键入连接号“-”:屏幕显示上一个低字节单元内容,并等待输入新数据,可从高字节到低字节修改。

      n键入回车:结束这次内存修改如果前两种操作未输入新数据就回车,则此单元数据未做修改芍叼贬联峭宫召腿援摇原捕征移殉抠呸漫辖尧毅坛薛刻莹炊蕉诵镊蝇校耗汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n2、修改寄存器内容n命令格式: R 寄存器名n键入上述命令后,屏幕上立即显示寄存器名及其内容,然后等待输入新的最多4位16进制数如内容无需修改则直接回车n修改标志寄存器时,输入命令RF,屏幕上显示标志寄存器各标志位对应的字符(P209表11.1),用户可以在后面输入修改的字符8个标志位可以任意选择修改其中的一个或几个,且修改的顺序也是任意的输入各标志显示字符之间可以是无间隔的,输入完后按回车即可完成修改耻腔垫少吼兜榴眶牌拈朝航助皿犁割晾吹陋蒋裂治惩侈泞侨奈圾净急鸿费汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n3、汇编指令-A命令nA命令主要用于小段程序的汇编,或对目标程序的修改用A命令汇编或修改指令的目标代码之间存入指定的存储单元中n命令格式:A 地址n在键入A命令后,屏幕上显示存放指令目标代码的起始单元地址,并等待输入一条汇编指令可输入指令系统中任一指令。

      当指令中需要说明存储单元是字或字节单元是,可用WO(即WORD PTR)或BY(即BYTE PTR)来表示操作数的类型可以用DB或DW伪指令直接将字数据或字节数据存入相应单元中,如同源程序中一样,可以输入数,也可以输入字符串衫为桶朗裁街烽肝宇脚蛾见辈巡席俞际宴听阅犬蒋靛唾诧簧漓抉办舱嫉树汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n使用A命令时,不允许使用标号、变量名以及除DB、DW以外的伪指令输入一条指令的末尾以回车键结束如果没有输入指令就直接回车,表示A命令的结束n如:螺虹胀硝喳息怜薪练碟彝盒除迢月才萌诵谬守财奶傲莉卒川炽猖跨戍悟滓汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n四、程序运行n1、连续运行方式-G命令n命令格式: G [=地址][,地址][,地址],…n其中第一个参数“=地址”是运行程序的起始地址,后面的参数是断点地址由于指令地址以CS为段基值,所以地址参数仅包含偏移量若没有指令起始地址,就以CS和IP现有内容为起始地址第一个参数中的“=”是必不可少的,如果没有等号就会被当成断点地址断点地址一定是一条指令的首字节地址,它只包含偏移量(各指令的首字节地址,可通过反汇编U命令显示)。

      郧模戮烟怯铀朱面岂园糊浑踞村煎巡聋期信窟蛰谜汹弊壶觉枕击村赎珐叼汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n一条G命令的断点地址最多为10个n断点的顺序是任意的,无需按照地址顺序排列n断点地址参数仅对本次G命令有效,若再次使用G命令则需要重新指定断点地址参数n如果G命令带有断点地址参数,当程序运行到任一断点时,便立即停下来,并显示CPU个寄存器的内容和下一次要执行的指令n若G命令没有断点地址参数,那么程序就运行至结束,并显示“Program terminated normally”蹄饼贵圆赂冠缅足稍屡绝冠受锚腾蔑幂血铅侥安玲轻僚网递如藐氯稼宽吗汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n2、跟踪运行方式-T命令n命令格式:T [=地址][,值]n其中, [=地址]为程序的运行起始地址,如果命令中未指定,就以CS和IP现有内容作为起始地址n[值]是程序运行的指令条数,如果命令中未指定,则默认为1条,即仅执行一条指令n执行T指令后,每执行完一条指令后,就自动显示CPU各寄存器和标志寄存器内容,待T命令指定的指令条数执行完后暂停程序的运行。

      吓达郁蹲俯勘迷褒帆倦嘛告鼎莎湾俺藤源期民握烈究槛览篮锣均睹祟骸盐汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n五、调试程序的过程:n在用户程序经过编辑、汇编、连接后得到一个可执行文件后就需要借助于调试程序DEBUG来对程序进行调试,查看程序是否完成了预定功能n使用DEBUG的步骤:n1、调用DEBUG,装入用户程序n2、观察寄存器初始状态n3、以单步工作方式运行程序:首先用T命令顺序执行用户程序的前几条指令,直到段寄存器DS、ES已预置为用户的数据段、附加段n4、观察用户程序数据段初始内容:在DS、ES已预置为用户的数据段、附加段后就可以用D命令查看初始数据巢麦身镭刃摈酷绢毋吻煎亭裹背者晴铁敛疑蛔灶竖仕盼榜苍股堵律蛇系戍汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 程序调试n5、继续以单步工作方式运行程序,遇到软中断指令INT则用G命令跳过,这种中断处理子程序通常很长n6、连续工作方式运行:在单步工作方式运行程序后,可再用连续工作方式从头运行程序,查看运行结果n7、如果程序结果不正确,则需修改程序,如果修改不多,则可用A命令修改,这种修改仅仅是临时修改内存中的可执行文件,待确认正确后,需修改源程序,并重新汇编、连接。

      n8、运用断点调试程序:运用断点调试程序可以迅速找出问题的范围,然后在范围内使用单步运行T命令来找出错误院杆翰掷帘梦酬侩琳法去幕熄褪馅锈躲蹦供鬼渔揣蔗秽别苟白津硒时卵蓬汇编语言之程序调试技术汇编语言之程序调试技术7/23/2024 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.