您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 建筑材料 > 汇编实验报告(-)调试程序DEBUG 的使用
1《汇编语言程序设计》实验报告2实验一调试程序DEBUG的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT3的应用;4、汇编语言伪指令:BYTEPTR和WORDPTR的应用。二、内容及步骤1.DEBUG命令使用表1.1DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16进制数,没有后缀字母;3③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置。许多命令的参数是主存逻辑地址,形式是“段基地址:偏移地址”。其中,段基地址可以是段寄存器或数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是缺省段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG,进入调试环境,显示提示符'-'。2、用命令F200220'AB'将'AB'的两个ASCII码循环填入内存。注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。3、用命令D200观察内存中的十六进制码及屏幕右边的ASCII字符。图1-1Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L字节长度”。D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D[地址];显示当前或指定开始地址的主存内容D[范围];显示指定范围的主存内容4图1-2D命令调用左边部分是主存逻辑地址,中间是连续16个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。一个D命令仅显示“8行×16个字节”(80列显示模式)内容。再如:-d100;显示数据段100h开始的主存单元-dcs:0;显示代码段的主存内容-d2f0L20;显示ds:2f0h开始的20h个主存数据4、用命令F23023F12重复上二项实验,观察结果并比较。F(Fill)命令用于对一个主存区域填写内容,同时改写原来的内容,其格式为:F范围数据表该命令用数据表的数据写入指定范围的主存。如果数据个数超过指定的范围,则忽略多出的项;如果数据个数小于指定的范围,则重复使用这些数据,直到填满指定范围。图1-3F命令调用5、用命令E2004142434445将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。图1-4Enter命令调用E(Enter)命令用于修改主存内容,它有两种格式:5E地址;格式1,修改指定地址的内容E地址数据表;格式2,用数据表的数据修改指定地址的内容格式1是逐个单元相继修改的方法。例如,键入“eds:100”,Debug显示原来内容,用户可以直接输入新数据,然后按空格键显示下一个单元的内容,或者按“-”键显示上一个单元的内容;不需要修改可以直接按空格或“-”键;这样,可以不断修改相继单元的内容,直到用回车键结束该命令为止。格式2可以一次修改多个单元,例如:-eds:100F3`XYZ`8D;用F3/`X`/`Y`/`Z`/8D这5个数据替代DS:0100~0104的原来内容。6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H(2)23H,45H(3)AB,3045H图1-5H命令调用16进制数计算命令H(Hex):H数字1,数字2;同时计算两个16进制数字的和与差注:输入H1234则在下一行显示0046FFDE,即二者的补码和与差。在DEBUG环境下所有数据和地址都是按16进制处理,所以不要加后面的H标志。7、用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。注:若在DEBUG32环境下用R16和R32命令分别显示16位和32位寄存器内容。R(Register)命令用于显示和修改处理器的寄存器,它有三种格式:R;格式1,显示所有寄存器内容和标志位状态例如,当我们刚进入Debug时,就可以执行该命令,显示示例如下:图1-6Register命令调用6其中,前两行给出所有寄存器的值,包括各个标志状态。最后一行给出了当前CS:IP处的指令;由于这是一个涉及数据的指令,这一行的最后还给出相应单元的内容。R寄存器名;格式2,显示和修改指定寄存器例如,键入“rax”,Debug给出当前AX内容,冒号后用于输入新数据,如不修改则按Enter键。RF;格式3,显示和修改标志位Debug将显示当前各个标志位的状态。显示的符号及其状态如下表所示,用户只要输入这些符号就可以修改对应的标志状态,键入的顺序可以任意。图1-7RF命令调用表1-2状态标志位的符号表示8、用R命令将AX,BX内容改写为1050H及23A8H。图1-8用R命令将AX,BX内容改写为1050H及23A8H7二、8086常用指令练习1、传送指令1)用A命令在内存400H处键入下列内容:-A0400****:0400MOVAX,1234****:0403MOVBX,5678****:0406XCHGAX,BX****:0408MOVAH,10****:040AMOVAL,20****:040CMOVCX,89AB****:040FXCHGAX,CX****:0411-注:****为段寄存器CS的当前值,内容是不一定的,每行命令以回车键结束。汇编命令A(Assemble)用于将输入的汇编指令汇编成为机器代码保存于主存。A[地址];从指定地址开始汇编指令A命令中如果没有指定地址,则接着上一个A命令的最后一个单元开始;若还没有使用过A命令,则从当前CS:IP开始。输入A命令后,就可以输入8086指令,Debug将它们汇编成机器代码,相继地存在指定地址开始的存储区中,记住最后要输入一个回车结束A命令。进行汇编的步骤如下:①输入汇编命令A[地址],按回车。Debug提示地址,等待输入新指令;②输入汇编指令,按回车;③如上继续输入汇编指令,直到输入所有指令;④不输入内容就按回车,结束汇编,返回Debug的提示符状态。A命令支持标准的8086(和8087浮点)指令系统以及汇编语言语句格式,但要注意以下一些规则:•所有输入的数值都是16进制数;•段超越指令需要在相应指令前,单独一行输入;•段间(远)返回的助记符要使用RETF;•A命令也支持最常用的两个伪指令DB和DW。2)用U命令检查键入的程序并记录,特别注意左边的机器码与指令的对应关系。-U0400反汇编命令U(Unassemble)将主存内容按照机器代码形成汇编指令显示:U[地址];从指定地址开始,反汇编32个字节(80列显示模式)U范围;对指定范围的主存内容进行反汇编U命令中如果没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使8用过U命令,则从当前CS:IP开始。图1-9用U命令检查键入的程序屏幕显示的左边是主存逻辑地址,中间是该指令的机器代码,而右边则是对应的指令汇编格式。3)用T命令逐条运行这些指令,每运行一行指令观察各寄存器及IP的变化情况,并注意标志位的变化情况。-T=0400(注:=400是表示从偏移地址400处开始单步执行)-T(不给出地址,则表示接续上一条指令执行)-T┇跟踪命令T(Trace),也称为单步命令,每执行一条指令就显示运行结果,使我们可以细致地观察程序的执行情况。T[=地址];逐条指令跟踪T[=地址][数值];多条指令跟踪从指定地址起执行一条或数值参数指定条数的指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行。注意给出的执行地址前有一个等号,否则会被认为是被跟踪指令的条数(数值)。图1-10用T命令逐条运行指令92、加减法指令:1)用A命令在内存100H处键入下列内容:MOVAH,11MOVAL,22ADDAL,AHSUBAL,33MOVCX,1234MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX图1-11用A命令在内存100H处键入程序2)用U命令检查键入的程序及对应的机器码。图1-12U命令检查键入的程序及对应的机器码3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。3、带进位加减法:1)用A命令在内存200H处键入下列内容,并用U命令检查:MOVAH,12MOVAL,84MOVCH,56MOVCL,78ADDAL,CL10ADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,34图1-13用A命令在内存200H处键入程序图1-14用U命令检查程序2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。11图1-15用T命令逐条运行指令4)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。解:改用16位操作指令如下:图1-16改用16位操作指令图1-17反汇编查看16位操作指令12图1-18T命令逐步运行4、BCD码加减法(选作)1)内容:MOVAL,65ADDAL,16DAA2)要求:用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。注:相加后AL值本来是7B,经DAA指令调整后变为81,即65和16两个BCD码的和。图1-19用A命令键入程序图1-20U命令检查程序图1-21T命令逐条运行指令退出命令Q(Quit)使Debug程序退出,返回DOS。Q命令并无存盘功能,可使用W命令存盘。命令格式:Q13图1-22Q命令调用三、实验体会1.注意T命令给出的执行地址前有一个等号,否则会被认为是被跟踪指令的条数(数值);2.DOS下所有输入的数值都是16进制数,且没有后缀字母;3.通过RF命令修改对应的标志状态时,键入的顺序可以任意;4.分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;5.命令如果不符合Debug的规则,则将以“error”提示,并用“^”指示错误位置;6.一个D命令仅显示“8行×16个字节”(80列显示模式)内容;7.Enter[地址]命令调用时,如果修改错误,可以按“-”键显示上一个单元的内容并重新键入内容;8.调用Fill命令时,如果数据个数超过指定的范围,则忽略多出的项;如果数据个数小于指定的范围,则重复使用这些数据,直到填满指定范围;9.A命令也支持最常用的两个伪指令DB和DW;10.Q命令并无存盘功能,可使用W命令存盘;11.帮助命令?可以显示各命令的简要说明。
本文标题:汇编实验报告(-)调试程序DEBUG 的使用
链接地址:https://www.777doc.com/doc-6040982 .html