Chương 2 Lập trình với Debug 2.1 Tổng quan về Debug

Một phần của tài liệu Giáo trình assembly pot (Trang 30 - 32)

- US E: chỉ có từ thế hệ 80386 và chỉ được dùng với chỉ dẫn hướng 386 use16 ASM 16 bit (default): Độ dài đoạn cực đại là 64Kbyte

Chương 2 Lập trình với Debug 2.1 Tổng quan về Debug

2.1. Tổng quan về Debug

2.1.1. Đặc điểm của Debug

Debug là một chương trình chạy trong môi trường DOS. Nó dùng để cho người lập trình có thể:

• nhập và dịch các lệnh dạng hợp ngữ sang mã máy và ngược lại

• nạp, xem và thay đổi nội dung của tệp ở trong khối nhớ

• chạy chương trình theo từng lệnh, nhóm lệnh hay cả chương trình

• sửa từng byte, nhiều byte hay cả chương trình

• xem và thay đổi nội dung các thanh ghi

Các lệnh của debug đều bắt đầu bằng một hay hai chữ cái, trong đó có một dấu ?

2.1.2. Khởi động và thoát khỏi Debug

Khởi động Debug tại dấu nhắc của DOS ta gõ lệnh: Debug [ổ đĩa][đường dẫn][tên tệp]

Trong đó các tham số đi đằng sau lệnh Debug dùng để chỉ ra tên tệp .EXE hay .COM để kiểm tra.

Sau khi khởi động Debug thì màn hình lúc này còn một dấu nhắc là dấu gạch ngang nhỏ "_". Tại đây ta gõ các lệnh của Debug để thực hiện kết thúc lệnh là ENTER và muốn thoát khỏi Delbug ta gõ lệnh q (quit).

2.2. Các lệnh của Debug

2.2.1. Nhóm các lệnh biên soạn chương trình1) Lệnh A 1) Lệnh A

Cú pháp: A [address]

Thông số address: là một số hexa gồm 4 chữ số để chỉ địa chỉ bắt đầu các lệnh dạng hợp ngữ của chương trình. Địa chỉ có thể là CS:Offset hay chỉ có địa chỉ Offset vì ngầm định là CS hiện hành. Nếu không có tham số address thì lấy địa chỉ CS:Offset hiện hành mà lệnh trước dùng tại đó.

Công dụng: Lệnh cho ta nhập các lệnh của chương trình dạng hợp ngữ vào một địa chỉ ô nhớ.

Ví dụ: A 200 hay A 0200

Khi đó màn hình sẽ hiện ra địa chỉ ô nhớ xxxx:0200 để ta gõ lệnh vào địa chỉ trên, ví dụ ta gõ lệnh MOV AX, 09 (các giá trị trong Debug đều ở dạng hexa

nên ta không cần đưa thêm ký tự h đằng sau giá trị đó. Nếu có nó sẽ báo lỗi). Sau khi nhấn Enter thì dòng lệnh được:

• dịch ra mã máy

• ghi vào ô nhớ có địa chỉ trên

• màn hình hiện ra địa chỉ tiếp theo để chờ nhập lệnh tiếp theo Cứ tiếp tục như vậy ta có thể nhập được cả chương trình

2) Lệnh E

Cú pháp: E <address> [list]

Thông số address là một số hexa gồm bốn chữ số để chỉ địa chỉ bắt đầu để xem hay sửa đổi dữ liệu. Địa chỉ có thể là CS:Offset hay chỉ là Offset vì ngầm định là CS hiện hành.

Thông số list là danh sách các dữ liệu mà ta muốn nhập vào các ô nhớ liên tiếp. Nếu là một xâu ký tự thì tâ phải đặt trong hai dấu nháy kép "" hay hai dấu nháy đơn ''.

Công dụng: Dùng để xem và sửa nội dung của từng ô nhớ. Ta chỉ cần chỉ ra địa chỉ đầu tiên của ô nhớ và khi đó nó sẽ hiện ra nội dung của ô nhớ đầu tiên, nếu ta muốn sửa dữ liệu của ô nhớ thì ta cứ việc nhập dữ liệu mới bên cạnh dữ liệu cũ, sau đó nhấn dấu cách để xem nội dung của ô nhớ tiếp theo. Kết thúc lệnh này là dấu Enter.

3) Lệnh F

Cú pháp: F range list (adsbygoogle = window.adsbygoogle || []).push({});

Thông số range xác định một vùng nhớ, có thể là địa chỉ bắt đầu và địa chỉ kết thúc hay địa chỉ bắt đầu và chiều dài của vùng nhớ.

thông số list chỉ danh sách các dữ liệu muốn lấp đầy vùng nhớ range

Công dụng: Lấp đầy các ô nhớ bằng một danh sách các dữ liệu. Lệnh này có thể thay cho lệnh E để nhập đồng thời nhiều dữ liệu cùng một lúc.

Ví dụ: F 0100 L 100 41 42 43

Lệnh này sẽ ghi đầy các ô nhớ từ 0100 đến 01FF (100 địa chỉ) bằng các con số 41, 42, 43. Ba giá trị này sẽ lặp lại cho đến khi toàn bộ các ô nhớ được lấp đầy giá trị.

Ví dụ 2: F 0100 0120 41 42

Lệnh này sẽ lấp đầy các ô nhớ trong vùng từ 0100 đến 0120 (21 ô nhớ) bởi các giá trị 41, 42.

4) Lệnh U

Thông số range xác định địa chỉ đầu và địa chỉ cuối hay địa chỉ đầu và chiều dài ô nhớ.

Công dụng: Có thể nói lệnh này trái ngược với lệnh A, nó dịch ngược các lệnh từ mã máy sang lệnh dạng assembly trong các ô nhớ được chỉ ra vùng range hay địa chỉ IP hiện hành.

Ví dụ:

U 0100 : Dịch ngược 32 byte đầu tiên từ địa chỉ 0100

U CS:0100 110 : Dịch ngược dữ liệu từ địa chỉ CS:0100 tới CS: 110 U 0100 L 20 : Dịch ngược 20 dòng lệnh bắt đầu từ địa chỉ 0100

2.2.2. Nhóm các lệnh dịch chuyển dữ liệu1) Lệnh I 1) Lệnh I

Một phần của tài liệu Giáo trình assembly pot (Trang 30 - 32)