Tải bản đầy đủ (.pdf) (5 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (102.92 KB, 5 trang )

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
0B17:0103 BB1600
0B17:0106 01D8

MOV
MOV
ADD

AX,0500
BX,0016
AX,BX

Hoặc xem bắt đầu từ địa chỉ 0B17:0100 đến địa chỉ 0106 :
-u 0B17:100 106
0B17:0100 B80005
0B17:0103 BB1600
0B17:0106 01D8

MOV
MOV
ADD

AX,0500
BX,0016
AX,BX

Hoặc xem từ địa chỉ 0B17:0100:
-u 0B17:0100

0B17:0100 B80005
0B17:0103 BB1600
0B17:0106 01D8
0B17:0108 6C
0B17:0109 6F
0B17:010A 48
0B17:010B 65
0B17:010C 6C

MOV
MOV
ADD
DB
DB
DEC
DB
DB

AX,0500
BX,0016
AX,BX
6C
6F
AX
65
6C

10



0B17:010D
0B17:010E
0B17:010F
0B17:0110
0B17:0112
0B17:0114
0B17:0116
0B17:0118
0B17:011A
0B17:011C
0B17:011E

6C
6F
48
0000
0000
0000
0000
0000
0000
0000
0000

DB
DB
DEC
ADD
ADD
ADD

ADD
ADD
ADD
ADD
ADD

6C
6F
AX
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL
[BX+SI],AL

Xem dưới dạng mã nhị phân:
-d 0B17:0100
0B17:0100 B8 00
0B17:0110 00 00
0B17:0120 00 00
0B17:0130 6C 6F
0B17:0140 6F 48
0B17:0150 22 33
0B17:0160 22 33
0B17:0170 22 33
-d 0B17:0100 L8
0B17:0100 B8 00


05
00
00
48
65
22
22
22

BB
00
00
65
6C
33
33
33

16
00
00
6C
6C
22
22
22

00
00

00
6C
6F
33
33
33

01
00
00
6F
48
22
22
22

D8-6C
00-00
00-00
48-65
65-6C
33-22
33-22
33-22

6F
00
00
6C
6C

33
33
33

48
00
00
6C
6F
22
22
22

65
00
00
6F
48
33
33
33

6C
00
00
48
65
22
22
22


6C
00
00
65
6C
33
33
33

6F
00
00
6C
6C
22
22
22

48
00
00
6C
6F
33
33
33

05 BB 16 00 01 D8


........loHelloH
................
................
loHelloHelloHell
oHelloHelloHello
"3"3"3"3"3"3"3"3
"3"3"3"3"3"3"3"3
"3"3"3"3"3"3"3"3
........

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

11


AX=0500 BX=0116
DS=17E1 ES=17E1
0B17:010C 0000

CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=010C
ADD
[BX+SI],AL

BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC
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
DS=17E1 ES=17E1
0B17:0103 BB0100


CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=0103
MOV
BX,0001

BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC

-t
AX=0516 BX=0001
DS=17E1 ES=17E1
0B17:0106 86FB

CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=0106
XCHG
BH,BL

BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC

-t
AX=0516 BX=0100
DS=17E1 ES=17E1
0B17:0108 89C1

CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=0108
MOV
CX,AX


BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC

-t
AX=0516 BX=0100
DS=17E1 ES=17E1
0B17:010A 86C3

CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=010A
XCHG
AL,BL

BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC

CX=0516 DX=0000 SP=FFEE
SS=17E1 CS=0B17 IP=010C
ADD
[BX+SI],AL

BP=0000 SI=0000 DI=0000
NV UP EI PL NZ NA PO NC

-t
AX=0500 BX=0116
DS=17E1 ES=17E1
0B17:010C 0000
-


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
CS:0102
CS:0123
CS:0126
CS:0128
CS:012B
CS:012D
CS:012F

jmp 126
db 0d,0a,"This is my first DEBUG program!"
db 0d,0a,"$"
mov ah,9
mov dx,102
int 21

int 20

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
CS:0102 0D0A54
CS:0105 68

JMP
OR
DB

0126
AX,540A
68

12


CS:0106
CS:0107
CS:0109
CS:010A
CS:010C
CS:010D
CS:010F
CS:0110
CS:0111
CS:0113

CS:0115
CS:0116
CS:0117
CS:0118
CS:0119
CS:011A
CS:011D
CS:011E
CS:011F
CS:0121
CS:0122
CS:0124
CS:0126
CS:0128
CS:012B
CS:012D
CS:012F

69
7320
69
7320
6D
7920
66
69
7273
7420
44
45

42
55
47
207072
6F
67
7261
6D
210D
0A24
B409
BA0201
CD21
CD21
0000

DB
JNB
DB
JNB
DB
JNS
DB
DB
JB
JZ
INC
INC
INC
PUSH

INC
AND
DB
DB
JB
DB
AND
OR
MOV
MOV
INT
INT
ADD

69
0129
69
012C
6D
012F
66
69
0186
0135
SP
BP
DX
BP
DI
[BX+SI+72],DH

6F
67
0182
6D
[DI],CX
AH,[SI]
AH,09
DX,0102
21
20
[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
DS:0110 69 72 73 74 20 44 45 42-55 47 20 70 72 6F 67 72
DS:0120 61 6D 21 0D 0A 24

..This is my f
irst DEBUG progr
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:
13


-d 100
17F2:0100
17F2:0110
17F2:0120
17F2:0130
17F2:0140
17F2:0150

17F2:0160
17F2:0170

EB
69
61
00
00
00
00
00

24
72
6D
00
00
00
00
00

0D
73
21
00
00
00
00
00


0A
74
0D
00
00
00
00
00

54
20
0A
00
00
00
00
00

68
44
24
00
00
00
00
00

69
45
B4

00
00
00
00
00

73-20
42-55
09-BA
00-00
00-00
00-00
00-00
00-00

69
47
02
00
00
00
00
00

73
20
01
00
00
00

00
00

20
70
CD
00
00
00
00
00

6D
72
21
00
00
00
00
00

79
6F
CD
00
00
00
00
00


20
67
20
00
00
00
00
00

66
72
00
00
00
00
00
00

.$..This is my f
irst DEBUG progr
am!..$......!. .
................
................
................
................
................

Thực thi thử:
-g=100
This is my first DEBUG program!

Program terminated normally
-

14



×