sinner_blog

New Member

Download miễn phí Thực hành lập trình hợp ngữ - Hướng dẫn sử dụng công cụ debug





Xem và sửa nội dung các thanh ghi (lệnh R)
Cú pháp: R [register]
Ý nghĩa: Với tham số registerlà 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ịmới 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ũ.
Nếu không có tham số registerthì nội dung của tất cảcác thanh ghi sẽ được hiển thị



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

1
THỰC HÀNH LẬP TRÌNH HỢP NGỮ
HƯỚNG DẪN SỬ DỤNG CÔNG CỤ DEBUG
A-PDF Watermark DEMO: Purchase from www.A-PDF.com to remove the watermark
2
Bài 1: Giới thiệu công cụ debug
Debug là công cụ gỡ rối, cho phép nạp một file chương trình và thực thi từng bước, xem và sửa
nội dung vùng nhớ, thanh ghi, sector đĩa, nhập một đoạn 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ệ điều hành của Microsoft như MS-DOS, Windows 9x,
2000, XP, Vista. Tùy thuộc vào hệ điều hành nào mà file Debug.EXE nằm ở các vị trí đường dẫn
khác nhau. Trên hệ điều 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 (hay “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ử dụng chế độ dòng lệnh, người sử dụng gõ lệnh từ dấu nhắc con trỏ và xem
kết 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ợ:
Lệnh Ý nghĩa
A [address] assembe - nhập đoạn chương trình bằng mã
lệnh gợi nhớ
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
  • 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]
    [firstsector] [number]
    load – nạp nội dung file hay sector
    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]
    [firstsector] [number]
    write – ghi nội dung vùng nhớ lên file
    hay sector
    Lưu ý: Tham số ở trong cặp dấu [ ] là tùy chọn có hay 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: Với 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ị mới 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ũ.
    Nếu không có tham số register thì nội dung của tất cả các thanh ghi sẽ được hiển thị
    Ví dụ:
    Hiển thị nội 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:
    4
    Các thanh ghi đa dụng: AX,BX,CX,DX
    Các thanh ghi đoạn: 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ị dưới 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
    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ị nội 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 .
    CF PF AF ZF SF IF DF OF
    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."[email protected]
    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 ................
    Lệnh d không có tham số: hiển 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ớ bắt đầ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 một 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 hay là 1 chuỗi ký tự bao đóng trong 2 dấu
    nháy đơn hay kép.
    Ví dụ:
    Tìm chuỗi có giá trị “COM1” trong vùng nhớ từ 0000:0000 đến 0000:ffff :
    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.....
    Cũng có thể tìm theo chuỗi các giá trị byte như...
 
Các chủ đề có liên quan khác

Các chủ đề có liên quan khác

Top