Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Giáo trình ngôn ngữ lập trình ASSEMBLY
Nội dung xem thử
Mô tả chi tiết
s ở GIÁO DỤC VÀ ĐÀO TẠO HÀ NỘ I
NGUYỄN THÀNH TRUNG
GIÁ O TRÌN H
NGÔN NGỮ LẬP TRÌNH
ASSEMBLY
(Dùng trong các trường THCN)
N H À XUẤT BẢN HÀ NỘ I - 2007
N H À XUẤT BẢN H À NÔI
4 - TỐNG DUY TÂN, QUẬN HOÀN KIẾM, HÀ NỘI
ĐT: (04) 8252916, 8286766, - FAX: (04) 9289143
GIÁO TRÌNH
NGÔN NGỮ LẬP TRÌNH ASSEMBLY
NHÀ XUẤT BẢN HÀ NỘI - 2007
Chịu trách nhiệm xuất bản:
NGUYỄN KHẮC OANH
Biên tập:
PHẠM QUỐC TUẤN
NGUYỄN THỊ THU HẰNG
Bìa:
TRẦN QUANG
Kỹ thuật vi tính:
HOÀNG THÚY LUÔNG
Sửa bàn in:
NGUYỄN THỊ THU HẰNG
In 500 cuốn, khổ 17x24cm, tại Nhà in Hà Nội - Công ty Sách Hà Nội. 67 Phó Đức
Chính - Ba Đình - Hà Nội. Quyết định xuất bản: 160-2007/CXB/446GT-27/HN, số
313/CXB ngày 02/3/2007. So in: 294/3. In xong và nộp lưu chiểu quý IU năm 2007.
L ờ i giớ i thiê u
A 7 ước ta đang bước vào thời kỳ công nghiệp hóa, hiện
Ì V đại hóa nhằm đưa Việt Nam trỏ thành nước công
nghiệp văn minh, hiện đại.
Trong sự nghiệp cách mạng to lớn đó, công tác đào tạo
nhân lực luôn giữ vai trò quan trọng. Báo cáo Chính trị của
Ban Chấp hành Trung ương Đãng Cộng sản Việt Nam tại
Đại hội Đáng toàn quốc lần thứ IX đã chỉ rõ: "Phát triển
giáo dục và đào tạo là một trong những động lực quan trọng
thúc đẩy sự nghiệp công nghiệp hóa, hiện đại hóa, là điều
kiện đẽ phát triển nguồn lực con người - yếu tô cơ bản đế
phát triển xã hội, tăng trường kinh tế nhanh và bền vững".
Quán triệt chủ trương, Nghị quyết của Đảng và Nhà nước
và nhận thức đúng đắn vé tầm quan trọng của chương trình,
giáo trình đối với việc nâng cao chất lượng đào tạo, theo đê
nghị của Sỏ Giáo dục và Đào tạo Hà Nội, ngày 23/9/2003,
Úy ban nhân dán thành phố Hà Nội đã ra Quyết định số
5620/QĐ-UB cho phép sỏ Giáo dục và Đào tạo thực hiện đề
án biên soạn chương trình, giáo trình trong các trường Trang
học chuyền nghiệp (THCN) Hà Nội. Quyết định này thể hiện
sự quan tâm sáu sắc của Thành ủy, UBND thành phố trong
việc nâng cao chất lượng đào tạo và phát triển nguồn nhún
lực Thủ đô.
Trên cơ sở chương trình khung của Bộ Giáo dục và Đào
tạo bơn hành và những kinh nghiệm rút ra từ thực tế đào tạo,
Sở Giáo dục và Đào tạo đã chỉ đạo các trường THON tổ chức
biên soạn chương trình, giáo trình một cách khoa học, hệ
3
thống và cập nhật những kiến thức thực tiễn phù hợp với đối
tượng học sinh THCN Hà Nội.
Bộ giáo trình này là lài liệu giáng dạy và học tập trong
các trường THCN ở Hà Nội, đồng thời là tài liệu tham kháo
hữu ích cho các trường có đào tạo các ngành kỹ thuật - nghiệp
vụ và đông đào bạn đọc quan tâm đến vấn đê hướng nghiệp,
dạy nghê.
Việc tổ chức biên soạn bộ chương trinh, giáo trình này
là một trong nhiều hoạt động thiết thực của ngành giáo dục
và đào tạo Thủ đô để kỷ niệm "50 năm giải phóng Thù đô ",
"50 năm thành lập ngành " và hướng tới kỷ niệm "1000 năm
Thăng Long - Hà Nội".
Sở Giáo dục và Đào tạo Hà Nội chân thành cảm ơn Thành
ủy, UBND, các sở, ban, ngành của Thành phố, Vụ Giáo dục
chuyên nghiệp Bộ Giáo dục và Đào tạo, các nhà khoa học, các
chuyên gia đầu ngành, các giáng viên, các nhà quán lý, các
nhà doanh nghiệp đã tạo điêu kiện giúp đỡ, đóng góp ý kiến,
tham gia Hội đồng phản biện, Hội đồng thẩm định và Hội
đổng nghiệm thu các chương trình, giáo trình.
Đây là lần đầu tiên Sở Giáo dục và Đào tạo Hà Nội tố
chức biên soạn chương trình, giáo trình. Dù đã hết sức cố
gắng nhưng chắc chắn không tránh khỏi thiếu sót, bất cập.
Chúng tôi mong nhận được những ý kiến dóng góp của bạn
đọc đế từng bước hoàn thiện bộ giáo trình trong các lần tái
bản sau.
GIÁM ĐỐC SỚ GIÁO DỤC VÀ ĐÀO TẠO
4
L ờ i nó i đ ẩ u
'gòn ngữ Assembly hay còn gụi là Hợp nqữ lù ngôn ngữ lập trình bậc
Ì V thấp các chí thi lệnh là cúc từ tiếng Anh dược viết tắt cho một hành
dộng nào dó. Các lệnh trong Hợp ngữ tương lác trực tiếp với các thanh ghi
hay các ô nhớ nằm trong phán cứng của hệ thống vi xử lý. Vì vậy, dể viết được
Hợp ngữ người lập trình phải có kiến thức vé phẩn cứng máy tính cũng như hệ
vi xử lý.
Ưu điểm cùa Hợp ngữ là cúc chương trình ứng dụng dược viết bằng ngôn
ngữ này thì tốc độ xử lý tãiiíỊ lên thêm mười đến hai mươi phẩn trăm, mà lại
chiếm ít bộ nhớ hơn các chương trình viết bằng ngôn ngữ bậc cao khác, bén
cạnh đó Hợp ngữ thích nghi một cách chính xác với các đặc điểm của từng hệ
thống máy tính và các thiết bị ngoại vi của nó. Tút cả các chức năng phần cứng
của thiết bị đêu có thể thực hiện dược bằng các chương trình viết bung Hợp
nục. Một ưu điểm nữa của nẹôn ngữ Hợp lì ạ ừ là có thê liên kết với ngôn ngữ
bậc cao khác như c, Pascal tạo ra sự tối ưu trong các chương trình sử dụng.
Ngày nay máy tính được sứ dụng ngày càng rộng rãi trong lĩnh vực đo
lường và diêu khiển tự dộng, trong dớ yêu cẩu về tốc độ, bộ nhớ được ấn định
trước bởi thiết bị thì việc sứ dụng Hợp ngữ là rất cẩn thiết.
Mối loại máy lính đêu có dạng Họp ngữ riêng và trình hợp dịch riêng gọi
lờ Assembler. Với máy tính PC- IDM có hai chương trình hợp dịch đó là
Macro Assembler (MASM) của hãng Microsoỷt và Turbo Assember (TASM)
của hãng Borland. Giữa hai chương trình này có sự khác nhau đôi chút, nhưng
về công dụng như nhau và tương thích với nhau. Trong giáo trình này sẽ đề
cập nhiều đến trình dịch hợp ngữ MASM cửa Microsoỷt, còn gọi là trình dịch
Macvo Assembler.
5
Đối tượng giáo trình này là sinh viên chuyên ngành kỹ thuật viên liu học
của các trường Trung học kỹ thuật và dạy nghề. Đế học (lược món này người
đọc Cấn có các kiến thức vé kỹ thuật vi xử lý. kiến trúc máy tính vù cũng dã
học qua ngôn ngữ lập trình Pascal. Nội dung chương trình dược chia làm bấn
chương với các nội dim% sau:
Chương l: Giới thiệu tóm tắt một số phần về bộ vi xử lý 8086, 8088 như
các loại dữ liệu, cấu trúc chung của các bộ vi xử lý 80x8, số lượng và công
dụng của các thanh ghi, khái niệm và tác dụng về ngắt, các kiểu định địa chi
cho các toán họng và khuôn dạng tệp lệnh.
Chương 2: Trình bày vê cú pháp của hợp li gí?, cách khai báo bộ nhớ. các
biến, các hằng và cấu trúc cơ bản của chương trình Assưìììh dơn giàn, các
bước lập trình cần thực hiện, cách sử dụng các cấu trúc cơ bản khi vào viết
Hợp ngữ, Phân biệt ý ưa hơi chương trình EXE và .COM.
Chương 3: Trình bày các phương pháp liên kết giữa ngôn ngữ bậc cao
Pascal với ngôn ngữ Assetnbly.
Chương 4: Các bài toán lập trình với số nguyên, lập trình cho các chuỗi
và thiết bị vào/ra.
Phụ lục: Giới thiệu các ngắt của DOS và BIOS gi úp người học tra cứu, sử
dụng trong các bài toán lập trình.
Tóm lại, giáo trình này nhầm giúp cho sinh viên các kiên thức cơ bàn vé
lập trình Hợp ngữ, đồng thời củng cố thêm các kiến thức đã dược học về phần
cứng máy tính, cũng như kỹ thuật vi xử lý nói chung.
6
Chươn g Ì
Tổ CHỨC CỦA BỘ VI XỬ LÝ 8086
ì. CÁC DẠNG Dữ LIỆU c ơ BẢN CỦA BỘ VI x ử LÝ
1. Dạng số và hệ đếm
Ngày nay chúng la thường dùng 10 chữ số 0, 1,2, 3, 4, 5, 6, 7, 8, 9 đổ biểu
diễn trong các phép tính toán và trao đổi trong công việc. Nó là hệ cơ số mười
hay nói gọn là hệ mười.
Trong máy tính thì khác. Máy tính được cấu tạo và liên kết bởi một hệ
thống các chất bán dẫn và các hệ mạch điện tử. Vì vậy mọi hoạt động của máy
trên hai trạng thái có điện và không có điện của các mạch điện tử. Do vậy để
biếu diễn một giá trị số chúng ta phải dùng hệ cơ số hai (Binary number system, viết tắt là hệ B). 0 và Ì cũng là giá trị có thể có của một chữ số hệ hai
(Binary digit, viết tắt là bít). Hệ hai là hệ đếm dùng trong các máy tính.
Một số hệ hai gồm một cụm 8 bít gọi là Byte, cụm 16 bít tạo thành một từ
là (Word), 32 bít tạo thành một từ kép (double vvord). Chữ số đầu tiên bên trái
trong dãy các số hệ hai gọi là bít có ý nghĩa lớn nhất (Most significant bít,
MSB), còn bít cuối cùng trong dãy hệ hai có ý nghĩa bé nhất (Least significant
bít, LSB).
Một số hệ mười viết như sau: 78342,56, sẽ có giá trị bằng tổng cùa các
tích 7, 8, 3, 4, 2, 5, 6 với các trọng số 10' tương ứng như sau:
78342,56 = 7xl04
+ 8x10-*+ 3xl02
+ 4X101
+ 2x10° + 5x10"'+ 6x10-2
Tương tự như vậy, một số hệ hai viết như sau: 10110,01, sẽ có giá trị bằng
tổng của các tích 1,0,1,1,0,0,1 với các trọng số 2' tương ứng như sau:
10110,01 = Ì X 24
+ 0 X 23
+ Ì X 22
+ Ì X 21
+ 0 X 2° + 0 X 2-' + Ì X 2-2
7
Giữa hệ mười và hệ hai còn tồn tại một hệ lai. hệ BCD cho các số hệ mười
mã hoa bằng hệ hai (Binary Coded Decimal number). rất thích hợp cho các
thiết bị đo cho phần hiển thị số ở đầu ra dùng các loại đèn hiện số khác nhau.
ở đây ta dùng 4 số hệ hai để mã hoa một số hệ mười có giá trị năm tron°
khoảng 0...9. Như vậy ờ đây ta không dùng hết các tổ hợp có thế có cùa 4 bít.
Vì tầm quan trọng cùa các sỏ BCD nên các bộ vi xử lý thưừng có các lệnh thao
tác với chúng.
Ví dụ: Số 840 nếu biểu diễn theo kiểu số BCD thì được 1000 0100 0000.
Kết quả này cũng gợi ý cho ta cách thức chuyến đổi giữa 2 loại sô.
Nếu ta dùng hệ hai để biểu diễn các số có giá trị lớn ta sẽ gặp điều bất tiện
là số hệ hai thu được quá dài. Ví dụ để biểu diễn số 255 ta cần đến 8 bít viết
như sau:
255 = li u li u B
Trong thực tế để viết kết quả biêu diễn cùa các số cho gọn lại người ta tìm
các nhóm 4 số hệ hai (Ì nibble) thành một số hệ mười sáu. Khác với hệ BCD
vừa nói, hệ 16 dùng hết các tổ hợp có thể của 4 bít để biểu diễn các giá trị số.
Để làm được điều này người ta sử dụng các chữ số sẵn có của hệ muôi 0...9
để biểu diễn các giá trị số ứng với 0...9 và dùng thêm các chữ cái A...F để biếu
diễn các giá trị còn lại ứng với 10...15. Đế phân biệt một số hệ mười sáu với
các số hệ khác ta kèm thêm chữ H ở cuối. Ta cũng dễ nhận thấy rằng số mười
chỉ là một bộ phận của hệ 16.
Hệ hai Hệ 16 Hệ hai Hệ 16
0000 0 1000 8
0001 1 1001 9
0010 2 1010 A
0011 3 l o n B
0100 4 1100 c
0101 5 noi D
0110 6 mo E
o m 7 n u F
8
2. Chuyền đổi giữa các hệ đêm
Đổi sỏ hệ mười sang hẹ hai
Quy tắc: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư. tiếp theo lá)
thương của phép chia trước đó chia cho 2 và ghi nhớ phần dư. Làm như vậy
cho tới khi được thương bằng 0. Đáo ngược thứ tự dãy các sỏ dư sẽ dược các
chữ số của hệ hai cần tìm.
Trong trường hợp số hệ mười cần đổi có thêm phán lé cho dâu phay thì đầu
tiên ta phải đổi rẽ từng phần rồi sau đó cộng các kết quá lại. Đỏi với phần
nguyên ta có thể làm theo 2 cách đã nói ở liên. Riêng đỏi với phần sau dấu
phay ta đổi theo quy tắc trình bày sau đây.
Lấy số cần đổi nhân với 2. tích nhận được sẽ gồm phần nguyên và phần lé
nhị phân. lấy phần lé nhị phân của tích thu được nhân liếp với 2. Làm như vậy
cho tới khi tích chẩn bằng 1. Chọn riêng các phần nguyên (phần trước dấu
phẩy) của các tích thu được và sắp xếp lại sẽ được các chữ sô sau dấu phẩy
của hệ hai cần tìm.
Ví dụ: Đổi 0,125 ra số hệ hai.
Ta thực hiện phép nhân lần lượt theo các bước trên:
0.125 X 2 0,250
0,250 X 2 0,500
0,500 X 2 1,000
và thu được kết quả là 0,125 = 0,001 B (phần được đóng trong khung).
Kết hợp các ví dụ trên lại, nếu phải đổi số 34,125 ra hệ hai ta thu được kết
quả cuối cùng là 34,125 = 100010,001 B.
Đổi sô hệ hai và hệ sô Hex:
Ví dụ: 2B3Ch đổi ra hệ hai
2 B 3 c
0010 lon 0011 1100
Đổi sô hệ thập phản và hệ sò Hex
Ví dụ: Đổi số 1978 ra hệ Hex
9
Đầu tiên chia 1978 cho 16 nhân được thương số 123 và số dư là 10
1978 = 123 X 16 + 10
số dư chính là hàng đơn vị của số biêu diễn dạng số Hex. 10 = Ah
Cứ liếp tục chia cho đến khi thương số bằng 0. Chuyển đổi các số dư
Hcx và ghép chúng lại với nhau theo thứ tự ngược lại.
1978 = 123 X 16 + 10(Ah) 1978 = 7BAh
123= 7xl6+ll(Bh )
7 = 0 X 16 + 7(7h)
3. Các phép tính vối số nhị phân và hệ Hexa
Sô nhị phân:
- Phép cộng:
0 + 0 = 0
0 +1 = 1
1+0= 1
1 + 1=0 dư Ì
Ví dụ:
no
+ 011
no phần dư
1001
- Phép trừ:
0-0 = 0
0-1 = 1 nợ Ì
1-0=1
1-1=0
Ví dụ:
no
-011
li phần nợ
011
10
Sô Hexa:
Bảng cộng số Hex
0 ỉ 2 3 4 5 6 7 8 9 A B c D li F
0 0 1 2 3 4 5 6 7 8 9 Ả B c D F. F
1 1 2 3 4 5 6 7 8 9 A B c D E F 10
2 2 3 4 5 6 7 8 9 A B c D E F lo n
3 3 4 5 6 7 8 9 A B c D E F 10 l i 12
4 4 5 6 7 8 9 A B c D E F 10 11 12 13
5 5 6 7 8 9 A B c D E F 10 l i 12 13 14
6 6 7 8 9 A B c D E F 10 l i 12 13 14 15
7 7 8 9 A B c D E F 10 l i 12 13 14 15 16
8 8 9 A B c D E F 10 l i 12 13 14 15 16 17
9 9 A B c D E F 10 l i 12 13 14 15 16 17 18
A A B c D E F 10 11 12 13 14 15 16 17 18 19
B B c D E F 10 l i 12 13 14 15 16 17 18 19 1A
c c D E F 10 l i 12 13 14 15 16 17 18 19 1A1B
D D E F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C
E E F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C1D
F F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C1D1E
Ví dụ: 5B39h
+ 7AF4h
D62Dh
Sử dụng bảng cộng ta có thê tra ra các phép trừ
Ví dụ: D26F
BA94
17DB
4. Dạng ký tự
Được lưu nữ theo dạng mã ASCII (American Standard Codc information
Intcrchangc) Mã chuẩn, mồi ký tự chiếm một byte. Máy tính không biết sì vé
ký lự ASCII mà chi xem chúng như là một byte bất kỳ. với một ngoại lệ.
Trong báng mã ASCII tiêu chuẩn người la dùng 7 bít để mã hoa các ký tự
thỏníi dụng. như vậy bảng mã này sẽ có 128 ký tự ứng với mã số từ 0-127. Khi
tra các bàng này ta đọc mã của ký tự theo thứ lự cột-hàng.
Bàng mã ASCII (American Standcưd Code inỊonnaiion Interchange -
Mã tiên chuẩn /rao dổi thỏm; liu)
Hexadeđmal
0 1 2 ì 4 5 6 7
0 <ML>
0
<DLE>
16
<SP>
32
0
48
@
64
p
80 96
p
112
ì <SOH>
1
<DC1>
17
t
33
1
49
A
65
Q
81
a
97
q
113
2 <srx>
2
<DC2>
18 34
2
50
b
66
R
82
b
98
r
114
3 <ETX>
3
<DC3>
19
#
35
3
51
c
67
s
83
c
99
s
115
4 <EOT>
4
<DC4>
20
$
36
4
52
D
68
T
84
d
100
t
116
5 <ENQ>
5
<NAK>
21
%
37
5
53
E
69
u
85
e
loi
u
117
6 <ACK>
6
<SYN>
22
&
38
6
54
F
70
V
86
f
102
V
118
7 <bel>
7
<etb>
23
í
39
7
55
G
71
w
87
g
103
w
119
8 <bs>
8
<CAN>
24
(
40
8
56
H
72
X
88
h
104
X
120
12