1
THC HÀNH LP TRÌNH HP NG
HƯỚNG DN S DNG CÔNG C DEBUG
2
Bài 1: Gii thiu công c debug
Debug là công c g ri, cho phép np mt file chương trình và thc thi tng bước, xem và sa
ni dung vùng nh, thanh ghi, sector đĩa, nhp mt đon chương trình bng mã gi nh hay mã
máy vào mt v trí trong b nh
1.1. Khi đng và thoát công c debug
Công c Debug.EXE có sn trong các h điu hành ca Microsoft như MS-DOS, Windows 9x,
2000, XP, Vista. y thuc vào h điu hành nào mà file Debug.EXE nm c v trí đường dn
khác nhau. Trên h điu hành Windows có th khi động công c này bng cách gõ vào
Debug.EXE vào hp TextBox Run (hoc “Start Search” vi Windows Vista).
Khi động Debug t Windows XP và Vista
Sau khi khi động Debug, ca s giao din có dng sau:
1.2. Cu trúc và các dng tham s ca các lnh debug
Debug là công c s dng chế độ dòng lnh, người s dng gõ lnh t du nhc con tr và xem
kết qu sau khi thc thi lnh ngay trên màn hình. Danh sách các lnh mà công c h tr:
Lnh Ý nghĩa
A
[address] assembe - nhp đon chương trình bng mã
lnh gi nh
3
C
range address compare - so sánh vùng nh
D
[range] dump - in ni dung vùng nh ra màn hình
E
address [list] enter - nhp ni dung mt vùng nh
F
range list fill - đin ni dung vùng nh
G
[=address] [addresses] go - thc thi đon chương trình
H
value1 value2 hex - tính tng và tích hai s h 16
I
port input - nhp mt giá tr t cng
L
[address] [drive]
[firstsector] [number]
load – np ni dung file hoc sector
M
range address move – sao chép vùng nh
N
[pathname] name – đặt tên cho file sp đọc/ghi
O
port byte output – xut d liu ra cng
P
[=address] [number] proceed – thc thi mt lnh
Q
quit – thoát chương trình debug
R
[register] register – thao tác trên thanh ghi
S
range list search – tìm kiếm trên b nh
T
[=address] [number] trace – thc thi mt lnh
U
[range] unassemble – xem ni dung vùng nh
dng lnh gi nh
W
[address] [drive]
[firstsector] [number]
write – ghi ni dung vùng nh lên file
hoc sector
Lưu ý: Tham s trong cp du [ ] là tùy chn có hoc không, tham s không có du [ ] bt buc
phi có.
1.3. Các thao tác cơ bn vi công c debug:
1.3.1. Xem và sa ni dung các thanh ghi (lnh R)
Cú pháp: R [register]
Ý nghĩa: Vi tham s registertên ca thanh ghi (AX, BX, CX, DX, CS, DS, …), thì lnh này
hin th giá tr 16 bit ca thanh ghi này ra màn hình và hin du nhc để nhp giá tr mi cho
thanh ghi này vào. Nếu không mun thay đổi thì có th gõ Enter để gi nguyên giá tr cũ.
Nếu không có tham s register thì ni dung ca tt c các thanh ghi s được hin th
Ví d:
Hin th ni dung thanh ghi AX và sa thành giá tr 00FF :
-R AX
AX 1065
:00FF
Kim tra li ni dung ca AX:
-R AX
AX 00FF
:
-
Xem ni dung tt c các thanh ghi:
4
Các thanh ghi đa dng: AX,BX,CX,DX
Các thanh ghi đon: CS, DS, ES, SS
Các thanh ghi con tr và ch s: SI, DI, SP, BP
Thanh ghi con tr chương trình: IP
Thanh ghi trng thái hin th dưới dng các c sau:
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
FLAGS
FLAGSFLAGS
FLAGS
SET (a 1-bit) CLEARed (a 0-bit)
Overflow (OF)
OV NV [No Overflow]
Direction (DF)
DN (decrement) UP (increment)
Interrupt (IF)
EI (enabled) DI (disabled)
Sign (SF)
NG (negative) PL (positive)
Zero (ZF)
ZR [zero] NZ [ Not zero]
Auxiliary Carry (AF)
AC NA [ No AC ]
Parity (PF)
PE (even) PO (odd)
Carry (CF)
CY [Carry] NC [ No Carry]
Ví d thay đổi giá tr c DF thành DN và giá tr c SF thành NG:
-r F
NV UP EI PL NZ NA PO NC -DN NG
Xem li đã thay đổi chưa:
-r F
NV DN EI NG NZ NA PO NC -
1.3.2. Xem ni dung vùng nh (lnh D)
Cú pháp: D [range]
Ý nghĩa: Hin th ni dung vùng nh xác định bi range
Ví d:
Hin th vùng nh t C010:0000 đến C010:0050
-d c010:0000 0050
C010:0000 14 07 00 02 0C 64 1B 14-07 00 04 30 64 1C 14 07 .....d.....0d...
C010:0010 00 00 03 64 1C 14 07 00-02 0C 64 1C 14 07 00 04 ...d......d.....
C010:0020 30 24 1C 14 07 00 06 C0-24 1D 14 07 00 00 03 64 0$......$......d
C010:0030 1D 14 07 00 02 0C D6 09-80 90 20 E0 1D 10 08 60 .......... ....`
C010:0040 22 00 00 00 00 08 08 18-4E 0C 80 C8 20 E0 14 10 ".......N... ...
C010:0050 10 .
CF PF
AF ZF
SF
IF DF
OF
5
Hin th vùng nh 24 (18h) byte bt đầu t C000:0010
-d C000:0010 L 18
C000:0010 30 30 1C 22 E9 35 21 9D-40 00 E0 0A 30 30 49 42 00.".5!.@...00IB
C000:0020 4D 20 56 47 41 20 43 6F M VGA Co
Hin th vùng nh t DS:0150 đến DS:0180
-r
AX=01FF BX=1008 CX=0507 DX=0516 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17E1 ES=17E1 SS=17E1 CS=17E1 IP=0105 NV DN EI NG NZ NA PO NC
17E1:0105 0000 ADD [BX+SI],AL DS:1008=00
-d 150 180
17E1:0150 48 65 6C 6C 6F 20 41 73-73 65 6D 62 6C 79 21 00 Hello Assembly!.
17E1:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:0180 00 .
Hin th vùng nh 128 byte địa ch DS:0150
-d 150
17E1:0150 48 65 6C 6C 6F 20 41 73-73 65 6D 62 6C 79 21 00 Hello Assembly!.
17E1:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:01B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
17E1:01C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
Lnh d không có tham s: hin th 128 byte kế tiếp ln hin th trước
-d C700:0000 18
C700:0000 33 C9 B6 A0 E8 59 F7 B8-02 01 9D 75 02 33 C0 89 3....Y.....u.3..
C700:0010 46 16 C7 46 12 00 02 B4-00 F..F.....
-d
C700:0010 66 5A 5B C3 53 51 66 fZ[.SQf
C700:0020 52 B7 A0 B9 80 00 66 81-E2 FF FF 00 00 E8 6D 00 R.....f.......m.
C700:0030 72 02 EB 04 B4 00 EB 02-B4 01 66 5A 59 5B C3 01 r.........fZY[..
C700:0040 10 04 40 08 80 02 20 50-51 52 56 83 F9 00 74 0B ..@... PQRV...t.
C700:0050 B2 08 83 F9 02 74 1B 8A-D5 EB 17 E8 3C B8 8A E5 .....t......<...
C700:0060 B9 08 00 BE 3F 70 2E AC-84 E0 E1 FA B2 01 E3 02 ....?p..........
C700:0070 8A D0 E8 05 00 5E 5A 59-58 C3 52 56 2E F6 06 1A .....^ZYX.RV....
C700:0080 0C 01 74 0C 80 FA 01 75-07 2E 8A 1E 41 0C EB 09 ..t....u....A...
C700:0090 E8 CA EA 72 05 2E 8A 5C-13 ...r...\.
Bài tp: Hin th ngày tháng ca BIOS trên màn hình ca debug biết thông tin này cha trong 8
byte vùng nh bt đầu địa ch FFFF:0005
1.3.3. Tìm kiếm ni dung vùng nh (lnh S)
Cú pháp: S range list
Ý nghĩa: Tìm kiếm trong mt vùng nh range mt chui các byte cung cp trong tham s list.
Tham s list có th là mt danh sách các giá tr byte hoc là 1 chui ký t bao đóng trong 2 du
nháy đơn hoc kép.
Ví d:
Tìm chui có giá tr “COM1” trong vùng nh t 0000:0000 đến 0000:ffff :