附录3:DEBUG使用资料_第1页
附录3:DEBUG使用资料_第2页
附录3:DEBUG使用资料_第3页
附录3:DEBUG使用资料_第4页
附录3:DEBUG使用资料_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、附录附录 3 3:DEBUG DEBUG 使用资料使用资料(4)可装入、修改或显示任何文件 当然在 DEBUG 状态下运行汇编程序也具有一定局限性: 在 DEBUG 状态下运行的程序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。 不能调试太长的程序,只能分块进行程序设计。 在 DEBUG 状态下调试好的程序不能形成可执行文件(EXE),因此调试好的程序只能记下,到编辑环境下重新键入调试好的程序,通过汇编程序(ASM或 MASM),再通过连接程序 (LINK)形成可执行文件(EXE)。 2通过 DEBUG 编写、运行汇编程序 下而通过例子使大家了解在 DEBUG状

2、态下编写、运行汇编程序的过程, 例 用汇编语言编写一个计算“3 十 5”的加法程序。 MOV AL,33H ;持 3 的 ASCII 码送AL 寄存器中 MOV DL,35H ;将 5 的 ASCII 码送DL 寄存器中 ADD DL,AL ;做 3+5 结果送DL 寄存器 SUB DL,30H ;将 3十 5 的结果进行调整,得到8 的 ASCII 码,送DL 寄存器 MOV AH ,2 ; INT 21H ;输出DL 寄存器中的字符 INT 20H ;中断当前执行程序 该程序是将两个十进制数_3_和5_的_ASCII码送入寄存器_AL和_DL,当_ASCII码进行相加时必须通过调整后才能得

3、到其结果。如例中:33H十_35H_等于_68H,68H一_30H38H,_ 38H_才是十进制_8的_ASCII码,在将结果在显示器上输出时,采用_INT_21H,为_DOS_功能 调用,即为_21_号中断调用,功能号为_2,是要求在显示器上显示_DL_寄存器中的字符,该字符应该是将字符的_ASCII码放在_DL寄存器中。INT20H_是中断正常结束程序。运行步骤如下: (1)进入DEBUG_状态 系统已经装入_DEBUGCOM_程序,因此,进入_DOS_状态,输入如下内容:_ Cdebug_ 屏幕显示:_ “一”为已进入_DEBUG_状态,在该提示符下可键入DEBUG_命令。下划线部分为用

4、户键入的字符或命令。(2)键入程序并汇编 用_DEBUG_的_A命令送入程序 一_a_l00_ 0A47:0100_MOV_AL,33H_ 0A47:0102_MOV_Dl,35H_ 0A打;0104_ADD_DL,AL_ 0A47:0l06_SUB_DL,30H_ 0A47:0109_MOV_AH,2_ 0A47:010B_INT_21_ 0A47:010D_INT_20_ 0A47:010F_ 一 当键入_A_命令时,自动产生程序所送内存单元的段地址和偏移地址。通过偏移地址可以看到每条指令占内存单元多少个字节、如“MOVAL,33”占两个字节,“SUB_DL,30”占_3_个字节。 当程序

5、段送完时,只键人回车键,就退出汇编状态(A状态)回到_DEBUG_状态 “” 。其中送入数据为十六进制数,DEBUG_状态下程序中的数据均按十六进制处理,不 需要键入H_来表示数据为十六进制数。(3)执行程序 用_DE3UG_的G_命令执行刚刚汇编的程序: g_ 8 Program_terminated_normally_ (4)反汇编 可以用反汇编_U命令将键人的程序调出,并且可以得到每条汇编指令的机器码。 一_u100_10D_ 0A47:0100_B033_MOV_A1,33_ 0A47:0102_B235_MOV_DL,35_ 0A47:0104_00C2_ADD_DL,AL_ 0A4

6、7:0106_80EA_30_SUB_DL,30_ 0A47:0109_B402_MOV_AH,02_ 0A47:0l0B_CD21_1NT_21_ 0A47:010D_CD20_INT_20_ 其中命令_U后面的地址为要反汇编程序的起始偏移地址和终止偏移地址。(5)退出DEBUG_返回DOS_状态 q_ C_ 3_ 3DEDUGDEDUG的进入 (1)DEBUG_的启动 在 WINDOWS XP 下可点击“开始”处,在其中找到“所有程序”,然后在“所有程序”中找到“附件”,最后在“附件”中点击“C:命令提示符”,即可进入DOS 状态。 在操作系统DOS_状态下,直接调入_DEBUG_程序,键

