实验一调试工具的使用方法训练一、实验目的1.熟悉调试工具DEBUG的使用方法。2.理解汇编指令、存储单元和寄存器等有关概念。3.能够对简单的汇编语言程序进行调试。二、实验设备PC机一台。三、实验内容及步骤DEBUG是DOS操作系统为汇编语言程序设计者和系统管理员提供的一个通用调试工具,利用DEBUG可以读写、传送、比较、查找和显示存储器单元内容,设置程序起始执行地址或断点,执行程序或分段执行程序,跟踪程序执行,显示处理器状态,汇编或反汇编程序等。用DEBUG编程简单、方便和直观,可以直接查看程序执行情况,便于熟悉和理解指令,掌握基本编程技巧。DEBUG只使用十六进制表示数据(十六进制数后不加“H”),屏幕的显示数据形式如下:1400:010024656E64730D0A20-20636F6465202024*ends..code*1400:01107365676D656E740D-0A20202020202024segment..*…………1400:01702461782c300D0A09-2020202070757368*ax,0push屏幕每行显示内容分为三部分,一行共显示十六个字节单元的内容。第一部分是本行所显示的16个字节数据在存储器中的起始存放地址;第二部分是以十六进制显示的16个字节数据;第三部分是将本行所显示字节数据看作ASCII码时显示的字符,若某字节数据对应不可显示的ASCII码,则显示一个“.”字符代替该字节数据的显示字符。DEBUG只有十几条单字母命令,功能强且易掌握,常用DEBUG命令如下:1)DEBUG的进入和退出进入DEBUG时,键入如下命令:H:\DEBUG-“-”是DEBUG的命令提示符,表明已进入DEBUG状态。在“-”提示符之后,可以键入DEBUG命令。退出DEBUG时,键入如下命令从DEBUG状态返回DOS:-Q2)汇编与反汇编命令汇编命令A和反汇编命令U是常使用的DEBUG命令。①汇编命令A格式:A[起始地址]功能:逐行汇编程序,主要用于小段程序的汇编。说明:使用A命令,如果未给出起始地址,汇编后的程序代码从指令指针寄存器IP的值指定的地址开始存放。按两次回车键可退出汇编命令A的状态。例1-1汇编一段程序,该程序的功能是在屏幕上输出一个大写字母′A′。-A1001141:0100MOVDL,411141:0102MOVAH,021141:0104INT211141:0106INT20②反汇编命令U格式:U[地址范围]功能:在指定地址范围内,将二进制机器指令逐条翻译为汇编语言符号指令。例1-2将例1-1中汇编的程序进行反汇编-U1001071141:0100B241MOVDL,411141:0102B402MOVAH,021141:0104CD21INT211141:0106CD20INT203)执行程序命令在DEBUG下,可以完整地执行程序、分段执行程序或单步执行程序。①执行程序命令G格式:G[=程序起始地址][断点…]功能:完整地或分段执行程序。说明:G命令可以从头至尾完整地执行程序,如果G命令带有有断点参数,则执行到断点地址时暂停并显示当前各寄存器状态,断点最多允许设置100个。程序正常结束时显示“Programterminatednormally”。例1-3执行例1-1中汇编的程序。-G=100AProgramterminatednormally②跟踪执行命令P和T格式:P[=地址][跟踪条数]T[=地址][跟踪条数]功能:跟踪命令P和T可以逐条跟踪指令的执行,以便调试程序。说明:每条指令执行后都将显示各寄存器的当前值。P命令与T命令的差别是,P命令按程序书写的指令为单位,一次跟踪完一条书写指令(执行一组相关的指令),而T命令按存储单元中存放的指令为单位,一次跟踪一条指令的执行。例1-4用P命令跟踪例1-1中的程序。设程序执行前的各寄存器初值如下,然后开始用P命令跟踪例1-1程序:AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=1141ES=1141SS=1141CS=1141IP=0100NVUPEIPLNZNAPONC1141:0100B241MOVDL,41-P=100AX=0000BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000DS=1141ES=1141SS=1141CS=1141IP=0102NVUPEIPLNZNAPONC1141:0102B402MOVAH,02-PAX=0200BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000DS=1141ES=1141SS=1141CS=1141IP=0104NVUPEIPLNZNAPONC1141:0104CD21INT21-PAAX=0241BX=0000CX=0000DX=0041SP=FFEEBP=0000SI=0000DI=0000DS=1141ES=1141SS=1141CS=1141IP=0106NVUPEIPLNZNAPONC1141:0106CD20INT20-PProgramterminatednormally用P命令只需跟踪执行4次,程序就执行完毕。如果用T命令逐条指令跟踪执行,则将跟踪进入DOS功能调用的软中断服务程序中。4)显示寄存器命令R格式:R[寄存器]功能:显示或修改寄存器内容。说明:当R命令后面不指定寄存器时,显示所有寄存器的内容。例1-5显示所有寄存器内容-RAX=0100XB=0000CX=2000DX=00000SP=FFEEBP=0000SI=0000DI=0000DS=07E1ES=07E1SS=07E1CS=07E1IP=0114NVUPDIPLNZNAPONC例1-6修改寄存器内容要修改某寄存器内容,可在R命令后键入寄存器名,DEBUG将显示出这个寄存器的值,然后键入新值就可修改该寄存器内容。例如修改AX寄存器的内容:-RAXAX4500:3000用RF命令可显示和修改标志寄存器FR中的标志位,无论修改哪一位标志位,只需要键入该标志位的表示符号(各标志位的符号表示如表1.1所示),并且标志位值的键入顺序可任意。例1-7修改FR寄存器的零标志位和进位标志位。-RFNVUPEIPLZRNAPECY-NZNC(修改零标志和进位标志)-RFNVUPEIPLNZNAPENC-(显示修改结果)表1.1标志寄存器各标志位符号及意义标志位符号表示=1=0OF溢出(是/否)OVNVDF方向(减/增)DNUPIF中断(开/关)EIDISF符号(负/正)NGPLZF零(是/否)ZRNZAF辅助进位(是/否)ACNAPF奇偶(偶/奇)PEPOCF进位(是/否)CYNC5)存储器单元访问命令①显示存储器单元命令D格式:D[地址范围]功能:显示指定地址范围内的存储区数据,包括十六进制数据形式及其对应的ASCII码字符显示。例1-8显示110H到116H存储器单元的内容。-D1101161540:01107365676D656E74segment②写存储器单元命令E格式:E地址[字符串]功能:逐个修改指定单元内容或将字节串写入指定的一组连续单元。例1-9将字节串′string′写入以142H为起始地址的存储器区。-E142′string′例1-10逐个单元向彩显视频缓冲区写入41H、42H、41H、42H,彩显视频缓冲区的段地址为B800H,数据写入后立即显示出大写的ABAB。-EB800:70B800:007030.4107.0030.4207.0030.4107.f030.4207.f0B800:007820.注意,“.”前为存储器单元原内容,“.”后为键入的数据,按空格键继续修改下一个存储器单元。例中前两个′AB′为正常显示,后两个′AB′为反相、闪烁显示。四、思考题1)将大写字母′A′转换为小写字母′a′-A200MOVDL,41;′A′-DLORDL,20;′A′-′a′MOVAH,2;功能号-AHINT21;调用DOS功能调用2号功能,显示一个字符INT20;退出程序执行,返回DOS-G=200思考并尝试修改程序,实现如下功能:将大写字母′B′转换为小写字母′b′。2)从键盘输入一个字符并回显-A220MOVAH,1;功能号-AHINT21;调用DOS功能调用1号功能,从键盘接收一个字符MOVDL,AL;将接收的字符送DL,准备显示MOVAH,2;功能号-AHINT21;调用DOS功能调用2号功能,显示一个字符INT20;退出程序执行,返回DOS-G=2203)显示字符串-E120‘Howdoyoudo?$’-A100MOVDX,120;待显示的字符串地址-DXMOVAH,9;功能号-AHINT21;调用DOS功能调用9号功能,显示一个字符串INT20;退出程序执行,返回DOS-G=100思考并尝试修改程序:如果将字符串存放在300H开始的存储区,应该怎样修改程序?