Bài 2: Các thao tác xử lý chương trình với công cụ Debug 2.1 Nhập đoạn chương trình mã gợi nhớ (lệnh A) Cú pháp: A [address] Ý nghĩa: Nhập đoạn mã gợi nhớ vào nhớ địa address Ví dụ: Nhập đoạn chương trình sau vào vùng nhớ 0B17:0100 MOV AX,500H MOV BX,16H ADD AX,BX -a 0B17:100 0B17:0100 MOV AX,500 0B17:0103 MOV BX, 16 0B17:0106 ADD AX,BX 0B17:0108 - Lưu ý: - Nếu địa chỉ gồm thành phần Offset Segment mặc định nội dung ghi CS - Hệ số mặc định sử dụng 16 nên không cần thêm hậu tố H cuối giá trị (500H 500; 16H 16) - Dựa vào địa cuối tính kích thước đoạn chương trình vừa nhập (Trong ví dụ trên, đoạn chương trình có kích thước byte) 2.2 Xem đoạn chương trình nhớ dạng mã gợi nhớ (lệnh U) Cú pháp: U [range] Ý nghĩa: Xem dạng mã gợi nhớ đoạn chương trình nằm nhớ Ví dụ: Xem đoạn chương trình nhập phần vùng nhớ 0B17:0100 Xem địa 0B17:0100, chiều dài byte : -u 0B17:100 L 0B17:0100 B80005 0B17:0103 BB1600 0B17:0106 01D8 MOV MOV ADD AX,0500 BX,0016 AX,BX Hoặc xem địa 0B17:0100 đến địa 0106 : -u 0B17:100 106 0B17:0100 B80005 0B17:0103 BB1600 0B17:0106 01D8 MOV MOV ADD AX,0500 BX,0016 AX,BX Hoặc xem từ địa 0B17:0100: -u 0B17:0100 0B17:0100 B80005 0B17:0103 BB1600 0B17:0106 01D8 0B17:0108 6C 0B17:0109 6F 0B17:010A 48 0B17:010B 65 0B17:010C 6C MOV MOV ADD DB DB DEC DB DB AX,0500 BX,0016 AX,BX 6C 6F AX 65 6C 10 0B17:010D 0B17:010E 0B17:010F 0B17:0110 0B17:0112 0B17:0114 0B17:0116 0B17:0118 0B17:011A 0B17:011C 0B17:011E 6C 6F 48 0000 0000 0000 0000 0000 0000 0000 0000 DB DB DEC ADD ADD ADD ADD ADD ADD ADD ADD 6C 6F AX [BX+SI],AL [BX+SI],AL [BX+SI],AL [BX+SI],AL [BX+SI],AL [BX+SI],AL [BX+SI],AL [BX+SI],AL Xem dạng mã nhị phân: -d 0B17:0100 0B17:0100 B8 00 0B17:0110 00 00 0B17:0120 00 00 0B17:0130 6C 6F 0B17:0140 6F 48 0B17:0150 22 33 0B17:0160 22 33 0B17:0170 22 33 -d 0B17:0100 L8 0B17:0100 B8 00 05 00 00 48 65 22 22 22 BB 00 00 65 6C 33 33 33 16 00 00 6C 6C 22 22 22 00 00 00 6C 6F 33 33 33 01 00 00 6F 48 22 22 22 D8-6C 00-00 00-00 48-65 65-6C 33-22 33-22 33-22 6F 00 00 6C 6C 33 33 33 48 00 00 6C 6F 22 22 22 65 00 00 6F 48 33 33 33 6C 00 00 48 65 22 22 22 6C 00 00 65 6C 33 33 33 6F 00 00 6C 6C 22 22 22 48 00 00 6C 6F 33 33 33 05 BB 16 00 01 D8 loHelloH loHelloHelloHell oHelloHelloHello "3"3"3"3"3"3"3"3 "3"3"3"3"3"3"3"3 "3"3"3"3"3"3"3"3 2.3 Thực thi đoạn chương trình nhớ (lệnh G, P, T) Cú pháp: G [=address] [addresses] Ý nghĩa: Thực thi đoạn chương trình nhớ địa [=address] đặt điểm dừng (breakpoints) tham số [addresses] Cú pháp: T [=address] [number] Ý nghĩa: Thực thi [number] lệnh địa [=address] dừng lại Cú pháp: P [=address] [number] Ý nghĩa: Tương tự lệnh T, nhiên lệnh gọi chương trình con, lệnh lặp, gọi ngắt xem lệnh thực thi qua bước Ví dụ: Nhập đoạn chương trình sau vào vùng nhớ bắt đầu địa 0B17:0100 thực thi Cho biết nội dung ghi AX,BX,CX sau thực thi xong chương trình MOV AX,516h MOV BX,1 XCHG BH,BL MOV CX, AX XCHG AL,BL Nhập địa 0B17:0100: -a 0b17:100 0B17:0100 MOV AX,516 0B17:0103 MOV BX,1 0B17:0106 XCHG BH,BL 0B17:0108 MOV CX,AX 0B17:010A XCHG AL,BL 0B17:010C Thực thi từ địa 0B17:0100 đến 0B17:010C -g=0b17:100 0b17:010C 11 AX=0500 BX=0116 DS=17E1 ES=17E1 0B17:010C 0000 CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=010C ADD [BX+SI],AL BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0116=00 Thực thi lệnh từ địa 0B17:0100 (5 lệnh) -t 0B17:0100 AX=0516 BX=0116 DS=17E1 ES=17E1 0B17:0103 BB0100 CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=0103 MOV BX,0001 BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC -t AX=0516 BX=0001 DS=17E1 ES=17E1 0B17:0106 86FB CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=0106 XCHG BH,BL BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC -t AX=0516 BX=0100 DS=17E1 ES=17E1 0B17:0108 89C1 CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=0108 MOV CX,AX BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC -t AX=0516 BX=0100 DS=17E1 ES=17E1 0B17:010A 86C3 CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=010A XCHG AL,BL BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC CX=0516 DX=0000 SP=FFEE SS=17E1 CS=0B17 IP=010C ADD [BX+SI],AL BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC -t AX=0500 BX=0116 DS=17E1 ES=17E1 0B17:010C 0000 - Bài tập: Nhập chương trình sau vào vùng nhớ CS:0100 thực thi jmp 126 db 0d,0a,"This is my first DEBUG program!" db 0d,0a,"$" mov ah,9 mov dx,102 int 21 int 20 Lưu ghi chương trình lên đĩa cứng với tên first.com Chạy thử windows Khởi động lại Debug nạp chương trình first.com vào để kiểm tra Hướng dẫn: Nhập chương trình địa 100h (Segment mặc định chứa CS) -A 100 CS:0100 CS:0102 CS:0123 CS:0126 CS:0128 CS:012B CS:012D CS:012F jmp 126 db 0d,0a,"This is my first DEBUG program!" db 0d,0a,"$" mov ah,9 mov dx,102 int 21 int 20 Xem lại chương trình từ địa 0100h đến 012Fh, lưu ý vùng nhớ vừa chứa chương trình vừa chứa liệu -u 100 012F CS:0100 EB24 CS:0102 0D0A54 CS:0105 68 JMP OR DB 0126 AX,540A 68 12 CS:0106 CS:0107 CS:0109 CS:010A CS:010C CS:010D CS:010F CS:0110 CS:0111 CS:0113 CS:0115 CS:0116 CS:0117 CS:0118 CS:0119 CS:011A CS:011D CS:011E CS:011F CS:0121 CS:0122 CS:0124 CS:0126 CS:0128 CS:012B CS:012D CS:012F 69 7320 69 7320 6D 7920 66 69 7273 7420 44 45 42 55 47 207072 6F 67 7261 6D 210D 0A24 B409 BA0201 CD21 CD21 0000 DB JNB DB JNB DB JNS DB DB JB JZ INC INC INC PUSH INC AND DB DB JB DB AND OR MOV MOV INT INT ADD 69 0129 69 012C 6D 012F 66 69 0186 0135 SP BP DX BP DI [BX+SI+72],DH 6F 67 0182 6D [DI],CX AH,[SI] AH,09 DX,0102 21 20 [BX+SI],AL Xem liệu từ địa 102h đến 125h, để mặc định Data Segment cần thay đổi ghi DS giá trị với nội dung ghi CS -r ds DS 17E1 : -d 102 125 DS:0100 0D 0A 54 68 69 73-20 69 73 20 6D 79 20 66 DS:0110 69 72 73 74 20 44 45 42-55 47 20 70 72 6F 67 72 DS:0120 61 6D 21 0D 0A 24 This is my f irst DEBUG progr am! $ Thực thi chương trình: -g=100 This is my first DEBUG program! Program terminated normally - Ghi vào file first.com -N C:\first.com -r bx BX 0000 : -r cx CX 0000 :2f -w 100 Writing 0002F bytes - Thoát chạy lại chương trình debug, nạp lại first.com lên nhớ -N C:\first.com -L 100 Xem nội dung vừa nạp: 13 -d 100 17F2:0100 17F2:0110 17F2:0120 17F2:0130 17F2:0140 17F2:0150 17F2:0160 17F2:0170 EB 69 61 00 00 00 00 00 24 72 6D 00 00 00 00 00 0D 73 21 00 00 00 00 00 0A 74 0D 00 00 00 00 00 54 20 0A 00 00 00 00 00 68 44 24 00 00 00 00 00 69 45 B4 00 00 00 00 00 73-20 42-55 09-BA 00-00 00-00 00-00 00-00 00-00 69 47 02 00 00 00 00 00 73 20 01 00 00 00 00 00 20 70 CD 00 00 00 00 00 6D 72 21 00 00 00 00 00 79 6F CD 00 00 00 00 00 20 67 20 00 00 00 00 00 66 72 00 00 00 00 00 00 $ This is my f irst DEBUG progr am! $ ! Thực thi thử: -g=100 This is my first DEBUG program! Program terminated normally - 14 ... 22 00 00 00 6C 6F 33 33 33 01 00 00 6F 48 22 22 22 D8-6C 00-00 00-00 48-65 65-6C 33 -22 33 -22 33 -22 6F 00 00 6C 6C 33 33 33 48 00 00 6C 6F 22 22 22 65 00 00 6F 48 33 33 33 6C 00 00 48 65 22 22 ... CS:011F CS:0 121 CS:0 122 CS:0 124 CS:0 126 CS:0 128 CS:012B CS:012D CS:012F 69 7 320 69 7 320 6D 7 920 66 69 727 3 7 420 44 45 42 55 47 20 70 72 6F 67 726 1 6D 21 0D 0A24 B409 BA 020 1 CD21 CD21 0000 DB JNB... 0B17:0 120 00 00 0B17:0130 6C 6F 0B17:0140 6F 48 0B17:0150 22 33 0B17:0160 22 33 0B17:0170 22 33 -d 0B17:0100 L8 0B17:0100 B8 00 05 00 00 48 65 22 22 22 BB 00 00 65 6C 33 33 33 16 00 00 6C 6C 22 22 22