7、入命令的格式如下:_ CDeBUG_D:Pathfilename.extParm1Parm2_ 其中_的内容为可选项,可以有也可以没有。 D:为驱动器号,指要调入_DEBUG_状态的可执行文件在哪个驱动器中,如_C:,D:,_ E: 。 Path为路径,指要调入_DEBUG_状态的可执行文件是在哪个目录下或子目录下。 filename.ext,指要调入_DEBUG_状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在_DEBUG_状态下汇编的程序段,通过 写盘命令W_写入磁盘的文件。 Parm1Parm2为任选参数,是给定文件的说明参数。在启动 DEBUG

8、 时,如果输入了 filename (文件名), 则DEBUG 程序把指定文件装入内存。 用户可以通过 DEBUG的命令对指定文什进行修改、显示或执行。如果没有文件名,则是以当 前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再通过 DEBUG 命令进行修改、显示或执行。 (2)启动DEBUG_后对寄存器和标志位的初始化 当启动_DEBUG_程序后,屏幕上出现“一” ,说明系统已进入_DEBUG_状态,可以调用DEBUG_的命令,寄存器和标志位置成下面状态: 段寄存器(CS,DS,ES 和 SS)被置到自由存储空间的底部,即第一段位于_DEBUG_ 程序的末尾处。 指令指针

9、(IP)置为_0100H。 堆栈指针(SP)置为段的尾部或装入程序的暂存区域的底部。 寄什器(AX,BX,CX,DX,BP,SI 和 DI)置为“0”。若启动 DEBUG 程序时指定了文件,则 CX 寄存器内装入文件长度(字节数);如果文件长度大于 64KB,则文件长度置于 BX 和 CX 中(高位在 BX 中)。 标志位置为清除值。 默认磁盘则传输地址置成代码段中的_80H。由此可见,所有可利用的内存空间都作了安排,因此不能用装入的程序去分配内存。如装入程序扩展名为.EXE 的文件,则进入_DEBUG_后由_DEBUG_进行再分配,把段寄存器、堆栈指针置成程序中所规定的值。 4DEBUG 的

10、主要命令_ DEBUG_命令的有关规定如下:_DEBUG_命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“, ”或空格隔开。 _DEBUG_命令必须接着按_ENTER_键,命令才有效。 参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用“H” 。 可以按_Ctrl键和_Break键来停止一个命令的执行,返回到DEBUG_的提示符“”下。 按_Ctrl_和_Num_LUCK_键中止正在上卷的输出行,再通过按任意键继续输出信息。_ DEBUG_命令: (1)汇编命令_A_ 格式:_A_段奇存器名:偏移地址_ _A_段地址:偏移地址_ _A_偏移地址_ _A

11、_ 功能:用该命令可以将汇编语言程序直接汇编进入内存。 当键人_A_命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指令回车后,自动显示下条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编语 言程序全部键人,又显示下一地址时可直接键入回车返回到提示符“一”为止。 其中的段地址在段地址寄存器中, 因此在使用该命令时必须将段地址寄存器送人段地址,的段地址在_CS_中,的段地址在_CS_中,偏移地址为_100H。 例如,用汇编语方编写个程序段,将十六进制_0,1,2,F_的_ASCII码送入偏移 地址为_100H_单元开始的存储单元中,并将该十六进制数据从_100H_单元开始的

12、存储区传送到以_200H为起始地址的存储区中。将编好的程序段通过命令_A送人内存并汇编,用块传送指令_MOV_SB_将数据串进行传送。_ Cdebug_ a_ 14DE:0100_db_30,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46_ 14DE:0110_mov_si,100_ 14DE:0113_mov_di,200_ 14DE:0116_mov_cx,10_ 14DE:0119_rep_movsb_ 14DE:011B_hlt_ 14DE:011C_ 其中 si 为源串地址寄存器,di 为目的串地址寄存器,计数器 cx 存放计数初值 16,r

13、epmovsb 为重复传送,以字节为传送单位,每传送一个字节,cx 中计数值减 1,直到 CX 为 0 为止。 (2)显示内存命令 D 格式:_D_地址_;显示当前或指定开始地址的主存内容_D_地址范围_;显示指定范围的主存内容_D_ 功能:显示指定内存范围的内容。 显示内容为两种形式:一种为十六进制内容,一种为与十六进制对应的_ASCII码字符,对不可见字符以代替。 对于、每次显示128 个字节内容,显示的字节数由地址范围来决定。 若命令中有地址,则显示的内容指定地址开始,若命令中无地址,如则从上一个D命令所显示的最后一个单元的下一个单元开始。若以前没有使用过D 命令, 则以 DEBUG 初

