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.
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
-