一.实验目的:
进一步熟悉DEBUG调试程序的方法,熟悉汇编语言源程序结构,掌握数据分配伪指令的用法。
二.实验内容:
调试实验指导中给出的程序,查看数据区的内容,掌握调试程序的基本方法,并尝试自己编写简单的源程序。
D:\\09214040>masm b1214040.asm
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [b1214040.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]:
50146 + 414782 Bytes symbol space free
0 Warning Errors 0 Severe Errors
D:\\09214040>
三.操作步骤
1. 调用字处理程序建立源程序文件如图2-1所示。 DATA SEGMENT
ARRY1 DB 12,-18,32,68,-9 COUNT EQU $-ARRY1 ORG 08H
ARRY2 DW 15,26,38 STR1 DB 'AB' DATA1 DW ARRY2 DATA2 DD ARRY2 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV AL,ARRY1 MOV BL,COUNT
MOV DX,OFFSET ARRY2 MOV AX,SEG ARRY2 MOV BX,DATA1
MOV BL,BYTE PTR DATA2 MOV CX,WORD PTR DATA2
MOV AH,4CH ; 调用21H号中断的4CH号功能,返回DOS INT 21H CODE ENDS
END START 图1-1
2.在DOS环境下,用汇编程序MASM对源文件汇编产生目标文件OBJ,命令格式如下: 如汇编程序指示出错则需要重新调用编辑程序修改错误,直至汇编通过为止。 3. 用连接程序link产生执行文件exe D:\\09214040>link b1214040.obj
Microsoft (R) Overlay Linker Version 3.51
Copyright (C) Microsoft Corp 1983, 1984, 1985, 1986. All rights reserved.
Run File [B1214040.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
Warning: no stack segment
D:\\09214040>
4.用debug调试程序。
D:\\09214040>debug b1214040.exe -
先用u命令显示程序,以便了解指令地址。显示结果如图2-2所示 -U0
0B64:0000 B8620B MOV AX,0B62 0B64:0003 8ED8 MOV DS,AX 0B64:0005 A00000 MOV AL,[0000] 0B64:0008 B305 MOV BL,05 0B64:000A BA0800 MOV DX,0008 0B64:000D B8620B MOV AX,0B62 0B64:0010 8B1E1000 MOV BX,[0010] 0B64:0014 8A1E1200 MOV BL,[0012] 0B64:0018 8B0E1200 MOV CX,[0012]
0B64:001C B44C MOV AH,4C 0B64:001E CD21 INT 21 -u0
145C:0000 B85A14 MOV AX,145A
145C:0003 8ED8 MOV DS,AX 145C:0005 A00000 MOV AL,[0000] 145C:0008 B305 MOV BL,05 145C:000A BA0800 MOV DX,0008 145C:000D B85A14 MOV AX,145A 145C:0010 8B1E1000 MOV BX,[0010] 145C:0014 8A1E1200 MOV BL,[0012] 145C:0018 8B0E1200 MOV CX,[0012] 145C:001C B44C MOV AH,4C 145C:001E CD21 INT 21 -
图2-2
将断点设置在程序的主要部分运行以前,并查看数据区的内容。如图2-3所示。 -g05
AX=145A BX=0000 CX=0040 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0005 NV UP EI PL NZ NA PO NC 145C:0005 A00000 MOV AL,[0000] DS:0000=0C
-D0
0B62:0000 0C EE 20 44 F7 00 00 00-0F 00 1A 00 26 00 41 42 .. D........&.AB 0B62:0010 08 00 08 00 62 0B 00 00-00 00 00 00 00 00 00 00 ....b........... 0B62:0020 B8 62 0B 8E D8 A0 00 00-B3 05 BA 08 00 B8 62 0B .b............b. 0B62:0030 8B 1E 10 00 8A 1E 12 00-8B 0E 12 00 B4 4C CD 21 .............L.! 0B62:0040 38 20 75 03 E9 04 FF C7-46 FC 00 00 C7 46 FA 00 8 u.....F....F.. 0B62:0050 00 E9 33 FF 80 7E F6 3B-75 05 C6 06 0E 5C FF 0B ..3..~.;u....\\.. 0B62:0060 F6 75 0C 80 3E 0E 5C 00-74 05 C6 06 38 68 FF 5E .u..>.\\.t...8h.^ 0B62:0070 5F 8B E5 5D C3 55 8B EC-C6 06 26 05 FF 83 3E 1E _..].U....&...>. -d0
145A:0000 0C EE 20 44 F7 00 00 00-0F 00 1A 00 26 00 41 42 .. D........&.AB 145A:0010 08 00 08 00 5A 14 00 00-00 00 00 00 00 00 00 00 ....Z........... 145A:0020 B8 5A 14 8E D8 A0 00 00-B3 05 BA 08 00 B8 5A 14 .Z............Z. 145A:0030 8B 1E 10 00 8A 1E 12 00-8B 0E 12 00 B4 4C CD 21 .............L.! 145A:0040 1C 7F 05 3D 00 04 76 15-B8 D8 10 50 B8 00 17 50 ...=..v....P...P 145A:0050 E8 32 EA 83 C4 04 C6 06-7A 18 FF EB 06 8B 46 FC .2......z.....F. 145A:0060 A3 4E 05 8B E5 5D C3 55-8B EC 83 EC 04 E8 7E FE .N...].U......~. 145A:0070 89 46 FC 89 56 FE 0B D2-7C 1C 7F 05 3D FF 00 76 .F..V...|...=..v -
图2-3
根据数据区的显示画出数据存储示意图:
地址 145A:0000 145A:0001 145A:0002 145A:0003 145A:0004 145A:0005 145A:0006 145A:0007 145A:0008 145A:0009 145A:000A 145A:000B 145A:000C 145A:000D 145A:000E 145A:000F 145A:0010 145A:0011 145A:0012 145A:0013 145A:0014 145A:0015 0C EE 20 44 F7 00 00 00 0F 00 1A 00 26 00 41 42 08 00 08 00 5A 14 变量名 ARRY1 ARRY2 STR1 DATA1 DATA2 AX=145A BX=0000 CX=0040 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0005 NV UP EI PL NZ NA PO NC 145C:0005 A00000 MOV AL,[0000] DS:0000=0C
-t
AX=140C BX=0000 CX=0040 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0008 NV UP EI PL NZ NA PO NC 145C:0008 B305 MOV BL,05 -t
将05赋值给BL
AX=140C BX=0005 CX=0040 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=000A NV UP EI PL NZ NA PO NC 145C:000A BA0800 MOV DX,0008 -t
将0008赋值给DX
AX=140C BX=0005 CX=0040 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=000D NV UP EI PL NZ NA PO NC 145C:000D B85A14 MOV AX,145A -t
145A赋值给AX
AX=145A BX=0005 CX=0040 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0010 NV UP EI PL NZ NA PO NC 145C:0010 8B1E1000 MOV BX,[0010] DS:0010=0008
-t
将偏移地址为0010的数字即0008赋值给BX
AX=145A BX=0008 CX=0040 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0014 NV UP EI PL NZ NA PO NC 145C:0014 8A1E1200 MOV BL,[0012] DS:0012=08
-t
将偏移地址为0012的两段数字即08赋给BL即BX的低字节位
AX=145A BX=0008 CX=0040 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=0018 NV UP EI PL NZ NA PO NC 145C:0018 8B0E1200 MOV CX,[0012] DS:0012=0008
-t
将偏移地址为0012的数字即0008赋给CX
AX=145A BX=0008 CX=0008 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000 DS=145A ES=144A SS=145A CS=145C IP=001C NV UP EI PL NZ NA PO NC 145C:001C B44C MOV AH,4C -t
将4C赋给AH即将aC赋给AX的高字节位即:下一次执行t的结果中Ax=4C5A
AX=4C5A BX=0008 CX=0008 DX=0008 SP=0000 BP=0000 SI=0000 DI=0000……
用T命令单步运行程序,查看每一次寄存器内容的变化,说明每一条指令的功能。一直运行到指令MOV AH,4C,用G命令运行完程序。
5.参考以上程序,编写一个简单的程序,在数据段定义一个字符’B’,并把这个字符送到AL寄存器中,用DEBUG调试程序,看看是否按要求实现了程序的基本功能。
DATA SEGMENT
STR DB ‘B’ DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX;DATA MOV DS,AX MOV AL, STR MOV 4H,4CH INT 21H
CODE ENDS
END START 运行结果:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [b2214040.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]:
50186 + 414742 Bytes symbol space free
0 Warning Errors 0 Severe Errors
D:\\09214040>link b2214040.obj
Microsoft (R) Overlay Linker Version 3.51
Copyright (C) Microsoft Corp 1983, 1984, 1985, 1986. All rights reserved.
Run File [B2214040.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
Warning: no stack segment
D:\\09214040>debug b2214040.exe - -g
D:\\09214040>
因篇幅问题不能全部显示,请点此查看更多更全内容