14、始 化的段寄存器的内容为起始段地址,起始偏移地址为100H,即 CS:100。 对于中的地址为偏移地址,段地址为_CS_的内容,对中的地址范围,可以指定段地址、起始偏移地址和终止偏移地址。 例如显示地址为_100H_的内存单元内容: d 100 0A47:0100 0B 06 98 3A 74 09 A1 963A 8B 16 98 3A EB 1E 8B .:t.:.:. 0A47:Ol10 1E FA 93 D1 E3 D1 E3 C49F D2 41 26 34 00 36 0A . A&.4.6. 0A47:0120 D1 E3 8B 87 D2 41 8B 97D4 41 0

15、5 O6 00 52 50 B8 . A.A.RP.0A47:0130 00 01 EB A3 FF 36 FA 939A 18 FO 5E 22 B8 7O 8E .6. pp . P. 0A47:0140 50 83 3E FA 93 FC 75 12A1 96 3A OB O6 98 3A 74 P.u.:.: t 0A47:0150 09 A1 96 3A 8B 16 98 3AEB 1E 8B E FA 93 D1 E3 .:.:. 0A47:0160 D1 E3 C4 9F D2 41 26 8B1F DI E3 D1 E3 8B 87 02 . A& . 0A47:017

16、0 41 8B 97 D4 41 05 06 0052 50 B8 40 00 E9 57 FF A.A.RP.W. 再显示偏移地址为 100H 一 120H 的内容: d 100 120 0A47:0100 0B 06 98 3A 74 09 A1 963A 8B 16 98 3A EB 1E 8B.:t.:.:. 0Al7:0110 1E FA 93 D1 E3 D1 E3 C49F D2 41 26 34 00 36 0A A46 0A47:O120 Dl (3)修改内存单元 格式:_E_地址_内容表_;用数据表的数据修改指定地址的内容 _E_地址_;修改指定地址的内容 功能: 用命令所

17、给定的表去代替指定地址范围的内存单元内容。 一个单元一个单元地修改单元内容。其中,内容表为一个十六进制数或一串十六进制数,也可以是单引号括起的一串字符。 例如,向_200H_为起始地址的单元中存放串十六进制数: e 200 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 看一看这些十六进制数是否替换了原来单元的内容: d_200_210_ 0A47:0200 61 62 63 64 65 66 67 6869 70 71 72 73 74 75 76 abcdefghipqrstuv 0A47:0210 03 如果用一串字将来替换从 200H单元

18、开始的内容(用单引号括起的部分): e 200 ABCDEFGHIJKLMNOPQRSTUVWXYZ 再用_D_命令看看是否已经替换: d 200 220 0A47:0200 41 42 43 44 45 46 47 4849 4A 4B 4C 4D 4E 4F 50 ABCDEFGHIJKLMNOP 0A47:0210 51 52 53 54 55 56 57 5859 5A 3A E9 11 01 B8 A2 QRSTUVWXYZ: 0A47:0220 36 一个单元一个单元地修改,每修改一个单元内容按空格键,再键入下一个单元的修改的内容,直到按回车键为止。如: 一 e 200 0A47:

19、0200 41.61 42.62 4363 4464 45.65 4666 4767 4868 0A47:0208 4969 4A70 4B.71 4C72 4D73 4E74 4F75 5076 0A47:02l0 51.77 52.78 53.79 54.80 55.81 5682 5783 58. 84 0A47:0218 59 d 200 230 0A47:0200 61 62 63 64 65 66 67 68一 69 70 71 72 73 74 75 76 abcdefghipqrstuv 0A47:0210 77 78 79 80 81 82 83 84 一59 5A 3A E

20、9 11 01 B8 A2 wxyYZ: 0A47:0220 36 1E 50 0E E8 0C FE B8 一A6 36 1E 5o 0E E8 03 FE 6P6.P 0A47:0230 FF (4)填充内存命令_F_ 格式:F_范围_单元内容表_ 功能:将单元内容表中的内容重复装入内存的指定范围内。 可以指定十六进制或 ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢 失。 f_200_adc_ d_200_ 0A47:0200_61_64_63_61_64_63_61_6463_61_64_63_61_64_63_61_adcadcadcadcadca_ 0A47:021

21、0_64_63_61_64_63_61_64_6361_64_63_61_64_63_61_64_dcadcadcadcadcad_ 0A47:0220_63_61_64_63_61_64_63_6164_63_61_64_63_61_64_63_cadcadcadcadcadc_ 0A47:0230_61_64_63_61_64_63_61_6463_61_64_63_61_64_63_61_adcadcadcadcadca_ 0A47:0240_64_63_61_64_63_61_64_6361_64_63_61_64_63_61_64_dcadcadcadcadcad_ 0A_47:02

