Kiến trúc máy tính - Bài thực hành số 2

Nhập đoạn chương trình bằng mã gợi nhớ lệnh.

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