Thực hành lập trình hợp ngữ - Hướng dẫn sử dụng công cụ Debug

pdf 9 trang hoanguyen 5420
Bạn đang xem tài liệu "Thực hành lập trình hợp ngữ - Hướng dẫn sử dụng công cụ Debug", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfthuc_hanh_lap_trinh_hop_ngu_huong_dan_su_dung_cong_cu_debug.pdf

Nội dung text: Thực hành lập trình hợp ngữ - Hướng dẫn sử dụng công cụ Debug

  1. TH C HÀNH L P TRÌNH H P NG HƯNG D N S DNG CÔNG C DEBUG 1
  2. Bài 1: Gi ới thi ệu công c ụ debug Debug là công c g ri, cho phép n p m t file ch ơ ng trình và th c thi t ng b c, xem và s a ni dung vùng nh , thanh ghi, sector a, nh p m t on ch ơ ng trình b ng mã g i nh hay mã máy vào m t v trí trong b nh 1.1. Kh ởi đ ộng và thoát công c ụ debug Công c Debug.EXE có s n trong các h iu hành c a Microsoft nh MS-DOS, Windows 9x, 2000, XP, Vista. Tùy thu c vào h iu hành nào mà file Debug.EXE n m các v trí ng d n khác nhau. Trên h iu hành Windows có th kh i ng công c này b ng cách gõ vào Debug.EXE vào h p TextBox Run (ho c “Start Search” v i Windows Vista). Kh i ng Debug t Windows XP và Vista Sau khi kh i ng Debug, c a s giao di n có d ng sau: 1.2. Cấu trúc và các d ạng tham s ố của các l ệnh debug Debug là công c s dng ch dòng l nh, ng i s dng gõ l nh t du nh c con tr và xem kt qu sau khi th c thi l nh ngay trên màn hình. Danh sách các l nh mà công c h tr : Lnh Ý ngh a A [address] assembe - nh ập đoạn ch ươ ng trình b ằng mã lệnh g ợi nh ớ 2
  3. C range address compare - so sánh vùng nh ớ D [range] dump - in n ội dung vùng nh ớ ra màn hình E address [list] enter - nh ập n ội dung m ột vùng nh ớ F range list fill - điền n ội dung vùng nh ớ G [=address] [addresses] go - th ực thi đoạn ch ươ ng trình H value1 value2 hex - tính t ổng và tích hai s ố h ệ 16 I port input - nh ập m ột giá tr ị t ừ c ổng L [address] [drive] load – nạp n ội dung file ho ặc sector [firstsector] [number] M range address move – sao chép vùng nh ớ N [pathname] name – đặt tên cho file s ắp đọc/ghi O port byte output – xu ất d ữ li ệu ra c ổng P [=address] [number] proceed – th ực thi m ột l ệnh 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 – th ực thi một l ệnh U [range] unassemble – xem n ội dung vùng nh ớ ở dạng l ệnh g ợi nh ớ W [address] [drive] write – ghi n ội dung vùng nh ớ lên file [firstsector] [number] ho ặc sector Lu ý: Tham s trong c p d u [ ] là tùy ch n có ho c không, tham s không có d u [ ] b t bu c ph i có. 1.3. Các thao tác c ơ bản v ới công c ụ debug: 1.3.1. Xem và s ửa n ội dung các thanh ghi (l ệnh R) Cú pháp: R [register] Ý ngh a: Vi tham s register là tên c a thanh ghi (AX, BX, CX, DX, CS, DS, ), thì l nh này hi n th giá tr 16 bit c a thanh ghi này ra màn hình và hi n d u nh c nh p giá tr mi cho thanh ghi này vào. N u không mu n thay i thì có th gõ Enter gi nguyên giá tr c. Nu không có tham s register thì ni dung ca t t c các thanh ghi s c hi n th Ví d : Hi n th ni dung thanh ghi AX và s a thành giá tr 00FF : -R AX AX 1065 :00FF Ki m tra l i n i dung c a AX: -R AX AX 00FF : - Xem n i dung t t c các thanh ghi: 3
  4. Các thanh ghi a d ng: 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 tr ng thái hi n th di d ng 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 OF DF IF SF ZF AF PF CF 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 l i ã thay i ch a: -r F NV DN EI NG NZ NA PO NC - 1.3.2. Xem n ội dung vùng nh ớ (l ệnh D) Cú pháp: D [range] Ý ngh a: Hi n th ni dung vùng nh xác nh b i range Ví d : Hi n 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 . 4
  5. Hi n th vùng nh 24 (18h) byte b t 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 Hi n 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 . Hi n 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 l n hi n 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 t p: Hi n th ngày tháng c a BIOS trên màn hình c a debug bi t thông tin này ch a trong 8 byte vùng nh bt u a ch FFFF:0005 1.3.3. Tìm ki ếm n ội dung vùng nh ớ (l ệnh S) Cú pháp: S range list Ý ngh a: Tìm ki m trong m t vùng nh range mt chu i các byte cung c p trong tham s list. Tham s list có th là m t danh sách các giá tr byte ho c là 1 chu i ký t bao óng trong 2 d u nháy ơ n ho c kép. Ví d : Tìm chu i có giá tr “COM1” trong vùng nh t 0000:0000 n 0000:ffff : 5
  6. -s 0000:0000 ffff "COM1" 0000:0776 0000:0C79 Tìm ưc 2 v trí xu t hi n. Dùng l nh D ki m tra l i a ch 0000:0776 : -d 0:0776 0000:0770 43 4F-4D 31 20 20 20 20 90 00 COM1 0000:0780 70 00 C0 A8 EC 01 03 02-4C 50 54 31 20 20 20 20 p LPT1 0000:0790 A2 00 70 00 C0 A8 EC 01-0A 02 4C 50 54 32 20 20 p LPT2 0000:07A0 20 20 B4 00 70 00 C0 A8-EC 01 11 02 4C 50 54 33 p LPT3 0000:07B0 20 20 20 20 C6 00 70 00-00 80 EC 01 1E 02 43 4F p CO 0000:07C0 4D 32 20 20 20 20 D8 00-70 00 00 80 EC 01 24 02 M2 p $. 0000:07D0 43 4F 4D 33 20 20 20 20-FF FF 70 00 00 80 EC 01 COM3 p 0000:07E0 2A 02 43 4F 4D 34 20 20-20 20 10 14 00 00 C0 15 *.COM4 0000:07F0 59 F8 00 F0 19 F2 Y Cng có th tìm theo chu i các giá tr byte nh ư sau: -s 0000:0000 0dff 43 4f 4d 0000:0774 0000:07C2 0000:07D4 0000:07E6 -d 0000:770 0000:0770 7A 02 A6 02 43 4F 4D 31-20 20 20 20 8E 00 70 00 z COM1 p. 0000:0780 C0 A0 7A 02 91 02 4C 50-54 31 20 20 20 20 A0 00 z LPT1 0000:0790 70 00 C0 A0 7A 02 98 02-4C 50 54 32 20 20 20 20 p z LPT2 0000:07A0 2D 01 70 00 C0 A0 7A 02-9F 02 4C 50 54 33 20 20 -.p z LPT3 0000:07B0 20 20 11 EA 27 27 3F FD-CA 00 70 00 00 80 7A 02 ''? p z. 0000:07C0 AC 02 43 4F 4D 32 20 20-20 20 DC 00 70 00 00 80 COM2 p 0000:07D0 7A 02 B2 02 43 4F 4D 33-20 20 20 20 00 00 6B 03 z COM3 k. 0000:07E0 00 80 7A 02 B8 02 43 4F-4D 34 20 20 20 20 E8 D2 z COM4 1.3.4. Sửa n ội dung vùng nh ớ (l ệnh E) Cú pháp: E address [list] Ý ngh a: Nh p m t ni dung vào vùng nh a ch address Ví d : Nh p vào 10 giá tr t 1 n 10 vào 10 byte b t u a ch 0B17:0100 -e 0b17:100 01 02 03 04 05 06 07 08 09 0a Dùng l nh D ki m tra l i: -d 0b17:100 0B17:0100 01 02 03 04 05 06 07 08-09 0A 00 00 00 00 00 00 0B17:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Nh p vào chu i “Hello Assembly” vào vùng nh bt u a ch 0B17:0125: -e 0b17:0125 "Hello Assembly" -d 0b17:0100 6
  7. 0B17:0100 01 02 03 04 05 06 07 08-09 0A 00 00 00 00 00 00 0B17:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0120 00 00 00 00 00 48 65 6C-6C 6F 20 41 73 73 65 6D Hello Assem 0B17:0130 62 6C 79 00 00 00 00 00-00 00 00 00 00 00 00 00 bly 0B17:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Nh p tùy ý các byte vào vùng nh bt u a ch 0B17:0125: -e 0b17:0125 0B17:0125 48._ Nh ập giá tr ị m ới vào, nh ập xong nh ấn SPACE BAR để chuy ển sang byte k ế ti ếp. 1.3.5. Đi ền n ội dung vùng nh ớ (l ệnh F) Cú pháp: F range list Ý ngh a: in ni dung vào vùng nh a ch address Ví d : in y chu i “Hello” vào vùng nh t a ch 0B17:0100 - 150 -f 0b17:100 150 "Hello" -d 0b17:100 0B17:0100 48 65 6C 6C 6F 48 65 6C-6C 6F 48 65 6C 6C 6F 48 HelloHelloHelloH 0B17:0110 65 6C 6C 6F 48 65 6C 6C-6F 48 65 6C 6C 6F 48 65 elloHelloHelloHe 0B17:0120 6C 6C 6F 48 65 6C 6C 6F-48 65 6C 6C 6F 48 65 6C lloHelloHelloHel 0B17:0130 6C 6F 48 65 6C 6C 6F 48-65 6C 6C 6F 48 65 6C 6C loHelloHelloHell 0B17:0140 6F 48 65 6C 6C 6F 48 65-6C 6C 6F 48 65 6C 6C 6F oHelloHelloHello 0B17:0150 48 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 H 0B17:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 in y 22 33 vào vùng nh t a ch 0B17:0150 - 170 -f 0b17:150 200 22 33 -d 0b17:100 0B17:0100 48 65 6C 6C 6F 48 65 6C-6C 6F 48 65 6C 6C 6F 48 HelloHelloHelloH 0B17:0110 65 6C 6C 6F 48 65 6C 6C-6F 48 65 6C 6C 6F 48 65 elloHelloHelloHe 0B17:0120 6C 6C 6F 48 65 6C 6C 6F-48 65 6C 6C 6F 48 65 6C lloHelloHelloHel 0B17:0130 6C 6F 48 65 6C 6C 6F 48-65 6C 6C 6F 48 65 6C 6C loHelloHelloHell 0B17:0140 6F 48 65 6C 6C 6F 48 65-6C 6C 6F 48 65 6C 6C 6F oHelloHelloHello 0B17:0150 22 33 22 33 22 33 22 33-22 33 22 33 22 33 22 33 "3"3"3"3"3"3"3"3 0B17:0160 22 33 22 33 22 33 22 33-22 33 22 33 22 33 22 33 "3"3"3"3"3"3"3"3 0B17:0170 22 33 22 33 22 33 22 33-22 33 22 33 22 33 22 33 "3"3"3"3"3"3"3"3 1.3.6. Sao chép vùng nh ớ (l ệnh M) Cú pháp: M range address Ý ngh a: Copy ni dung vùng nh n a ch address Ví d : Copy vùng nh 8 byte a ch 0B17:500 n a ch 0B17:530 -d 0b17:500 0B17:0500 41 73 73 65 6D 62 6C 79-00 00 00 00 00 00 00 00 Assembly 0B17:0510 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0520 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0530 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0540 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0550 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0560 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0570 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 7
  8. -m 0b17:500 507 0b17:0530 -d 0b17:500 0B17:0500 41 73 73 65 6D 62 6C 79-00 00 00 00 00 00 00 00 Assembly 0B17:0510 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0520 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0530 41 73 73 65 6D 62 6C 79-00 00 00 00 00 00 00 00 Assembly 0B17:0540 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0550 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0560 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0570 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 1.3.7. So sánh hai vùng nh ớ (l ệnh C) Cú pháp: C range address Ý ngh a: So sánh ni dung vùng nh range và vùng nh bt u a ch address Ví d : So sánh hai vùng nh 8 byte a ch 0B17:500 và 0B17:530 -C 0b17:500 507 0b17:530 0B17:0502 73 01 0B17:0532 -d 0b17:500 0B17:0500 41 73 73 65 6D 62 6C 79-00 00 00 00 00 00 00 00 Assembly 0B17:0510 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0520 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0530 41 73 01 65 6D 62 6C 79-00 00 00 00 00 00 00 00 As.embly 0B17:0540 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0550 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0560 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0570 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 1.3.8. Các thao tác đ ọc ghi file (l ệnh N, L, W) Cú pháp: N [pathname] Ý ngh a: Khai báo tên file mu n c ho c ghi Cú pháp: L [address] [drive] Ý ngh a: Np m t file/ a lên b nh , sau khi n p, giá tr 32bit ch a trong c p thanh ghi [BX|CX] cho bi t kích th c file. Cú pháp: W [address] [drive] Ý ngh a: Ghi m t vùng nh vào file. L u ý, s byte c n ghi là giá tr 32bit ch a s n trong c p thanh ghi [BX|CX] Chú ý: Không nên s dng l nh W tùy ti n mà không bi t tác ng c a nó nh ư th nào vì có th to các file không mong mu n ho c h ư h ng d li u trên a. Ví d : Gi s có m t file Text C:\aaa.txt có n i dung l n h ơn 30 ký t . c file text aaa.txt lên vùng nh 0B17:0200 và s a ký t u tiên thành ‘*’ và ghi l i v i tên file m i bbb.txt v i n i dung là 20 ký t u tiên c a file aaa.txt. Khai báo tên file C:\aaa.txt : -N C:\aaa.txt Np file lên v trí 0B17:0200 : -L 0B17:0200 Xem l i n i dung file ã n p 0B17:0200 : -D 0b17:0200 0B17:0200 2A 65 73 74 0D 0A 31 32-33 0D 0A 48 65 6C 6C 6F Test 123 Hello 0B17:0210 0D 0A 41 73 73 65 6D 62-6C 79 00 00 00 00 00 00 Assembly 8
  9. 0B17:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Xem kích th ưc file trong c p thanh ghi [BX|CX] : -R AX=0000 BX=0000 CX=001A 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:0000=CD Sa ký t u tiên : -E 0B17:0200 '*' Xem l i : -D 0b17:0200 0B17:0200 2A 65 73 74 0D 0A 31 32-33 0D 0A 48 65 6C 6C 6F *est 123 Hello 0B17:0210 0D 0A 41 73 73 65 6D 62-6C 79 00 00 00 00 00 00 Assembly 0B17:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 0B17:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Khai báo tên file C:\bbb.txt : -N C:\bbb.txt Khai báo kích th ưc file s ghi là 14h (20byte) : -R BX BX 0000 : -R CX CX 001A :14 Ghi n i dung vùng nh bt u a ch 0B17:0200 : -W 0B17:0200 Writing 00014 bytes - Bài t p: T o m t file Hello.txt v i n i dung là chu i Hello n m liên ti p. Kích th ưc file là 1KB. (G i ý, dùng l nh F in n i dung lên vùng nh tr ưc) 9