22、50_63_61_64_63_61_64_63_6164_63_61_64_63_61_64_63_cadcadcadcadcadc_ 0A47:0260_61_64_63_61_64_63_61_6463_61_64_63_61_64_63_61_adcadcadcadcadca_ 0A47:0270_64_63_61_64_63_61_64_6361_64_63_61_64_63_61_64_dcadcadcadcadcad_ (5)内存搬家命令_M_ 格式:M_源地址范围_目标起始地址_ 其中源地址范围和目标起始地址为偏移地址,段地址为_DS_的内容。 功能:把源地址范围的内容搬至以目标

23、起始地址开始的存储单元中。 假定键入以下命令: m 100 110 500 Debug 将 100H-110H地址中的内容复制到地址 510H 中,要查看结果,使用 D 命令,并使用 m 命令指定目标地址。 (6)比较命令_C_ 格式:C_源地址范围,目标地址_ 其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元, 目标地址为与源地址所指单元对比的目标地址起始地址。 功能: 从源地址范围起始的地址单元开始逐个与目标起始地址往后的单元顺序比较每个单元的内容,比较到源终止地址为止。比较结果如果一致,则不显示任何信息,如果不一致, 则以源地址源内容目的内容目的地址的形式显示失配单元地址及内

24、容。 例如:用 C 命令比较 100H-110H 各单元内容是否与 300H-310H 各单元内容一致。假定_DS_=_197F,用C命令比较如下。 C 100 l10 300 197F:0100 4D E4 197F:0300 197F:0101 67 99 197F:0301 197F:0102 A3 27 197F:0302 197F:0103 35 F3 197F:0303 197F:0104 97 BD 197F:0304 197F:0105 04 35 197F:0305 197F:0107 76 71 197F:0307 197F:0108 E6 11 197F:0308 197

25、F:0109 19 2C 197F:0309 197F:010A 80 0A 197F:030A 197F:010B 36 7F 197F:030B 197F:010C BE 22 197F:030C 197F:010D 83 93 197F:030D 197F:010E 49 77 197F:030E 197F:010F 4F 8A 197F:030F 注意列表中缺少地址 197F:0106 和 197F:0306。这表明那些地址中的值是相同的。 (7)搜索指定内容命令 s 格式:s 地址范围表 功能:在指定地址范围内搜索表中内容,搜索到就显示表中元素所在地址。 例如:搜索地址范围为 100

26、H一 150H 中的 50H 这个数据所在地址。 可以先使用D 命令查看 100H一 170H 的各单元的内容,然后再使用S 命令,对比你搜索 的内容所在的单元地址是否是显示的地址。 用 s 命令搜索 50H 所在单元地址,假定DS=14DE: s 100 150 50 14DE:0103 说明 50H 所在的单元地址是 14DE:0103,其他单元地址的内容都不是 50H。 (8)检查和修改奇存器内容命令 R 格式: R;显示所有寄存器内容和标志位状态 R寄存器名 ;显示和修改指定寄存器 RF;显示和修改标志位功能: 显示 CPU 内部所有寄存器的内容和全部标志位的状态。 显示和修改一个指定

27、寄存器的内容和标志位的状态。 显示和修改标志位。 其中对状态标志寄存器 FLAG 以位的形式显示。显示时,8 个状态标志的显尔次序和符号如表 1 所示。标志 置位符号 复位符号 溢出标志0F 方向标志DF 中断标志IF 符号标志sF 零位标志ZF 辅助标志AF 奇偶标志PF 进位标志CF OV DN EI NG ZR AC PE CY NV UP DI PL NZ NA P0 NC 表 1 标志状态的表示符号 例如:当我们刚进人Debug 时,就可以执行该命令,显示示例如下: AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=

28、0000 DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC 18E4:0100 C70604023801 MOV WORD PTR0204,0138 DS:0204=0000 其中,前两行给出所有寄存器的值,包括各个标志状态。最后一行给出了当前CS:IP处的指令;由于这是一个涉及数据的指令,这一行的最后还给出相应单元的内容。 例如:键入“r_ax,Debug给出当前_AX_内容,冒号后用于输入新数据,如不修改则按_Enter_键。 _ax_ AX 0000 :0010 说明,将 AX寄存器的内容修改为 0010。 f

