Bài giảng Lập trình Hợp ngữ - Chương 3: Debug

Mục tiêu

Dịch được 1 chương trình ngắn

Xem các thanh ghi và cờ của CPU

Xem sự thay đổi nội dung của các biến

* Dò tìm trị ở dạng nhị phân hoặc ASCII trong bộ nhớ

Hỗ trợ luyện tập viết chương trình bằng Assembly

ppt30 trang | Chia sẻ: hienduc166 | Lượt xem: 1031 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Hợp ngữ - Chương 3: Debug, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
CHƯƠNG TRÌNH GỠ RỐI DEBUG Dịch được 1 chương trình ngắnMục tiêu Xem các thanh ghi và cờ của CPU Xem sự thay đổi nội dung của các biến Dò tìm trị ở dạng nhị phân hoặc ASCII trong bộ nhớ Hỗ trợ luyện tập viết chương trình bằng Assembly12/17/20201Chuong 3 DebugDạng lệnh của Debug Trong đó mã lệnh là 1 trong các chữ A,B,C,D,E, ... còn thông số thì thay đổi tùy theo lệnh.Các thông số có thể là :Địa chỉ : là 1 bộ địa chỉ đầy đủ segment : offset hay chỉ cần offset là đủ. Segment có thể dùng tên thanh ghi.Ex : F000:0100 DS: 200 0AF512/17/20202Chuong 3 DebugDạng lệnh của DebugTập tin : là 1 tham khảo tên tập tin đầy đủ, ít nhất phải có tên tập tin.Danh sách :Là 1 hay nhiều trị byte hoặc chuổi cách nhau bằng dấu phẩy.Khoảng : là 1 tham khảo đến vùng bộ nhớTrị : là 1 số hệ 16 có tối đa có 4 chữ số12/17/20203Chuong 3 DebugTập lệnh của DebugA :cho phép viết từ bàn phím các lệnh mã máy dưới dạng gợi nhớ.A [ ]Ex : - A 100 dịch ở địa chỉ CS:100h - A 	 dịch ở địa chỉ hiện tại (Debug lấy địa chỉ đoạn CS) - A DS:2000h  dịch ở địa chỉ DS:2000h	12/17/20204Chuong 3 DebugThí dụ minh họa lệnh APhải nhập lệnh vào theo từng dòng một và kết thúc bằng Enter.Kết thúc nhập nhấn Enter ở dòng trống.Ex : - A 1005514:0100 MOV AH, 25514:0102 MOV DL, 415514:0104 INT 21HSEGMENTOFFSETUser gỏ vào12/17/20205Chuong 3 DebugC (Compare)So sánh 2 vùng bộ nhớ và liệt kê các ô nhớ có nội dung khác nhau.Cú pháp : C , Ex : - C 100, 200, 3000 : 1000So sánh ô nhớ DS:100h với ô nhớ 3000:1000h, ô nhớ DS:101h với ô nhớ 3000:1001h.. Cho đến ô nhớ DS :200h với ô nhớ 3000:1100h. So sánh 101 bytes12/17/20206Chuong 3 DebugD (Dump)Hiện nội dung bộ nhớ theo dạng hệ 16 và ASCII.Cách gọi : D Ex : - D F000 : 0 - D ES : 100 - D 10012/17/20207Chuong 3 DebugLệnh F (Fill)Cú pháp : F Công dụng : lấp đầy trị vào vùng nhớ ngay tại địa chỉ mong muốn.Trị nhập vào từng byte một theo hệ 16Dấu trừ (-) dùng để lùi lại 1 địa chỉ.SPACE BAR dùng để tới 1 địa chỉ.ENTER để kết thúc.12/17/20208Chuong 3 DebugMinh họa lệnh F Lắp đầy vùng nhớ tại địa chỉ offset 100h chuổi “ Toi dua em sang song”.F 100 “TOI DUA EM SANG SONG”OFFSET 100H12/17/20209Chuong 3 DebugKẾT QUẢ-F 100 "TOI DUA EM SANG SONG"-D 1000ADD:0100 54 4F 49 20 44 55 41 20-45 4D 20 53 41 4E 47 20 TOI DUA EM SANG0ADD:0110 53 4F 4E 47 54 4F 49 20-44 55 41 20 45 4D 20 53 SONGTOI DUA EM S0ADD:0120 41 4E 47 20 53 4F 4E 47-54 4F 49 20 44 55 41 20 ANG SONGTOI DUA0ADD:0130 45 4D 20 53 41 4E 47 20-53 4F 4E 47 54 4F 49 20 EM SANG SONGTOI0ADD:0140 44 55 41 20 45 4D 20 53-41 4E 47 20 53 4F 4E 47 DUA EM SANG SONG0ADD:0150 54 4F 49 20 44 55 41 20-45 4D 20 53 41 4E 47 20 TOI DUA EM SANG0ADD:0160 53 4F 4E 47 54 4F 49 20-44 55 41 20 45 4D 20 53 SONGTOI DUA EM S0ADD:0170 41 4E 47 20 53 4F 4E 47-54 4F 49 20 44 55 41 20 ANG SONGTOI DUA12/17/202010Chuong 3 DebugD (DUMP)Mục đích : in nội dung bộ nhớ trong MT ra màn hình dưới dạng số hex.Cú pháp : D [ address] D [range]Ex : in nội dung vùng nhớ đã lắp đầy ở ví dụ trước ở địa chỉ 100hEx2 : xem nội dung vùng nhớ 16 bytes bắt đầu ở địa chỉ F000:100- D F000:100 L10 12/17/202011Chuong 3 DebugThí dụ minh họa lệnh D đánh vào lệnh D để xem nội dung vùng nhớ của 30h bytes bộ nhớ từ địa chỉ 0000:0040 đến 0000:006F- D 0000:0040 006FĐịa chỉ bắt đầu- D 0000:0040 L 30Số bytes 12/17/202012Chuong 3 DebugE (ENTER)Dùng để đưa dữ liệu byte vào bộ nhớ ngay tại địa chỉ mong muốn.Cách gọi :- E Trị nhập vào theo dạng số 16 từng byte mộtDấu - dùng để lùi lại 1 địa chỉSpace Bar dùng để tới 1 địa chỉEnter dùng để kết thúc12/17/202013Chuong 3 DebugMinh họa lệnh E Mục dích : thay đổi nội dung bộ nhớ.Cú pháp : - E [address] [ list]Ex : thay đổi 6 bytes bắt đầu ở địa chỉ 100 thành “ABCDE”- E 100 “ABCDE”Debug lấy đoạn chỉ bởi DS Nếu ta không qui định địa chỉ đoạn12/17/202014Chuong 3 DebugLệnh U (Unassemble) công dụng : in ra 32 bytes mã máy của chương trình trong bộ nhớ ra màn hình dưới lệnh gợi nhớ. cú pháp : U [address] U [range] Ex : U 100 119 In ra màn hình các lệnh mã máy từ địa chỉ CS:100 đến CS:11912/17/202015Chuong 3 DebugLệnh R (Register)Công dụng : xem và sửa nội dung thanh ghi.Cú pháp : - R enter (xem tất cả thanh ghi) xem thanh ghi AX : - R AX xem thanh ghi cờ : R FEx : muốn bật thanh ghi cờ CF và ZF ta nhập CY và ZR.12/17/202016Chuong 3 DebugLệnh N (Name)Công dụng : tạo tập tin cần đọc hay ghi trước khi dùng lệnh L hay W.Cú pháp : - N [ thông số] L [địa chỉ]12/17/202017Chuong 3 DebugThí dụ minh họa lệnh NEx : tạo tập tin Love.txt .Dùng lệnh R để xác định vùng địa chỉ dành cho User.Dùng lệnh để đưa câu thông báo “ I love you more than I can say’ ở địa chỉ 2000:100.Dùng lệnh D để kiểm tra vùng nhớ tại địa chỉ 2000:100.Dùng lệnh N để đặt tên tập tin trên đĩa.- N Love.txtDùng lệnh R để định số byte cần thiết ghi lên đĩa trong 2 thanh ghi BX và CX. Cụ thể trong trường hợp này số byte cần ghi là 1Eh byte.BX = 0000 CX = 1EDùng lệnh W 2000:100 để ghi dữ liệu đã nhập vào tập tin ở địa chỉ bộ nhớ 2000:100.12/17/202018Chuong 3 DebugThoát khỏi Debug và gọi lại tập tin theo cách sau :C :\> Debug Love.txttìm xem Debug đã nạp tập tin Love.txt vào chỗ nào trong bộ nhớ.12/17/202019Chuong 3 DebugLệnh W (Write)Cú pháp : W [address]Thường được sử dụng chung với lệnh NEx : tạo tập tin có tên Love.txt Bước 1 : dùng lệnh E để đưa câu ‘I love you more than I can say” vào ô nhớ ở địa chỉ 100.Bước 2 : dùng lệnh D để kiểm tra lại địa chỉ 100Bước 3 : dùng lệnh N để đặt tên tập tin : - N Love.txtBước 4 : dùng lệnh R để định số byte cần ghi lên đĩa trong 2 thanh ghi BX và CX. (BX chứa 16 bit cao, CX chứa 16 bit thấp).Ơû đây số byte cần ghi là 1Eh.Bước 5 : dùng lệnh W để ghi câu trên đã nhập vào vùng nhớ có địa chỉ bắt đầu là 100.12/17/202020Chuong 3 DebugLệnh T (Trace)và P cú pháp : - T [= ][số lần]Mục đích : dùng để chạy 1 hay nhiều lần các lệnh trong bộ nhớEx : - T = 3000:1000Ex : - T = 3000:1000 12/17/202021Chuong 3 DebugLệnh L (Load) nạp tập tin hoặc nạp sector luận lý từ đĩa vào bộ nhớ.Cú pháp : - L [ ]Dạng 1 : nếu chỉ có địa chỉ dùng để nạp tập tin. Tên tập tin phải được gán trước bằng lệnh N.Tập tin luôn luôn được gán ở địa chỉ offset 100hDạng 2 : nếu có đầy đủ các thông số , dùng để đọc sector luận lý trên đĩa vào bộ nhớ.Đĩa : = 0 ổ đĩa A, =1 ổ đĩa B, =2 ổ đĩa C . 12/17/202022Chuong 3 DebugLệnh H (Hex Arithmethic) thực hiện phép cộng và trừ hệ 16Cú pháp : - H Kết quả : hiện ra tổng và hiệu của trị 1 và trị 212/17/202023Chuong 3 DebugLệnh S (Search)Công dụng : tìm kiếm trị trong 1 vùng bộ nhớ.Cú pháp : - S Giải thích : tìm kiếm trị có hiện diện trong vùng bộ nhớ đã chỉ định hay không? Nếu có Debug hiện các địa chỉ đầu của những nơi có chứa danh sách.Ex : - S 100 L 1000 ‘DOS’ 18AF : 0154 18AF : 0823Ex2 : - S 2000 2200 13,15,8A, 812/17/202024Chuong 3 DebugLệnh M (Move)Công dụng : chép nội dung vùng nhớ đến 1 địa chỉ khác. Cú pháp : - M Ex : - M 100 105 200Chép 5 bytes từ DS:100 đến DS:200Ex2 : - M CS:100 L 50 ES:300 Chép 50 bytes từ CS:100 đến ES:300 12/17/202025Chuong 3 DebugLệnh I (Input)Công dụng : nhập 1 byte từ cổng xuất nhập và hiện ra màn hình.Cú pháp : - I địa chỉ cổng là số hệ 16 tối đa 4 chữ số.Ex : - I 37E EC12/17/202026Chuong 3 DebugLệnh O (Output)Công dụng : xuất 1 byte ra cổng xuất nhập.Cú pháp :- O  địa chỉ cổng là số hệ 16 tối đa 4 chữ số.Ex : - O 378 5E12/17/202027Chuong 3 DebugSummaryDùng lệnh D để xem nội dung vùng nhớ tại địa chỉ của ROM BIOS F000:0000.Tương tự xem nội dung vùng nhớ RAM màn hình ở địa chỉ B800:0000; bảng vector ngắt quãng 0000:0000Gỏ vào máy bằng lệnh A, đoạn chương trình sau ở địa chỉ 2000:010012/17/202028Chuong 3 DebugSummary2000:0100	MOV AL,322000:0102	MOV AH, 4F2000:0104	MOV CX, [200]2000:0108	MOV WORD PTR [1800], 12000:010E	MOV BYTE PTR [1800], 12000:0113Xem lại đoạn chương trình vừa đánh trên bằng lệnh U. Chú ý quan sát phần mã máy. Tìm xem các toán hạng tức thời và các địa chỉ xuất hiện ở đâu trong phần mã máy của lệnh.Phần mã máy của 2 câu lệnh cuối có gì khác nhaukhi dùng các toán tử WORD PTR và BYTE PTR.12/17/202029Chuong 3 DebugSummaryDùng lệnh E nhập vào đoạn văn bản sau vào bộ nhớ tại địa chỉ DS:01008086/8088/80286 Assembly language.Copyright 1988, 1886 by Brady Books, a division of Simon, Inc.All right reserved, including the of reproduction in whole or in part, in any form.(chú ý ký tự đầu dòng xuống dòng có mã ASCCI là 0D và 0A). 12/17/202030Chuong 3 Debug

File đính kèm:

  • pptChuong_03_debug.ppt