29、 NV UP EI PL NZ NA PO NC ov_dn_ 可以看到将标志寄存器_NV改为_ov,UP_改为_dn,修改各标志位的次序可以任意。 再用_R_命令看修改过的内容是否装入各寄存器和标志位的每一位; AX=0010 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 OV DN DI PL NZ NA PO NC 18E4:0100 C70604023801 MOV WORD PTR0204,0138 DS:0204=0000 (9)追踪和显

30、示命令 T 格式: T=地址或 T地址 ;逐条指令跟踪 T=地址条数或 T地址条数 ;多条指令跟踪 功能:从指定地址起执行一条或数值参数指定条数的指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的 CS:IP开始执 行。注意给出的执行地址前有一个等号,否则会被认为是被跟踪指令的条数(数值)。T 跟踪命令提供了一种逐条指令运行程序的方法,因此它也常被称为单步命令。T命令实际上利用了处理器的单步中断,使程序员可以细致地观察程序的执行情况。T命令逐条指 令执行程序,遇到子程序(CALL)或中断调用(INT n)指令也不例外,也会进入到子程序或中 断服务程

31、序当中执行。 (10)反汇编命令 U 格式:_U地址_;从指定地址开始,反汇编_32_个字节(80_列显示模式)_U地址范围_;对指定范围的主存内容进行反汇编 功能:将指定范围内的代码 U 汇编语言形式显不,同时显示该代码位于内存的地址和机器码。若在命令中没有指定地址, 则以上一个 U 命令的最后一条指令地址的下一个单元作为起始地址;若没有输入过 U命令,则以 DEBUG 初始化段寄存器的值作为段地址,以 0100H作为 偏移地址。 例如: 一 U 14C8:0000 B8CDl4 MOV AX,14CD 14C8:0003 8ED8 MOV DS,AX 14C8:0005 BA0600MOV

32、 DX,0006 14C8:0008 B409 MOV AH,09 14C8:000A CD21 INT 21 14C8:000C B401 MOV AH,01 14C8:000E CD21 INT 21 14C8:0010 3C31 CMP AL,31 14C8:0012 72F1 JB 0005 14C8:0014 3C38 CMP AL,38 14C8:0016 77ED JA 0005 14C8:0018 83E00FAND AX,+OF 14C8:001B 48 DECAX 14C8:001C DIE0 SHL AX,114C8:001E 8BD8MOV BX,AX 屏幕显示的左边是

33、主存逻辑地址,中间是该指令的机器代码,而右边则是对应的指令汇编格式。 (11)命名命令 N 格式:N 文件名 功能:在调用DEBUG 时,没有文件名,则需要用 N命令将要调用的文件名格式化到CS:5CH 的文件控制块中,才能用L 命令ff读盘命令)把它调入内存进行调试。 例如;用 N命令命名,调入 ExlExE 文件 Cdebug (没键人文件名) 一 n exl.exe (12)读盘命令 L 格式: L 地址驱动器号起始扇区号所读扇区个数 L 地址 L 功能: 把指定驱功器和指定扇区范围的内容读到内存的指定区域中。其中地址是读人内存的起始地址,当输入时没有给定地址,则隐含地址为CS:100H

34、。起始扇区号指逻辑扇区号的 起始位置。所读扇区个数是指从起始扇区号开始读到内存几个扇区的内容。驱动器号为_0、_ 1、2,0表示_A盘,1_表示_B_盘,2表示_c盘,。 例如:将硬盘_c_的_DOS_引导扇区(逻辑扇区号为 0 的一个扇区)内容装入,然后查看的命令是: 一 L O 2 O 1 一 D CS:O ff读入已在 CS:5CH 中格式化的文件控制块所指定的文件。在使用该命令前用 N 命令命名即可将要读人的文件名格式化到 CS:5CH 的文件控制块中,其中地址为内存地址。 例如:假定启动 Debug 并键入以下命令: 一 n 现在可以键入 L 命令以加载 F。Debug 将加载文件并显示 Debug 提示符。 假定需要从驱动器 C 将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到 起始地址为 04BA:0100 的内存中,键入以下命令: 一 L 04ba:100 2 0f 6d 同,地址隐含在 CS:100H中。 如果读入的文件有扩展名.COM 或.EXE,则始终装入 CS:100H 中,命令中指定了地址也没用。其中 Bx 和 Cx 中存放所读文件的字节数。(13)写盘命令 w 格式: W地址驱动器号起始扇区号所写扇区个数 W地址 W 功能:把在 DEBUG 状态下调试的程序或数据写入指定的驱动器中,起始扇区号为逻辑扇区号,所写扇区个数为要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论