You are on page 1of 95

Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

Lời nói đầu


Kiến trúc máy tính là môn học chuyên môn trong nghề Quản trị mạng, nó đóng vai trò
quan trọng cho bất cứ học viên nào khi bước vào chuyên môn của nghề. Đây là môn học khó,
đòi hỏi người học tập trung nghiên cứu, học tập với nỗ lực cao. Để hỗ trợ các học viên trong
quá trình học tập môn Kiến trúc máy tính chúng tôi đã tập hợp các tài liệu và biên soạn cuốn
tài liệu về môn Kiến trúc máy tính.
Tài liệu bao gồm có 12 chương trong đó có 9 chương về phần kiến trúc của máy tính còn
3 chương cuối giới thiệu về ngôn ngữ ASM, một ngôn ngữ hệ thống chuyên dùng để lập trình
với các thiết bị phần cứng trong máy tính. Tài liệu sẽ cung cấp cho các bạn các thông tin từ
lịch sử phát triển máy tính đến các thành phần, kiến trúc máy tính và trong tài liệu cũng đề
cập các cách tổ chức bộ vi xử lý, các cấp bộ nhớ cũng như các thiết bị nhập xuất với cách
nhìn tổng quan nhất. Tài liệu sẽ rất hữu ích khi chúng ta nghiên cứu về máy tính cũng như
hoạt động của nó, từ đó sẽ có các kiến thức cơ bản để có thể phân tích hoạt động của một hệ
thống máy tính trên các cơ sở kiến thức chuyên môn. Đây sẽ là những hành trang quan trọng
giúp cho các bạn học tập các môn tiếp theo trong nghề Quản trị mạng gặp thuận lợi hơn và
đặc biệt nếu thêm phần sáng tạo và linh hoạt của bạn thì bạn có thể vận dụng các kiến thức về
kiến trúc máy tính vào việc sử dụng máy tính hàng ngày.
Với sự cố gắng của các giáo viên trong khoa công nghệ thông tin tuy nhiên không tránh
khỏi những sai xót mong quý thầy cô đồng nghiệp và các anh chị học viên đóng góp ý kiến
để tài liệu này ngày càng hoàn thiện, để đến với các anh chị học viên một cuốn tài liệu ngày
càng hay hơn hữu ích hơn.

Khoa Công nghệ thông tin


Tháng 06 / 2012

Giáo trình Kiến trúc máy tính 1


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
MỤC LỤC
Lời nói đầu………………………………………………………………………………....01
Mục lục………………………………………………………………………………………02

CHƯƠNG 1: LỊCH SỬ PHÁT TRIỂN CỦA MÁY TÍNH


1. Các thế hệ máy tính……………………………………………………………..04
2. Phân loại máy tính……………………………………………………………..06
3. Thành tựu của máy tính………………………………………………………..08
CHƯƠNG 2: THÔNG TIN VÀ SỰ MÃ HÓA THÔNG TIN
1. Khái niệm thông tin……………………………………………………………09
2. Lượng thông tin và sự mã hóa thông tin………………………………………09
3. Biểu diễn các số……………………………………………………………….10
4. Số nguyên có dấu……………………………………………………………...14
5. Biểu diễn các số thập phân…………………………………………………….14
6. Biểu diễn kí tự…………………………………………………………………15
CHƯƠNG 3: THÀNH PHẦN CƠ BẢN CỦA MỘT MÁY TÍNH
1. Bộ xử lý trung tâm ( CPU – Central Processing Unit)………………………...16
2. Bo mạch chủ ( Mainboard)…………………………………………………….17
3. Bộ nhớ trong…………………………………………………………………...19
4. Thiết bị lưu trữ…………………………………………………………………20
5. Thiết bị nhập xuất………………………………………………………………21
CHƯƠNG 4: KIẾN TRÚC PHẦN MỀM CỦA BỘ XỬ LÝ
1. Định nghĩa kiến trúc máy tính………………………………………………….22
2. Các kiểu thi hành của một lệnh………………………………………………...22
3. Tập lệnh………………………………………………………………………...24
4. Các kiểu định vị………………………………………………………………...29
5. Kiểu của toán hạng……………………………………………………………..30
CHƯƠNG 5: KIẾN TRÚC RISC
1. Giới thiệu kiến trúc RISC……………………………………………………...31
2. Các kiểu định vị trong bộ vi xử lý RISC………………………………………33
CHƯƠNG 6: TỔ CHỨC BÔ VI XỬ LÝ
1. Đường đi của dữ liệu…………………………………………………………...35
2. Bộ điều khiển…………………………………………………………………...35
3. Ngắt…………………………………………………………………………….37
4. Tiến trình thi hành một lệnh mã máy…………………………………………..40
CHƯƠNG 7: KỸ THUẬT ỐNG DẪN
1. Ống dẫn…………………………………………………………………….…..42
2. Khó khăn trong kĩ thuật ống dẫn………………………………………….……43
3. Siêu ống dẫn……………………………………………………………………45
CHƯƠNG 8: BỘ NHỚ
1. Các loại bộ nhớ…………………………………………………………………47
2. Các cấp bộ nhớ…………………………………………………………………49
3. Truy cập dữ liệu trong bộ nhớ trong…………………………………………....50
4. Bộ nhớ CACHE………………………………………………………………...50
CHƯƠNG 9: THIẾT BỊ NHẬP XUẤT
1. Các thiết bị lưu trữ……………………………………………………………..56
Giáo trình Kiến trúc máy tính 2
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
2. Giao tiếp giữa bộ xử lý và bộ nhớ trong………………………………………59
3. Giao tiếp giữa bộ xử lý và các bộ phận vào ra………………………………...62
CHƯƠNG 10: CƠ BẢN VỀ ASSEMBLY
1. Các khái niệm…………………………………………………………………65
2. Cấu trúc chung của một chương trình…………………………………………67
3. Biến và khai báo biến………………………………………………………….68
4. Toán tử………………………………………………………………………...70
5. Một số hàm của ngắt 21h……………………………………………………...71
6. Các chế độ địa chỉ……………………………………………………………..72
CHƯƠNG 11: CÁC LỆNH ĐIỀU KHIỂN
1. Các lệnh cơ bản………………………………………………………………..75
2. Lệnh nhập và xuất……………………………………………………………...76
3. Lệnh logic, dịch và quay……………………………………………………….78
4. Lệnh lặp và rẽ nhánh…………………………………………………………...81
5. Lệnh nhân và chia………………………………………………………………87
CHƯƠNG 12: NGĂN XẾP VÀ CHƯƠNG TRÌNH CON
1.Ngăn xếp…………………………………………………………………………89
2. Chương trình con………………………………………………………………..92

Tài liệu tham khảo………………………………………………………………………….95

Giáo trình Kiến trúc máy tính 3


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
1. CHƯƠNG 1: LỊCH SỬ PHÁT TRIỂN CỦA MÁY TÍNH
Mục tiêu:
- Trình bày được sơ lược lịch sử phát triển của máy tính
- Phân loại được các loại máy tính
- Trình bày được các thành tựu của máy tính.
1. CÁC THẾ HỆ MÁY TÍNH
Sự phát triển của máy tính được mô tả dựa trên sự tiến bộ của các công nghệ chế tạo
các linh kiện cơ bản của máy tính như: bộ xử lý, bộ nhớ, các thiết bị ngoại vi…Ta có thể nói
máy tính điện tử số trải qua bốn thế hệ liên tiếp. Việc chuyển từ thế hệ trước sang thế hệ sau được
đặc trưng bằng một sự thay đổi cơ bản về công nghệ.

1.1 THẾ HỆ ĐẦU TIÊN (1946-1957)


ENIAC (Electronic Numerical Integrator and Computer) là máy tính điện tử số đầu
tiên do Giáo sư Mauchly và người học trò Eckert tại Đại học Pennsylvania thiết kế vào năm
1943 và được hoàn thành vào năm 1946.
Đây là một máy tính khổng lồ với thể tích dài 20 mét, cao 2.8 mét và rộng vài mét.
ENIAC bao gồm: 18.000 đèn điện tử, 1.500 công tắc tự động, cân nặng 30 tấn và tiêu thụ
140KW giờ. Có khả năng thực hiện 5.000 phép toán cộng trong một giây. Công việc lập trình
bằng tay bằng cách đấu nối các đầu cắm điện và dùng các ngắt điện.
Giáo sư toán học John Von Neumann đã đưa ra ý tưởng thiết kế máy tính IAS
(Princeton Institute for Advanced Studies): chương trình được lưu trong bộ nhớ, bộ điều
khiển sẽ lấy lệnh và biến đổi giá trị của dữ liệu trong phần bộ nhớ, bộ số học và logic (ALU:
Arithmetic And Logic Unit) được điều khiển để tính toán trên dữ liệu nhị phân, điều khiển
hoạt động của các thiết bị vào ra. Đây là một ý tưởng nền tảng cho các máy tính hiện đại
ngày nay. Máy tính này còn được gọi là máy tính Von Neuman.
Vào những năm đầu của thập niên 50, những máy tính thương mại đầu tiên được đưa
ra thị trường: 48 hệ máy UNIVAC I và 19 hệ máy IBM 701 đã được bán ra.

1.2 THẾ HỆ THỨ HAI: (1958-1964)


Công ty Bell đã phát minh ra transistor vào năm 1947 và do đó thế hệ thứ hai của máy
tính được đặc trưng bằng sự thay thế các đèn điện tử bằng các transistor lưỡng cực. Tuy
nhiên, đến cuối thập niên 50, máy tính thương mại dùng transistor mới xuất hiện trên thị
trường. Kích thước máy tính giảm, rẻ tiền hơn, tiêu tốn năng lượng ít hơn. Vào thời điểm
này, mạch in và bộ nhớ bằng xuyến từ được dùng. Ngôn ngữ cấp cao xuất hiện (như
FORTRAN năm 1956, COBOL năm 1959, ALGOL năm 1960) và hệ điều hành kiểu tuần tự

Giáo trình Kiến trúc máy tính 4


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
(Batch Processing) được dùng. Trong hệ điều hành này, chương trình của người dùng thứ
nhất được chạy, xong đến chương trình của người dùng thứ hai và cứ thế tiếp tục.

1.3. THẾ HỆ THỨ BA: (1965-1971)


Thế hệ thứ ba được đánh dấu bằng sự xuất hiện của các mạch kết (mạch tích hợp - IC:
Integrated Circuit). Các mạch kết độ tích hợp mật độ thấp (SSI: Small Scale Integration) có
thể chứa vài chục linh kiện và kết độ tích hợp mật độ trung bình (MSI: Medium Scale
Integration) chứa hàng trăm linh kiện trên mạch tích hợp.
- Tính tương thích cao: Các máy tính trong cùng một họ có khả năng chạy các chương
trình, phần mềm của nhau.
- Đặc tính đa chương trình: Tại một thời điểm có thể có vài chương trình nằm trong bộ
nhớ và một trong số đó được cho chạy trong khi các chương trình khác chờ hoàn thành các
thao tác vào/ra…
- Không gian địa chỉ rất lớn.

1.4. THẾ HỆ THỨ TƯ: (1972-)


Thế hệ thứ tư được đánh dấu bằng các IC có mật độ tích hợp cao (LSI: Large Scale
Integration) có thể chứa hàng ngàn linh kiện. Các IC mật độ tích hợp rất cao (VLSI: Very
Large Scale Integration) có thể chứa hơn 10 ngàn linh kiện trên mạch. Hiện nay các chip
VLSI chứa hàng triệu linh kiện.
Với sự xuất hiện của bộ vi xử lý (microprocessor) chứa cả phần thực hiện và phần
điều khiển của một bộ xử lý, sự phát triển của công nghệ bán dẫn các máy vi tính đã được
chế tạo và khởi đầu cho các thế hệ máy tính cá nhân.
Các bộ nhớ bán dẫn, bộ nhớ cache, bộ nhớ ảo được dùng rộng rãi.
Các kỹ thuật cải tiến tốc độ xử lý của máy tính không ngừng được phát triển: kỹ thuật ống
dẫn, kỹ thuật vô hướng, xử lý song song mức độ cao…

1.5. KHUYNH HƯỚNG HIỆN ĐẠI


Việc chuyển từ thế hệ thứ tư sang thế hệ thứ 5 còn chưa rõ ràng. Người Nhật đã và
đang đi tiên phong trong các chương trình nghiên cứu để cho ra đời thế hệ thứ 5 của máy
tính, thế hệ của những máy tính thông minh, dựa trên các ngôn ngữ trí tuệ nhân tạo như LISP
và PROLOG... và những giao diện người - máy thông minh.
Đến thời điểm này, các nghiên cứu đã cho ra các sản phẩm bước đầu và gần đây nhất
(2004) là sự ra mắt sản phẩm người máy thông minh gần giống với con người nhất: ASIMO
(Advanced Step Innovative Mobility: Bước chân tiên tiến của đổi mới và chuyển động). Với

Giáo trình Kiến trúc máy tính 5


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
hàng trăm nghìn máy móc điện tử tối tân đặt trong cơ thể, ASIMO có thể lên/xuống cầu
thang một cách uyển chuyển, nhận diện người, các cử chỉ hành động, giọng nói và đáp ứng
một số mệnh lệnh của con người. Thậm chí, nó có thể bắt chước cử động, gọi tên người và
cung cấp thông tin ngay sau khi bạn hỏi, rất gần gũi và thân thiện.
Hiện nay có nhiều công ty, viện nghiên cứu của Nhật thuê Asimo tiếp khách và hướng
dẫn khách tham quan như: Viện Bảo tàng Khoa học năng lượng và Đổi mới quốc gia, hãng
IBM Nhật Bản, Công ty điện lực Tokyo. Hãng Honda bắt đầu nghiên cứu ASIMO từ năm
1986 dựa vào nguyên lý chuyển động bằng hai chân. Cho tới nay, hãng đã chế tạo được rất
nhiều robot ASIMO.
Các tiến bộ liên tục về mật độ tích hợp trong VLSI đã cho phép thực hiện các mạch vi xử
lý ngày càng mạnh (8 bit, 16 bit, 32 bit và 64 bit với việc xuất hiện các bộ xử lý RISC năm
1986 và các bộ xử lý siêu vô hướng năm 1990). Chính các bộ xử lý này giúp thực hiện các
máy tính song song với từ vài bộ xử lý đến vài ngàn bộ xử lý. Điều này làm các chuyên gia
về kiến trúc máy tính tiên đoán thế hệ thứ 5 là thế hệ các máy tính xử lý song song.

2. PHÂN LOẠI MÁY TÍNH


Thông thường máy tính được phân loại theo tính năng kỹ thuật và giá tiền.

2.1. DỰA VÀO KÍCH THƯỚC VẬT LÝ, HIỆU SUẤT VÀ LĨNH VỰC SỬ DỤNG : hiện
nay người ta thường chia máy tính số thế hệ thứ tư thành 5 loại chính, các loại có thể trùm
lên nhau một phần:
- Các siêu máy tính (Super Computer): là máy tính vượt trội trong khả năng và tốc độ
xử lý, là các máy tính đắt tiền nhất và tính năng kỹ thuật cao nhất. Giá bán một siêu máy tính
từ vài triệu USD. Các siêu máy tính thường là các máy tính vectơ hay các máy tính dùng kỹ
thuật vô hướng và được thiết kế để tính toán khoa học, mô phỏng các hiện tượng. Các siêu
máy tính được thiết kế với kỹ thuật xử lý song song với rất nhiều bộ xử lý (hàng ngàn đến
hàng trăm ngàn bộ xử lý trong một siêu máy tính).
- Các máy tính lớn (Mainframe) là loại máy tính đa dụng. Nó có thể dùng cho các ứng
dụng quản lý cũng như các tính toán khoa học. Dùng kỹ thuật xử lý song song và có hệ
thống vào ra mạnh. Giá một máy tính lớn có thể từ vài trăm ngàn USD đến hàng triệu USD.
- Máy tính mini (Minicomputer) là loại máy cỡ trung, giá một máy tính mini có thể từ vài
chục USD đến vài trăm ngàn USD.
- Máy vi tính (Microcomputer) là loại máy tính dùng bộ vi xử lý, giá một máy vi tính có
thể từ vài trăm USD đến vài ngàn USD.

Giáo trình Kiến trúc máy tính 6


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
2.2. DỰA VÀO KIẾN TRÚC CỦA MÁY TÍNH : người ta cũng phân máy tính ra các
loại khác nhau như sau:

- Kiến trúc SISD (single instruction - single data, đơn dòng lệnh - đơn dòng dữ liệu),
sơ đồ như hình 1.1 Các tín hiệu điều khiển

Khối điều khiển Khối chấp hành

lệnh dữ liệu

Hệ thống nhớ

- Kiến trúc CIMD (Single Instruction Multiple Data, đơn dòng lệnh- đa dữ liệu), sơ
đồ như hình 1.2
Các tín hiệu điều khiển

Khối điều khiển Khối chấp hành 1 Khối chấp hành 2 Khối chấp hành n

lệnh

Hệ thống nhớ

Hình 1.2: Kiến trúc SIMD


- Kiến trúc MIMD (Multiple Instruction Multiple Data, đa dòng lệnh- đa dữ liệu), sơ
đồ như hình 1.3 Các tín hiệu điều khiển

Khối điều khiển 1 Khối chấp hành 1 Khối điều khiển n Khối chấp hành n

lệnh dữ liệu lệnh dữ liệu

Hệ thống nhớ

Giáo trình Kiến trúc máy tính 7


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
3. THÀNH TỰU CỦA MÁY TÍNH
3.1. TRONG NGÀNH KHOA HỌC MÁY TÍNH
Đã định nghĩa được một cách chính thức về tính toán và khả năng tính toán, đồng thời
đưa ra bằng chứng rằng có những vấn đề bất khả tính toán và những vẫn đề rất khó tính toán.
Đã đưa ra khái niệm về ngôn ngữ lập trình (Ngôn ngữ lập trình là một hệ thống được ký
hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy
đều có thể đọc và hiểu được) một dụng cụ dùng để biểu đạt thông tin đã được trật tự hóa một cách
chính xác trong nhiều tầng lớp trừu tượng khác nhau.

3.2. ỨNG DỤNG BÊN NGOÀI


+ Làm mồi lửa cho cuộc cách mạng kỹ thuật số là cái dẫn đến thời đại thông tin.
+ Trong mật mã học (là một lĩnh vực liên quan với các kỹ thuật ngôn ngữ và toán học để
đảm bảo an toàn thông tin, cụ thể là trong thông tin liên lạc) sự phá mã của máy Enigma là
một đóng góp quan trọng trong chiến thắng của quân Đồng minh trong Đại Chiến Thế Giới
lần thứ II.

3.3 TÍNH TOÁN KHOA HỌC


Cho phép việc nghiên cứu bộ não con người, đồ thị hóa cấu hình của GEN như Đề án
tổ hợp gen ở mức độ uyên thâm, đề án khám phá quá trình gấp cuộn của chất đạm.

Giáo trình Kiến trúc máy tính 8


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 2: THÔNG TIN VÀ SỰ MÃ HÓA THÔNG TIN
Mục tiêu:
- Trình bày được khái niệm về thông tin
- Biến đổi được cơ bản của hệ thống số, các bảng mã thông dụng được dùng để biểu diễn
các ký tự
1. KHÁI NIỆM THÔNG TIN
1.1. KHÁI NIỆM
- Thông tin là sự hiểu biết của con người về một sự kiện, một hiện tượng nào đó thu
nhận được qua nghiên cứu trao đổi, nhận xét, học tập truyền thụ và cảm nhận.
- Theo nghĩa thông thường là tất cả các sự việc, sự kiện ý tưởng phán đoán tăng thêm
sự hiểu biết của con người.
- Xử lý thông tin là quá trình biến đổi thông tin thành một dạng thể mới sao cho phù
hợp với mục đích sử dụng của con người. Để xử lý 1 thông tin đưa ra kết quả thỏa mãn 2
điều kiện:
Dữ liệu
Máy tính Kết quả
Chương trình
1.2.CÁC DẠNG THÔNG TIN
- Thông tin dạng hình ảnh
- Thông tin dạng âm thanh
- Thông tin dạng văn bản

2. LƯỢNG THÔNG TIN VÀ SỰ MÃ HÓA THÔNG TIN

2.1. LƯỢNG THÔNG TIN


Mỗi sự vật hay sự kiện đều hàm chứa một lượng thông tin. Muốn nhận biết một đối
tượng nào đó, ta phải biết đủ lượng thông tin về nó. Đơn vị cơ bản đo lượng thông tin là bít.
Ví dụ: Xét việc tung ngẫu nhiên đồng xu có hai mặt hoàn toàn cân xứng với khả năng xuất
hiện của mỗi mặt là như nhau. Nếu kí hiệu của một mặt đồng xu là 1 và mặt kia là 0 thì sự
xuất hiện kí hiệu 1 hay 0 sau khi tung đồng xu cho ta một lượng thông tin là 1 bít.
Trong tin học, thuật ngữ bít thường dùng để chỉ phần nhỏ nhất của bộ nhớ máy tính để
lưu trữ một trong hai kí hiệu, được sử dụng để biểu diễn thông tin trong máy tính, là 0 và 1.
Ngoài đơn vị bít nêu trên, đơn vị đo thông tin thường dùng là byte (đọc là bai): 1byte = 8bit.
Người ta còn dùng các đơn vị bội của byte như bảng dưới đây:

Giáo trình Kiến trúc máy tính 9


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Kí hiệu Đọc là Độ lớn
KB Ki – lô - bai 1024 byte
MB Mê – ga - bai 1024 KB
GB Gi – ga - bai 1024 MB
TB Tê – ra - bai 1024 GB
PB Pê – ta - bai 1024 TB

2.2. MÃ HÓA THÔNG TIN


- Muốn máy tính xử lý được, thông tin phải được biến đổi thành một dãy bít. Cách
biến đổi như vậy được gọi là một cách mã hóa thông tin.
- Mã hóa kí tự
+ Bộ mã ASCII (American Standard Code of Information Interchange): sử dụng 8 bít
để mã hóa kí tự.
Các kí tự được đánh số từ 1-255 và các số hiệu này được gọi là mã ASCII thập phân
của kí tự. Bộ mã ASCII chỉ mã hóa được 256 kí tự (28) chưa đủ để mã hóa tất cả các bảng
chữ cái của các ngôn ngữ trên thế giới. Do đó với bảng mã này việc trao đổi thông tin trên
toàn cầu còn khóa khăn. Bởi vậy, người ta đã xây dựng bộ mã UNICODE.
+ Bộ mã UNICODE: Ta có thể mã hóa được 65536 (= 216) kí tự khác nhau, cho phép
thể hiện trong máy tính văn bản của tất cả các ngôn ngữ trên thế giới bằng một bộ mã. Hiện
nay, nước ta đã chính thức sử dụng bộ mã Unicode như một bộ mã chung để thể hiện các văn
bản hành chính.
Để con người có thể biết thông tin được lưu trữ trong máy, máy tính phải biến đổi
thông tin đã mã hóa thành dạng quen thuộc như văn bản, âm thanh hoặc hình ảnh.

3. BIỂU DIỄN SỐ

3.1. HỆ ĐẾM
Là hệ mà các số được dùng hay các kí hiệu được dùng để biểu diễn các giá trị trong hệ
đếm đó. Một hệ đếm B có b kí hiệu để biểu diễn các giá trị từ 0->(b-1).
Ví dụ: - Hệ đếm 2 (hệ nhị phân) có 2 kí hiệu là: 0,1
- Hệ đếm 10 (hệ thập phân)có 10 kí hiệu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- Hệ đếm 8 (hệ bát phân) có 8 kí hiệu là: 0, 1, 2, 3, 4, 5, 6, 7
- Hệ đếm 16 (hệ hexa hay hệ thập lục) có 16 kí hiệu: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E, F biểu diễn 16 kí hiệu từ 0 đến 15. Trong đó A, B, C, D, E, F có giá trị
tương ứng là 10, 11, 12, 13, 14, 15 trong hệ thập phân.
Giáo trình Kiến trúc máy tính 10
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
3.2. BIỂU DIỄN SỐ NGUYÊN KHÔNG DẤU

Tất cả các số cũng như các mã... trong máy vi tính đều được biểu diễn bằng các chữ số
nhị phân. Một máy tính được chủ yếu cấu tạo bằng các mạch điện tử có hai trạng thái.
Vậy (703)10 = (2BF)16

3.2.1. Cách đổi 1 số từ hệ b sang hệ 10


Giả sử số ở hệ b là (aoa1a2….an)b, n là số ở hệ 10.
Ta có n = ao. bn + a1. bn-1 + a2. bn-2 + a3. bn-3 +…+ an. bo
Ví dụ: Đổi (1101)2 sang hệ 10
N = 1.23 + 1.2 2 + 0.21 + 1.2o = 8 + 4 + 0 + 1 = 13
- Đổi số (2BF)16 sang hệ 10
N = 2. 16 2 + 11. 16 1 + 15. 16 0 = 2.256 + 11.16 + 15 = 512 + 176 + 15 = 703

3.2.2. Cách đổi từ hệ thập phân (hệ 10) sang hệ b (b có thể là: hệ 2, hệ 8, hệ 16)
Giả sử ta biến đổi số n là số cần biến đổi từ hệ 10 sang hệ b (n có phần nguyên n1 và
phần thập phân là n2).
Tách số n thành 2 phần: phần nguyên và phần thập phân riêng để biến đổi.

- Thực hiện phép biến đổi phần nguyên sang số ở hệ đếm b


Bước 1. Chia nguyên n1 cho b: kết quả được thương nguyên n1’ và dư a1
Bước 2. Nếu thương nguyên n1’ > 0 lặp lại bước 1 thực hiện phép chia guyên thu
được phần dư tương ứng là a2. Cứ tiếp tục thực hiện phép chia nguyên cho đến khi phần
thương nguyên bằng 0 thì dừng, phần dư thu được tương ứng là an .
Ghi lại các giá trị phần dư theo thứ tự ngược lại đã nhận được thì chúng ta được kết quả: anan-
1..a2a1. (n là số lần thực hiện phép chia)

- Thực hiện phép đổi phần thập phân


Thực hiện phép nhân phần lẻ n2 với b ta thu được tích giữ phần nguyên là b1 và lấy phần lẻ
tiếp tục nhân với b.
Ví dụ: Đổi 1 số từ hệ 10 sang hệ 2 (hệ nhị phân)
Chúng ta tiến hành chia số đó cho 2 sau đó lấy phần dư theo chiều từ dưới lên trên, ta
sẽ được kết quả.

Giáo trình Kiến trúc máy tính 11


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Đổi số 23 sang hệ nhị phân (hệ 2)
Số dư

23/2 = 1 1
1
11/1 = 5 1
2
= 2 1
5/2

0
= 1
2/2
= 0 1

1/2
=> Kết quả sau khi biến đổi: (23)2 = (10111)2

- Thực hiện phép biến đổi phần nguyên sang hệ 2


3.2.3. Thực hiện phép đổi phần thập phân sang hệ 2

0.375 x 2 = 0.75
= 1.5
0.75 x 2
= 1.0
0.5 x 2

=> Kết quả sau khi biến đổi phần thập phân: (.375)10 = (.011)2

Vậy: (23.375)10 = (10111.011)2


Ví dụ: Đổi 1 số từ hệ 10 sang hệ 16 (hệ thập lục phân)
- Đổi số 703 ở hệ 10 sang hệ 16
Số dư
703/16 = 43 15
11
43/16 = 2 2

= 0
2/16
Giáo trình Kiến trúc máy tính 12
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Bảng chuyển đổi một số giá trị các hệ
Hệ 10 Hệ 2 Hệ 8 Hệ 16
1 01 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

* Cách chuyển đổi biểu diễn giữa hệ 2 và hệ hexa

Hệ nhị phân và hệ hexa là hai hệ đếm thường dùng trong tin học. Vì 16 là lũy thừa của
2 (16 = 24) nên việc chuyển đổi biểu diễn số giữa hai hệ đếm đó được thực hiện dễ dàng. Để
chuyển đổi biểu diễn số từ hệ nhị phân sang hệ hexa ta áp dụng quy tắc sau: Gộp các chữ số
nhị phân thành từng nhóm bốn chữ số về hai phía kể từ vị trí phân cách phần nguyên và phần
thập phân (các chữ số nếu thiếu có thể thay thế bằng chữ số 0). Thay mỗi nhóm bôn chữ số
nhị phân bằng một ký hiệu ở hệ hexa tương ứng ở hệ hexa.

Ví dụ: 1011100101,112 = (?)16

Gộp thành từng nhóm bốn chữ số nhị phân: 0010 1110 0101, 11002

Thay mỗi nhóm bốn chữ số nhị phân bởi một ký hiệu tương ứng: 2, E, 5, C

Từ đó ta có: 1011100101,112 = 2E5,C16

Để chuyển đổi biểu diễn số ở hệ hexa sang hệ nhị phân ta chỉ cần thay từng ký hiệu ở
hệ hexa bằng nhóm bốn chữ số tương ứng ở hệ nhị phân. Ví dụ: 3, D7EF16 = 0011, 1101
0111 1110 11112
Giáo trình Kiến trúc máy tính 13
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
4. SỐ NGUYÊN CÓ DẤU
Có nhiều cách để biểu diễn một số n bit có dấu. Trong tất cả mọi cách thì bit cao nhất
luôn tượng trưng cho dấu.
Người ta sử dụng bit cao nhất biểu diễn dấu; bit dấu có giá trị 0 tương ứng với số
nguyên dương, bit dấu có giá trị 1 biểu diễn số âm.
- Để biểu diễn một số âm ta sử dụng mã bù 2
Giả sử để biểu diễn số -a (với a>0) ta có số nguyên dương a = (aoa1a2….an)2 thì để biểu
diễn giá trị của –a ta đi tìm mã bù 2 của số a biểu diễn ở dạng nhị phân. Mã bù 2 của dãy
(aoa1a2….an)2 chính là biểu diễn của số (- a).

* Quy tắc tìm mã bù 2


Bước 1. Thực hiện lập bít: đổi bít 1 thành bít 0 và bít 0 thành bít 1
Bước 2. Cộng thêm 1 vào số vừa tìm trên ta được số mới là mã bù 2
Ví dụ: Cho số (3885)10 = (0000111100101101)2. Tìm mã bù 2 của số trên
Giải: Bước 1. Thực hiện đổi bít 1 thành 0 và 0 thành 1 ta được: (1111000011010010)2
Bước 2. Thực hiện cộng thêm 1:
1111000011010010
+ 1
111100001101001 1
(111100001101001 1)2 chính là mã bù 2 của dãy biểu diễn của số (-3885)

5. BIỂU DIỄN CÁC SỐ THẬP PHÂN


Một vài ứng dụng, đặc biệt ứng dụng quản lý, bắt buộc các phép tính thập phân phải
chính xác, không làm tròn số. Với một số bit cố định, ta không thể đổi một cách chính xác số
nhị phân thành số thập phân và ngược lại. Vì vậy, khi cần phải dùng số thập phân, ta dùng cách
biểu diễn số thập phân mã bằng nhị phân (BCD: BinaryCoded Decimal) theo đó mỗi số thập phân
được mã với 4 số nhị phân
Để biểu diễn số BCD có dấu, người ta thêm số 0 trước một số dương cần tính, ta có số
âm của số BCD bằng cách lấy bù 10 số cần tính
Ví dụ: Biểu diễn số 09710 bằng số BCD: 0000 0111 1001
Bù 9 1001 0010 0000
+1
Bù 10 1001 0010 0001
Vậy, ta có: Số - 07910 trong cách biểu diễn số BCD: 1001 0010 0001BCD

Giáo trình Kiến trúc máy tính 14


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Cách tính toán trên tương đương với cách sau:
- Trước hết ta lấy số bù 9 của số 079 bằng cách: 999 - 079 = 920
- Cộng 1 vào số bù 9 ta được số bù 10: 920 + 1 = 921
- Biểu diễn số 921 dưới dạng số BCD, ta có: 1001 0010 0001

6. BIỂU DIỄN KÝ TỰ
Đơn vị cơ sở của dữ liệu văn bản là chữ, chữ được hiểu theo nghĩa rộng không chỉ là
chữ cái lating mà là cả chữ số các dấu chính tả các dấu có ngoặc và cả các kí hiệu trình bày
mỗi chữ đó được gọi là kí tự (character).
Với ý nghĩa là 1 kí hiệu dùng trong văn bản có những kí tự nhìn thấy được và có
những kí tự không nhìn thấy. Người ta sử dụng 1byte = 8 bit để biểu diễn kí tự. Bảng mã sử
dụng thông dụng nhất là ASCII (American Standard for Code Internation).
Có 256 kí tự tương ứng từ 0-255 mỗi mã bằng số kí tự trong bảng mã kí tự.

VÍ DỤ MỘT SỐ KÍ TỰ ASCII

Hệ 2 Hệ 10 Hệ 16 Đồ hoạ

010 0000 32 20 Khoảng trống (␠)

011 0001 49 31 1

011 0010 50 32 2

011 0011 51 33 3

100 0001 65 41 A

100 0010 66 42 B

100 0011 67 43 C

100 0100 68 44 D

Giáo trình Kiến trúc máy tính 15


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 3. THÀNH PHẦN CƠ BẢN CỦA MỘT MÁY TÍNH
Mục tiêu:
- Trình bày được các thành phần cơ bản của một máy tính
- Trình bày được chức năng của các thiết bị.
Thành phần cơ bản của máy tính gồm:
1. Bộ xử lý trung tâm (central processing unit, CPU)
2. Bộ nhớ trong (memory) như RAM, ROM
3. Thiết bị lưu trữ (Bộ nhớ ngoài)
4. Thiết bị nhập/xuất

Bộ nhớ ngoài

Bộ xử lý trung tâm (CPU)

Bộ điều khiển(CU) Bộ số học/logic(ALU)

Bộ nhớ trong
Thiết bị nhập Thiết bị xuất

Hình 3.1: .Sơ đồ các thành phần cơ bản của máy tính
Bốn khối chức năng đầu liên hệ với nhau thông qua tập các đường dây để truyền tín
hiệu, gọi chung là bus hệ thống.
1. BỘ XỬ LÝ TRUNG TÂM (CPU - Central Processing Unit)
CPU là một mạch tích hợp phức tạp gồm hàng triệu transitor trên một bảng mạch nhỏ.
CPU có nhiều kiểu dáng khác nhau. Ở hình thức đơn giản nhất, CPU là một con chip với vài
chục chân. Phức tạp hơn, CPU được ráp sẵn trong các bộ mạch với hàng trăm con chip khác.
Tốc độ xử lý của máy tính phụ thuộc vào tần số đồng hồ làm việc của CPU (tính bằng MHz,
GHz, …) nhưng nó cũng phụ thuộc vào các phần khác như bộ nhớ đệm, RAM hay bo mạch
đồ họa.
Hai nhà sản xuất CPU lớn hiện nay là Intel và AMD. CPU của AMD thường có giá rẻ
hơn Intel để thu hút khách hàng nhưng thị phần của AMD vẫn thấp hơn nhiều so với Intel.
- Bộ xử lý trung tâm gồm có hai phần:

Giáo trình Kiến trúc máy tính 16


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
+ Bộ số học – logic (ALU: Arithmetic And Logic Unit): Đây là đơn vị thực hiện
các xử lý các phép tính số và logic, các thao tác xử lý thông tin đều là tổ hợp của các phép
toán này.
+ Bộ điều khiển (CU: Control Unit): Là đơn vị có chức năng đảm bảo cho máy tính
thực hiện đúng theo chương trình đã quy định. Bộ điều khiển phải điều phối đồng bộ hóa tất cả các
thiết bị của máy để phục vụ yêu cầu xử lý do chương trình quy định.
Ngoài hai bộ phận chính nêu trên, CPU còn có thêm một số thành phần khác như
thanh ghi (Register) và bộ nhớ truy cập nhanh (Cache).
- CPU đảm nhận thực hiện chức năng cơ bản của máy tính là thực thi chương trình.
(Chương trình được thực thi gồm một dãy các chỉ thị được lưu trữ trong bộ nhớ). Quá trình
thực thi chương trình gồm hai bước: CPU đọc chỉ thị từ bộ nhớ và thực thi chỉ thị đó. Việc thực thi
chương trình là sự lặp đi lặp lại quá trình lấy chỉ thị và thực thi chỉ thị.

Hình 3.2: Một số loại CPU

2. BO MẠCH CHỦ (Mainboard)


Bo mạch chủ của máy tính trong tiếng anh là motherboard hay mainboard và thường
được nhiều người gọi tắt là: main.

2.1. CÁC THIẾT BỊ THƯỜNG CÓ TRÊN BO MẠCH CHỦ


Trong các thiết bị điện tử Bo mạch chủ là một bản mạch đóng vai trò là trung gian giao
tiếp giữa các thiết bị với nhau. Một cách tổng quát, nó là mạch điện chính của một hệ thống
hay thiết bị điện tử. Có rất nhiều các thiết bị gắn trên bo mạch chủ theo cách trực tiếp có mặt trên nó,
thông qua các kết nối cắm vào hoặc dây dẫn liên kết.
Chipset cầu bắc cùng với chipset cầu nam sẽ quyết định sự tương thích của bo mạch
chủ đối với các CPU và đôi khi là hiệu năng của bo mạch chủ.
Giáo trình Kiến trúc máy tính 17
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
BIOS: Thiết bị vào/ra cơ sở, rất quan trọng trong mỗi bo mạch chủ, chúng chứa thiết
đặt các thông số làm việc của hệ thống. BIOS có thể được liên kết hàn dán trực tiếp vào bo
mạch chủ hoặc có thể được cắm trên một đế cắm để có thể tháo rời.
Các linh kiện, thiết bị khác: Hầu hết còn lại là linh kiện điện tử (giống như các linh
kiện điện tử trong các bo mạch điện tử thông thường)

2.1.1. Kết nối với bo mạch chủ


Nguồn máy tính: Không thể thiếu trong hệ thống, nguồn máy tính cung cấp năng
lượng cho hệ thống và các thiết bị ngoại vi hoạt động.
CPU: Thường được cắm vào bo mạch chủ thông qua các đế cắm (socket) riêng biệt
tuỳ theo từng loại CPU (dùng từ "cắm" chỉ là tương đối bởi các đế cắm hiện nay sử dụng tiếp
xúc)
RAM: Rất quan trọng trong hệ thống máy tính, RAM được cắm trên bo mạch chủ
thông qua các khe cắm riêng cho từng thể loại.
Bo mạch đồ hoạ: Sử dụng tăng tốc đồ hoạ máy tính, một số bo mạch chủ có thể
không sử dụng đến bo mạch đồ hoạ bởi chúng được tích hợp sẵn trên bo mạch chủ.
Bo mạch âm thanh: Mở rộng các tính năng âm thanh trên máy tính, một số bo mạch
chủ đã được tích hợp sẵn bo mạch âm thanh.
Ổ cứng: Không thể thiếu trong hệ thống máy tính cá nhân. Một số máy tính tuân theo
chuẩn PC nhưng sử dụng trong công nghiệp có thể không sử dụng đến ổ cứng truyền thống,
chúng được sử dụng các loại ổ flash.
Ổ CD, ổ DVD: Các ổ đĩa quang.
Ổ đĩa mềm: Hiện nay các máy tính cá nhân thường không cần thiết đến chúng, tuy
nhiên trong một số hệ thống cũ ổ đĩa mềm vẫn tồn tại thường dùng để sao lưu hay nâng
cấp BIOS.
Màn hình máy tính: Phục vụ giao tiếp giữa máy tính với người sử dụng
Bàn phím máy tính: Sử dụng nhập dữ liệu và làm việc với máy tính
Chuột (máy tính): Phục vụ điều khiển và làm việc với máy tính.
Bo mạch mạng: Sử dụng kết nối với mạng. Bo mạch mạng có thể được tích hợp sẵn
trên bo mạch chủ hoặc được cắm vào các khe PCI hoặc ISA (với các hệ thống máy tính cũ
trước kia).
Modem: Sử dụng kết nối với Internet hoặc một máy tính từ xa.

Giáo trình Kiến trúc máy tính 18


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Loa máy tính: Xuất âm thanh ra loa máy tính; Thiết bị này kết nối trực tiếp với các
bo mạch chủ được tích hợp bo mạch âm thanh trên nó. Trong trường hợp khác nó kết nối
thông qua giao tiếp USB hoặc bo mạch âm thanh rời.
Webcam: Sử dụng cho tán ngẫu trực tuyến, hội họp trực tuyến...
Máy in: Dùng trích xuất văn bản, hình ảnh ra giấy.
Máy quét: Sử dụng số hoá các bức ảnh hoặc văn bản.

2.1.2. Thiết bị khác liên quan


Vỏ máy tính là thiết bị mà bo mạch chủ cần lắp đặt trong nó cùng với các thiết bị
khác (ở trên) cấu thành nên một máy tính hoàn chỉnh. Tuy nhiên đôi khi một số overlocker có
thể không cần sử dụng đến thiết bị này nhằm tạo ra hệ thống máy tính dể dàng cho việc tháo
lắp, thay đổi và thuận tiện cho việc làm mát.

2.2. CẤU TẠO BẢN MẠCH IN CỦA BO MẠCH CHỦ


Đa số các bản mạch in ở các mạch điện đơn giản đều có cấu tạo hai mặt (mặt trước và
mặt sau) để chứa các đường dẫn trên nó. Do có rất nhiều các đường dẫn hoạt động với tần số
khác nhau nên (theo quy tắc chung) bản mạch phải được thiết kế với các đường dẫn không
gây nhiễu sang nhau, đây là một điểm khác biệt khiến việc thiết kế bản mạch của bo mạch
chủ khác với các bo mạch thông thường.
Ở bo mạch chủ, do chứa nhiều linh kiện với các đường dẫn lớn nên chúng được thiết kế
từ 3 đến 5 lớp (thậm trí nhiều hơn): Ngoài hai lớp mặt trước và mặt sau thì ở giữa của bo
mạch cũng có các đường dẫn.
Ngoài tác dụng để cắm và dán các linh kiện trên bề mặt nó, bo mạch chủ còn
được thiết kế để truyền một phần nhiệt từ các thiết bị toả nhiệt trên nó và truyền nhiệt
ra một diện tích rộng để được làm mát bằng không khí. ASUS là một hãng phần cứng
của Đài Loan thường rất thành công trong việc thiết kế tản nhiệt ra bản mạch của bo
mạch chủ.

3. BỘ NHỚ TRONG

- Đây là một tập hợp các ô nhớ, mỗi ô nhớ có một số bit nhất định và chức một
thông tin được mã hoá thành số nhị phân mà không quan tâm đến kiểu của dữ liệu mà
nó đang chứa.
- Các thông tin này là các lệnh hay số liệu.
- Mỗi ô nhớ của bộ nhớ trong đều có một địa chỉ. Thời gian thâm nhập vào một ô
nhớ bất kỳ trong bộ nhớ là như nhau.
Giáo trình Kiến trúc máy tính 19
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
- Bộ nhớ trong dùng để chứa chương trình và dữ liệu khi máy đang hoạt động, nó
gắn liền với CPU để CPU có thể làm việc được ngay. Bộ nhớ trong hiện nay thường
được xây dựng với hai loại vi mạch nhớ cơ bản là:
+ ROM (Read Only Memory):
- Chứa dữ liệu và chương trình cố định, điều khiển máy tính khi mới bật máy, trong
ROM người sử dụng chỉ có thể đọc thông tin ra.
- Thông tin trong ROM không bị mất khi tắt máy.
- Người sử dụng không thể thay đổi nội dung của ROM, còn việc ghi thông tin vào
ROM là công việc của các chuyên gia kỹ thuật, của hãng sản xuất.
- Các chương trình trên ROM thường được gọi là BIOS (Basic Input Output System):
hệ thống nhập xuất cơ sở.
+ RAM(Random Access Memory):
- Lưu các chương trình, dữ liệu của người sử dụng khi máy đang hoạt động,
- Dữ liệu, chương trình có thể ghi vào và đọc ra dễ dàng
- Khi mất nguồn điện hoặc tắt máy thì thông tin trong RAM cũng mất luôn.

- Dung lượng (khả năng lưu trữ) của RAM ảnh hưởng rất lớn đến tốc độ hoạt động
của máy tính, máy càng có nhiều bộ nhớ hơn, khả năng xử lý nhiều chương trình cùng một
lúc càng tốt hơn. Dung lượng bộ nhớ thường được dùng với các đơn vị megabytes (MB) và
gigabytes (GB); một megabyte khoảng một triệu byte và một gigabyte khoảng một tỉ byte.
Dung lượng của RAM thường dùng hiện nay là từ 128 MB đến 1 GB.

Trên thị trường hiện tại có nhiều loại bộ nhớ: DIMM, SIMM, RIMM, RDRAM, SDRAM,
DDR1, DDR2, DDR3 … Nếu cần nâng cấp bộ nhớ, hãy xem xét kĩ tính tương thích của bộ
nhớ với máy tính mình đang dùng.
- Đánh giá bộ nhớ thông qua 3 tính năng sau:
+ Tốc độ truy cập
+ Sức chứa của bộ nhớ
+ Độ tin cậy

4. THIẾT BỊ LƯU TRỮ


Dữ liệu trong RAM chỉ tồn tại khi máy tính đang hoạt động, còn dữ liệu ghi ở bộ nhớ
ngoài có thể tồn tại ngay cả khi tắt máy (không còn nguồn điện).
Bộ nhớ ngoài của máy tính thường là: đĩa cứng, đĩa mềm, đĩa CD, thiết bị nhớ flash.
Giáo trình Kiến trúc máy tính 20
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Để truy cập dữ liệu trên đĩa, máy tính có các ổ đĩa mềm, ổ đĩa cứng, ổ đĩa CD…
- Đĩa cứng: Thường được gắn sẵn trong ổ đĩa cứng. Đĩa cứng có dung lượng lớn và tốc độ
đọc/ghi rất nhanh.
- Đĩa mềm: có đường kính 3,5 inch với dung lượng 1,44MB.
- Thiết bị nhớ flash: là thiết bị lưu trữ dữ liệu có dung lượng lớn với kích thước nhỏ gọn
và dễ sử dụng. Trong thực tế thiết bị nhớ flash sử dụng cổng giao tiếp USB nên thường được
gọi là USB.
Việc tổ chức dữ liệu ở bộ nhớ ngoài và việc trao đổi dữ liệu giữa bộ nhớ ngoài với bộ
nhớ trong được thực hiện bởi hệ điều hành

5. THIẾT BỊ NHẬP XUẤT


Bộ phận này thực hiện sự giao tiếp giữa máy tính và người dùng hay giữa các máy tính
trong hệ thống mạng (đối với các máy tính được kết nối thành một hệ thống mạng).
- Thiết bị nhập: Bàn phím, chuột, máy quét ảnh…
- Các bộ phận xuất là: Màn hình, máy in, loa, máy chiếu…
5.1. THIẾT BỊ NHẬP
Bàn phím máy tính: Sử dụng nhập dữ liệu và làm việc với máy tính
Chuột (máy tính): Phục vụ điều khiển và làm việc với máy tính.
Máy quét (scanner): Là thiết bị cho phép đưa văn bản và hình ảnh vào máy tính. Có
nhiều phần mềm có khả năng chỉnh sửa văn bản hoặc hình ảnh đã được đưa vào máy.
Webcam: Là một camera kĩ thuật số. Khi gắn vào máy tính, nó có thể thu để truyền
trực tuyến hình ảnh qua mạng đến những máy tính đang kết nối với máy đó.
5.2. THIẾT BỊ XUẤT
- Màn hình máy tính: Phục vụ giao tiếp giữa máy tính với người sử dụng
- Máy in: Dùng trích xuất văn bản, hình ảnh ra giấy. Có nhiều loại như: máy in kim,
in phun, in laser…Máy in có thể là đen trắng hoặc màu.
- Máy chiếu: Là thiết bị dùng để hiển thị nội dung màn hình máy tính lên màn ảnh
rộng.
- Loa và tai nghe (Speaker and Headphone): Là các thiết bị để đưa dữ liệu âm thanh
ra môi trường ngoài.
- Môđem (Modem): Là thiết bị dùng để truyền thông giữa các hệ thống máy tính
thông qua đường truyền, chẳng hạn đường điện thoại. Có thể xem modem là một thiết bị hỗ
trợ cho cả việc đưa dữ liệu vào và lấy dữ liệu ra.

Giáo trình Kiến trúc máy tính 21


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 4. KIẾN TRÚC PHẦN MỀM CỦA BỘ VI XỬ LÝ
Mục tiêu
-Trình bày được tổng quát tập lệnh của các kiến trúc máy tính
-Trình bày được các kiểu định vị được dùng trong kiến trúc
-Trình bày được các loại và chiều dài của toán hạng, tác vụ mà máy tính có
thể thực hiện .
1. ĐỊNH NGHĨA KIẾN TRÚC MÁY TÍNH
Kiến trúc máy tinh bao gồm 3 phần:
- Kiến trúc phần mềm
- Tổ chức của máy tính
- Lắp đặt phần cứng.
1.1. KIẾN TRÚC PHẦN MỀM
Kiến trúc phần mềm của máy tính chủ yếu là kiến trúc phần mềm của bộ xử lý bao
gồm: tập lệnh, dạng các lệnh và các kiểu định vị.
+ Trong đó tập lệnh là tập hợp các lệnh mã máy (mã nhị phân) hoàn chỉnh có thể hiểu
và được xử lý với bộ xử lý trung tâm, thông thường các lệnh trong tập lệnh được trình bày
dưới dạng hợp ngữ. Mỗi lệnh chứa thông tin yêu cầu bộ xử lý thực hiện, bao gồm: mã tác vụ,
địa chỉ toán hạng nguồn, địa chỉ toán hạng kết quả, lệnh kế tiếp (thông thường thì thông tin
này ẩn).
+ Kiểu định vị chỉ ra cách thức thâm nhập toán hạng.
Kiến trúc phần mềm là phần mà các lập trình viên hệ thống phải nắm vững để việc lập
trình hiệu quả, ít sai sót.
1.2. PHẦN TỔ CHỨC CỦA MÁY TÍNH liên quan đến cấu trúc bên trong của bộ xử lý,
cấu trúc các bus, các cấp bộ nhớ và các mặt kỹ thuật khác của máy tính. Phần này sẽ được
nói đến ở các chương sau.
1.3. LẮP ĐẶT PHẦN CỨNG của máy tính ám chỉ việc lắp ráp một máy tính dùng các
linh kiện điện tử và các bộ phận phần cứng cần thiết. Chúng ta không nói đến phần này trong
giáo trình.

2. CÁC KIỂU THI HÀNH CỦA MỘT LỆNH


Như đã mô tả, một lệnh mã máy bao gồm ột mã tác vụ và các toán hạng.
Ví dụ: lệnh mã máy 01101001010101010000001101100101
Việc chọn số toán hạng cho một lệnh mã máy là một vấn đề then chốt vì phải có
một sự cân đối giữa tốc độ tính toán và số các mạch tính toán phải dùng. Tuỳ theo tần số sử dụng các

Giáo trình Kiến trúc máy tính 22


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
phép như trên mà các nhà thiết kế máy tính quyết định số lượng các mạch chức năng cần thiết cho
việc tính toán. Thông thường số toán hạng thay đổi từ 0 tới 3.
Ví dụ: lệnh Y := A + B + C + D có thể được hiện bằng một lệnh mã máy nếu ta có 3
mạch cộng, hoặc được thực hiện bằng 3 lệnh mã máy nếu chúng ta chỉ có một mạch cộng,
nếu việc tính toán trên xảy ra ít, người ta chỉ cần thiết kế một mạch cộng thay vì phải tốn chi
phí lắp đặt 3 mạch cộng. Tuy nhiên, với một mạch cộng thì thời gian tính toán của hệ thống
sẽ chậm hơn với hệ thống có ba mạch cộng. Vị trí của toán hạng cũng được xem xét. Bảng
4.1 chọn một vài nhà sản xuất máy tính và 3 kiểu cơ bản của vị trí các toán hạng đối với
những lệnh tính toán trong ALU là: ở ngăn xếp, trên thanh ghi tích luỹ, và trên các thanh ghi
đa dụng. Những kiến trúc phần mềm này được gọi là kiến trúc ngăn xếp, kiến trúc thanh ghi
tích luỹ và kiến trúc thanh ghi đa dụng.
Toán hạng cho
Vị trí Vị trí đặt kết Cách thức thâm nhập vào
Thí dụ lệnh tính toán
các toán hạng quả toán hạng
trong ALU
B 5500 HP
Ngăn xếp 0 Ngăn xếp Lệnh Push, Pop
3000/70
PDP 8 Lệnh nạp vào hoặc lấy ra
Thanh ghi tích Thanh ghi
Motorola 1 từ thanh ghi tích luỹ
luỹ tích luỹ
6809 (load, store)
Thanh ghi đa IBM 360 Thanh ghi Lệnh nạp vào hoặc lấy ra
2 hoặc 3
dụng DEC, VAX hoặc bộ nhớ từ thanh ghi hoặc bộ nhớ
Hình 4.1 : Ví dụ về cách chọn lựa vị trí các toán hạng
Một vài nhà sản xuất máy tính tuân thủ chặt chẽ các kiểu chọn vị trí toán hạng nêu
trên, nhưng phần nhiều các bộ xử lý dùng kiểu hỗn tạp. Ví dụ, mạch xử lý 8086 của Intel
dùng cùng một lúc kiểu "thanh ghi đa dụng" và kiểu "thanh ghi tích luỹ".
Ví dụ minh hoạ chuỗi lệnh phải dùng để thực hiện phép tính C := A + B trong 3 kiểu
kiến trúc phần mềm.

Giáo trình Kiến trúc máy tính 23


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Hình 4.2: Chuỗi lệnh dùng thực hiện phép tính C := A + B
(giả sử A, B, C đều nằm trong bộ nhớ trong)
Hiện tại các nhà sản xuất máy tính có khuynh hướng dùng kiến trúc phần mềm thanh
ghi đa dụng vì việc thâm nhập các thanh ghi đa dụng nhanh hơn thâm nhập bộ nhớ trong, và
vì các chương trình dịch dùng các thanh ghi đa dụng có hiệu quả hơn.

3. TẬP LỆNH
Mục tiêu của phần này là dùng các ví dụ trích từ các kiến trúc phần mềm được dùng
nhiều nhất, để cho thấy các kỹ thuật ở mức ngôn ngữ máy dùng để thi hành các cấu trúc
trong các ngôn ngữ cấp cao.
Để minh hoạ bằng thí dụ, ta dùng cú pháp lệnh trong hợp ngữ sau đây :
- Từ gợi nhớ mã lệnh, thanh ghi đích, thanh ghi nguồn 1, thanh ghi nguồn 2
- Từ gợi nhớ mã lệnh mô tả ngắn gọn tác vụ phải thi hành trên các thanh ghi nguồn, kết
quả được lưu giữ trong thanh ghi đích.
Mỗi lệnh của ngôn ngữ cấp cao được xây dựng bằng một lệnh mã máy hoặc một chuỗi
nhiều lệnh mã máy. Lệnh nhảy (GOTO) được thực hiện bằng các lệnh hợp ngữ về nhảy
(JUMP) hoặc lệnh hợp ngữ về vòng. Chúng ta phân biệt lệnh nhảy làm cho bộ đếm chương
trình được nạp vào địa chỉ tuyệt đối nơi phải nhảy đến (PC←địa chỉ tuyệt đối nơi phải nhảy
tới), với lệnh vòng theo đó ta chỉ cần cộng thêm một độ dời vào bộ đếm chương trình (PC ←

Giáo trình Kiến trúc máy tính 24


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
PC + độ dời). Ta lưu ý là trong trường hợp sau, PC chứa địa chỉ tương đối so với địa chỉ của lệnh
sau lệnh vòng.
3.1. GÁN TRỊ
Việc gán trị, gồm cả gán trị cho biểu thức số học và logic, được thực hiện nhờ một số
lệnh mã máy. Cho các kiến trúc RISC, ta có thể nêu lên các lệnh sau :
- Lệnh bộ nhớ
LOAD Ri, M (địa chỉ) ; M[địa chỉ] ← Ri
STORE Ri, M(địa chỉ) ; Ri ← M[địa chỉ]
Địa chỉ được tính tuỳ theo kiểu định vị được dùng.
- Lệnh tính toán số học: tính toán số nguyên trên nội dung của hai thanh ghi Ri, Rj và
xếp kết quả vào trong Rk:
ADD (cộng)
SUB (trừ)
MUL (nhân)
DIV (chia)
- Lệnh logic: thực hiện phép tính logic cho từng bit một.
AND (lệnh VÀ)
OR (lệnh HOẶC)
XOR (lệnh HOẶC LOẠI)
NEG (lệnh lấy số bù 1 )

Các lệnh dịch chuyển số học hoặc logic (SHIFT ), quay vòng (ROTATE) có hoặc không
có số giữ ở ngã vào, sang phải hoặc sang trái. Các lệnh này được thực hiện trên một thanh ghi
và kết quả lưu giữ trong thanh ghi khác. Số lần dịch chuyển (mỗi lần dịch sang phải hoặc
sang trái một bit) thường được xác định trong thanh ghi thứ ba. Hình 4.1 minh hoạ
cho các lệnh này.
Cho các kiến trúc kiểu RISC, ta có :
SLL (shift left logical : dịch trái logic)
SRL (shift right logical : dịch phải logic)
SRA (shift right arithemtic : dịch phải số học)
3.2. LỆNH CÓ ĐIỀU KIỆN
Lệnh có điều kiện có dạng :
Nếu <điều kiện> thì <chuỗi lệnh 1> nếu không <chuỗi lệnh 2>
(IF < điều kiện > THEN < chuỗi lệnh 1> ELSE < chuỗi lệnh 2>)
Giáo trình Kiến trúc máy tính 25
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Lệnh này buộc phải ghi nhớ điều kiện và nhảy vòng nếu điều kiện được thoả lệnh này
buộc phải ghi nhớ điều kiện và nhảy vòng nếu điều kiện được thoả.
- Ghi nhớ điều kiện
Bộ làm tính ALU cung cấp kết quả ở ngã ra tuỳ theo các ngã vào và phép tính cần làm.
Nó cũng cho một số thông tin khác về kết quả dưới dạng các bit trạng thái. Các bit này là
những đại lượng logic ĐÚNG hoặc SAI.
Trong các bit trạng thái ta có bit dấu S (Sign - Đúng nếu kết quả âm), bit trắc nghiệm
zero Z (Zero - Đúng nếu kết quả bằng không), bit tràn OVF (Overflow) ĐÚNG nếu phép tính
số học làm thanh ghi không đủ khả năng lưu trữ kết quả, bit số giữ C (carry) ĐÚNG nếu số
giữ ở ngã ra là 1 .... Các bit trên thường được gọi là bit mã điều kiện.

Hình 4.3 : Bit trạng thái mà ALU tạo ra

Có hai kỹ thuật cơ bản để ghi nhớ các bit trạng thái.


Cách thứ nhất, ghi các trạng thái trong một thanh ghi đa dụng.
Ví dụ lệnh: CMP Rk, Ri, Rj
Lệnh trên sẽ làm phép tính trừ Ri - Rj mà không ghi kết quả phép trừ, mà lại ghi các bit
trạng thái vào thanh ghi Rk. Thanh ghi này được dùng cho một lệnh nhảy có điều kiện. Điểm
lợi của kỹ thuật này là giúp lưu trữ nhiều trạng thái sau nhiều phép tính để dùng về sau. Điểm
bất lợi là phải dùng một thanh ghi đa dụng để ghi lại trạng thái sau mỗi phép tính mà số
thanh ghi này lại bị giới hạn ở 32 trong các bộ xử lý hiện đại.
Cách thứ hai, là để các bit trạng thái vào một thanh ghi đặc biệt gọi là thanh ghi trạng
thái. Vấn đề lưu giữ nội dung thanh ghi này được giải quyết bằng nhiều cách. Trong kiến
trúc SPARC, chỉ có một số giới hạn lệnh được phép thay đổi thanh ghi trạng thái ví dụ như
lệnh ADDCC, SUBCC (các lệnh này thực hiện các phép tính cộng ADD và phép tính trừ
SUB và còn làm thay đổi thanh ghi trạng thái). Trong kiến trúc PowerPC, thanh ghi trạng
thái được phân thành 8 trường, mỗi trường 4 bit, vậy là thanh ghi đã phân thành 8 thanh ghi
Giáo trình Kiến trúc máy tính 26
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
trạng thái con.
- Nhảy vòng: Các lệnh nhảy hoặc nhảy vòng có điều kiện, chỉ thực hiện lệnh nhảy khi
điều kiện được thoả. Trong trường hợp ngược lại, việc thực hiện chương trình được tiếp tục
với lệnh sau đó. Lệnh nhảy xem xét thanh ghi trạng thái và chỉ nhảy nếu điều kiện nêu lên
trong lệnh là đúng.
Chúng ta xem một ví dụ thực hiện lệnh nhảy có điều kiện.
Giả sử trạng thái sau khi bộ xử lý thi hành một tác vụ, được lưu trữ trong thanh ghi, và
bộ xử lý thi hành các lệnh sau :
1. CMP R4, R1, R2: So sánh R1 và R2 bằng cách trừ R1 cho R2 và lưu giữ trạng
thái trong R4.
2. BGT R4, +2 : Nhảy bỏ 2 lệnh nếu R1 > R2
3. ADD R3, R0, R2: R0 có giá trị 0.Chuyển nội dung của R2 vào R3
4. BRA +1.
5. ADD R3, R0, R1: chuyển nội dung R1 vào R3
6. Lệnh kế
Nếu R1 > R2 thì chuỗi lệnh được thi hành là 1, 2, 5, 6 được thi hành, nếu không thì
chuỗi lệnh 1, 2, 3, 4, 6 được thi hành. Chuỗi các lệnh trên , trong đó có 2 lệnh nhảy, thực hiện
công việc sau đây : Nếu R1 > R2 thì R3 = R1 nếu không R3 = R2
Các lệnh nhảy làm tốc độ thi hành lệnh chậm lại, trong các CPU hiện đại dùng kỹ thuật ống
dẫn. Trong một vài bộ xử lý người ta dùng lệnh di chuyển có điều kiện để tránh dùng lệnh
nhảy trong một vài trường hợp. Thí dụ trên đây có thể được viết lại
1. CMP R4, R1, R2 : So sánh R1 và R2 và để các bit trạng thái trong R4.
2. ADD R3, R0, R2 : Di chuyển R2 vào R3
3. MGT R4, R3, R1: (MGT : Move if greater than). Nếu R1 > R2 thì di chuyển R1 vào R3.
3.3. VÒNG LẶP
Các lệnh vòng lặp có thể được thực hiện nhờ lệnh nhảy có điều kiện mà ta đã nói ở
trên. Trong trường hợp này, ta quản lý số lần lặp lại bằng một số đếm vòng lặp, và người ta
kiểm tra bộ đếm này sau mỗi vòng lặp để xem đã đủ số vòng cần thực hiện hay chưa.
Bộ xử lý PowerPC có một lệnh quản lý vòng lặp
BNCT Ri, độ dời
Với thanh ghi Ri chứa số lần lặp lại.
Lệnh này làm các công việc sau:
Ri := Ri -1
Giáo trình Kiến trúc máy tính 27
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Nếu Ri < > 0, PC := PC + độ dời. Nếu không thì tiếp tục thi hành lệnh kế

3.4. THÂM NHẬP VÀO BỘ NHỚ NGĂN XẾP


Ngăn xếp là một tổ chức bộ nhớ sao cho ta chỉ có thể đọc một từ ở đỉnh ngăn xếp hoặc
viết một từ vào đỉnh ngăn xếp.
Địa chỉ của đỉnh ngăn xếp được chứa trong một thanh ghi đặc biệt gọi là con trỏ ngăn
xếp SP (Stack Pointer).
Ứng với cấu trúc ngăn xếp, người ta có lệnh viết vào ngăn xếp PUSH và lệnh lấy ra
khỏi ngăn xếp POP. Các lệnh này vận hành như sau:
- Cho lệnh PUSH
SP := SP +1
M (SP) := Ri (Ri là thanh ghi cần viết vào ngăn xếp)
- Cho lệnh POP
Ri := M(SP) (Ri là thanh ghi, nhận từ lấy ra khỏi ngăn xếp)
SP := SP -1
Trong các bộ xử lý RISC, việc viết vào hoặc lấy ra khỏi ngăn xếp dùng các lệnh bình
thường. Ví dụ thanh ghi R30 là con trỏ ngăn xếp thì việc viết vào ngăn xếp được thực hiện
bằng các lệnh:
ADDI R30, R30, 4 ; tăng con trỏ ngăn xếp lên 4 vì từ dài 32 bit
STORE Ri, (R30) ; Viết Ri vào đỉnh ngăn xếp
Việc lấy ra khỏi ngăn xếp được thực hiện bằng các lệnh :
LOAD Ri, (R30) ; lấy số liệu ở đỉnh ngăn xếp và nạp vào Ri
SUBI R30, R30,4 ; giảm con trỏ ngăn xếp bớt 4
3.5. CÁC THỦ TỤC
Các thủ tục được gọi từ bất cứ nơi nào của chương trình nhờ lệnh gọi thủ tục CALL.
Để khi chấm dứt việc thi hành thủ tục thì chương trình gọi được tiếp tục bình thường, ta
cần lưu giữ địa chỉ trở về tức địa chỉ của lệnh sau lệnh gọi thủ tục CALL. Khi chấm dứt thi
hành thủ tục, lệnh trở về RETURN nạp địa chỉ trở về vào PC.
Trong các kiến trúc CISC (VAX 11, 80x86, 680x0), địa chỉ trở về được giữ ở ngăn xếp.
Trong các kiến trúc RISC, một thanh ghi đặc biệt (thường là thanh ghi R31) được dùng để
lưu giữ địa chỉ trở về.
Lệnh gọi thủ tục là một lệnh loại JMPL Ri, lệnh này làm các tác vụ :
R31 := PC ; để địa chỉ trở về trong R31
Giáo trình Kiến trúc máy tính 28
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
PC:=Ri; nhảy tới địa chỉ của thủ tục nằm trong thanh ghi
Lệnh trở về khi chấm dứt thủ tục là JMP R31, vì thanh ghi R31 chứa địa chỉ trở về.
Việc dùng một thanh ghi đặc biệt để lưu trữ địa chỉ trở về là một giải pháp chỉ áp dụng
cho các thủ tục cuối cùng, nghĩa là cho thủ tục không gọi thủ tục nào cả.
Để có thể cho các thủ tục có thể gọi một thủ tục khác, ta có hai giải pháp:
Giải pháp 1: có nhiều thanh ghi để lưu trữ địa chỉ trở về
Giải pháp 2: lưu giữ địa chỉ trở về ở ngăn xếp.
Việc gọi thủ tục có thể được thực hiện bằng chuỗi lệnh sau đây :
ADDI R30, R30,4 ; R30 là con trỏ ngăn xếp
STORE R31, (R30) ; lưu giữ địa chỉ trở về
JMP R31 ; trở về chương trình gọi.
Việc truyền tham số từ thủ tục gọi đến thủ tục bị gọi có thể thực hiện bằng cách
dùng các thanh ghi của bộ xử lý hoặc dùng ngăn xếp. Nếu số tham số cần truyền ít, ta dùng
các thanh ghi.

4. CÁC KIỂU ĐỊNH VỊ


Kiểu định vị định nghĩa cách thức thâm nhập các toán hạng. Một vài kiểu xác định cách
thâm nhập toán hạng bộ nhớ, nghĩa là cách tính địa chỉ của toán hạng, các kiểu khác xác định
các toán hạng nằm trong các thanh ghi.
Chú ý rằng, trong các kiểu định vị, ta cần lưu ý khi chuyển đổi dữ liệu nhị phân giữa hai
kiểu định địa chỉ liên quan đến ô nhớ, vì mỗi từ máy tính gồm bốn byte, mỗi ô nhớ chứa một
byte. Như vậy, một từ máy tính được lưu trong bốn ô nhớ liên tiếp trong bộ nhớ trong, có
nhiều cách xác một từ máy tính, trong đó, hai cách tiêu biểu nhất là:
- Định vị kiểu Big-Endian: byte thấp nhất được đặt trong ô nhớ có địa chỉ cao nhất
- Định vị kiểu Little-Endian: byte thấp nhất được đặt trong ô nhớ có địa chỉ thấp
nhất (Intel, DEC).
Hình dưới đây mô tả các kiểu định vị thông dụng, chúng ta sưr dụng các kí hiệu sau
đây cho hình:
R1, R2, R3, R4: Các thanh ghi.
R4 ← R3 + R4 : Cộng các thanh ghi R3 và R4 rồi để kết quả và R4
M[R1] : R1 chứa địa chỉ bộ nhớ mà toán hạng được lưu trữ
M[1001] : toán hạng được lưu trữ ở địa chỉ 1001
d : số byte số liệu cần thâm nhập (d = 4 cho từ máy tính, d = 8 cho từ đôi máy tính).
Trong kiểu định vị thanh ghi, các toán hạng đều được chứa trong các thanh ghi.
Giáo trình Kiến trúc máy tính 29
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Trong kiểu định vị tức thì, toán hạng được chứa trong lệnh.
Trong kiểu định vị trực tiếp, địa chỉ của toán hạng được chứa trong lệnh.
Trong kiểu định vị gián tiếp (thanh ghi), địa chỉ toán hạng được chứa trong thanh ghi.

Kiểu định vị Ví dụ về lệnh Giải thích


Thanh ghi Add R3, R4 R3 R3 + R4
Tức thì Add R4, #3 R4 R4 + 3
Trực tiếp Add R1, (1001) R1 R1 + M(1001)
Gián tiếp (thanh ghi) ADD R4, (R1) R4 R4+ M[R1]
Gián tiếp (bộ nhớ) Add R1, @ (R3) R1 R1+ M[M[R1]]
Gián tiếp(thanh ghi + độ dời) Add R4, 100(R1) R4 R4+ M[R1+100]
Gián tiếp(thanh ghi + thanh ghi) Add R3, (R1 + R2) R3 M[R1+R2]
Gián tiếp(t/g nền + t/g chỉ số+ độ dời) Add R1, 100(R2)[R3] R1 R1+M[100+R2+ d * R3]
R1 R1 + M[R2]
Tự tang Add R1, (R2)+
R1 R2 + d
R2 R2 - d
Tự giảm Add R1, -(R2)
R1 R1 + M[R2]

Bảng : Kiểu định vị của một bộ xử lý có kiến trúc phần mềm kiểu thanh ghi đa dụng

5. KIỂU CỦA TOÁN HẠNG


Kiểu của toán hạng thường được đưa vào trong mã tác vụ của lệnh. Có bốn kiểu
toán hạng được dùng trong các hệ thống:
- Kiểu địa chỉ.
- Kiểu dạng số: số nguyên, dấu chấm động,...
- Kiểu dạng chuỗi ký tự: ASCII, EBIDEC,...
- Kiểu dữ liệu logic: các bit, cờ,...
Tuy nhiên một số ít máy tính dùng các nhãn để xác định kiểu toán hạng. Thông
thường loại của toán hạng xác định luôn chiều dài của nó. Toán hạng thường có
chiều dài là byte (8 bit), nữa từ máy tính (16 bit), từ máy tính (32 bit), từ đôi máy
tính (64 bit). Đặc biệt, kiến trúc PA của hãng HP (Hewlet Packard) có khả năng
tính toán với các số thập phân BCD. Một vài bộ xử lý có thể xử lý các chuỗi ký tự.

Giáo trình Kiến trúc máy tính 30


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 5. KIẾN TRÚC RISC
Mục tiêu:
- Trình bày được kiến trúc với tập lệnh RISC (Reduced Instruction Set Computer)

1. GIỚI THIỆU KIẾN TRÚC RISC


Các kiến trúc với tập lệnh phức tạp CISC (Complex Instruction Set Computer) được nghĩ
ra từ những năm 1960. Vào thời kỳ này, người ta nhận thấy các chương trình dịch khó dùng các
thanh ghi, rằng các vi lệnh được thực hiện nhanh hơn các lệnh và cần thiết phải làm giảm độ
dài các chương trình. Các đặc tính này khiến người ta ưu tiên chọn các kiểu ô nhớ - ô nhớ và
ô nhớ - thanh ghi, với những lệnh phức tạp và dùng nhiều kiểu định vị. Điều này dẫn tới việc
các lệnh có chiều dài thay đổi và như thế thì dùng bộ điều khiển vi chương trình là hiệu quả
nhất.
Bảng 5.1 cho các đặc tính của vài máy CISC tiêu biểu. Ta nhận thấy cả ba máy đều có
điểm chung là có nhiều lệnh, các lệnh có chiều dài thay đổi. Nhiều cách thực hiện lệnh và
nhiều vi chương trình được dùng.
Tiến bộ trong lĩnh vực mạch kết (IC) và kỹ thuật dịch chương trình làm cho các nhận
định trước đây phải được xem xét lại, nhất là khi đã có một khảo sát định lượng về việc dùng
tập lệnh các máy CISC.

Hình 5.1: Bảng đặc tính của một vài máy CISC
Ví dụ, chương trình dịch đã biết sử dụng các thanh ghi và không có sự khác biệt đáng kể
nào khi sử dụng ô nhớ cho các vi chương trình hay ô nhớ cho các chương trình. Điều này
dẫn tới việc đưa vào khái niệm về một máy tính với tập lệnh rút gọn RISC vào đầu những
năm 1980. Các máy RISC dựa chủ yếu trên một tập lệnh cho phép thực hiện kỹ thuật ống
dẫn một cách thích hợp nhất bằng cách thiết kế các lệnh có chiều dài cố định, có dạng đơn
giản, dễ giải mã. Máy RISC dùng kiểu thực hiện lệnh thanh ghi - thanh ghi. Chỉ có các lệnh
ghi hoặc đọc ô nhớ mới cho phép thâm nhập vào ô nhớ. Bảng 5.2 diễn tả ba mẫu máy RISC
đầu tiên: mẫu máy của IBM (IBM 801) của Berkeley (RISC1 của Patterson) và của Stanford
(MIPS của Hennessy). Ta nhận thấy cả ba máy đó đều có bộ điều khiển bằng mạch điện
Giáo trình Kiến trúc máy tính 31
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
(không có ô nhớ vi chương trình), có chiều dài các lệnh cố định (32 bits), có một kiểu thi
hành lệnh (kiểu thanh ghi - thanh ghi) và chỉ có một số ít lệnh có chiều dài cố định, có dạng
đơn giản, dễ giải mã. Máy RISC dùng kiểu thực hiện lệnh thanh ghi - thanh ghi. Chỉ có các
lệnh ghi hoặc đọc ô nhớ mới cho phép thâm nhập vào ô nhớ. Bảng 5.2 diễn tả ba mẫu máy
RISC đầu tiên: mẫu máy của IBM (IBM 801) của Berkeley (RISC1 của Patterson) và của
Stanford (MIPS của Hennessy). Ta nhận thấy cả ba máy đó đều có bộ điều khiển bằng mạch
điện (không có ô nhớ vi chương trình), có chiều dài các lệnh cố định (32 bits), có một kiểu
thi hành lệnh (kiểu thanh ghi - thanh ghi) và chỉ có một số ít lệnh.

Hình 5.2. Bảng đặc tính của ba mẫu đầu tiên máy RISC
RISC (viết tắt của Reduced Instructions Set Computer - Máy tính dùng tập lệnh rút
gọn) là một phương pháp thiết kế các bộ vi xử lý theo hướng đơn giản hóa tập lệnh, trong đó
thời gian thực thi tất cả các lệnh đều như nhau.
1.1. ĐỊNH NGHĨA MẠCH XỬ LÝ RISC BỞI CÁC TÍNH CHẤT SAU:
- Có một số ít lệnh (thông thường dưới 100 lệnh ).
- Có một số ít các kiểu định vị (thông thường hai kiểu: định vị tức thì và định vị gián tiếp
thông qua một thanh ghi).
- Có một số ít dạng lệnh (một hoặc hai)
- Các lệnh đều có cùng chiều dài.
- Chỉ có các lệnh ghi hoặc đọc ô nhớ mới thâm nhập vào bộ nhớ.
- Dùng bộ tạo tín hiệu điều khiển bằng mạch điện để tránh chu kỳ giải mã các vi lệnh
làm cho thời gian thực hiện lệnh kéo dài.
- Bộ xử lý RISC có nhiều thanh ghi để giảm bớt việc thâm nhập vào bộ nhớ trong.
Ngoài ra các bộ xử lý RISC đầu tiên thực hiện tất cả các lệnh trong một chu kỳ máy.
1.2. CÁC LỢI ĐIỂM CỦA BỘ XỬ LÝ RISC
- Diện tích của bộ xử lý dùng cho bộ điều khiển giảm từ 60% (cho các bộ xử lý CISC)
xuống còn 10% (cho các bộ xử lý RISC). Như vậy có thể tích hợp thêm vào bên trong bộ xử
Giáo trình Kiến trúc máy tính 32
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
lý các thanh ghi, các cổng vào ra và bộ nhớ cache ..
- Tốc độ tính toán cao nhờ vào việc giải mã lệnh đơn giản, nhờ có nhiều thanh ghi (ít
thâm nhập bộ nhớ), và nhờ thực hiện kỹ thuật ống dẫn liên tục và có hiệu quả (các lệnh đều
có thời gian thực hiện giống nhau và có cùng dạng).
- Thời gian cần thiết để thiết kế bộ điều khiển là ít. Điều này góp phần làm giảm chi
phí thiết kế.
- Bộ điều khiển trở nên đơn giản và gọn làm cho ít rủi ro mắc phải sai sót mà ta gặp
thường trong bộ điều khiển.
1.3. MỘT SỐ BẤT LỢI CƯA BỘ XỬ LÝ RISC
- Các chương trình dài ra so với chương trình viết cho bộ xử lý CISC.
- Các chương trình dịch gặp nhiều khó khăn vì có ít lệnh làm cho có ít lựa chọn để
diễn dịch các cấu trúc của chương trình gốc. Sự cứng nhắc của kỹ thuật ống dẫn cũng gây
khó khăn.
- Có ít lệnh trợ giúp cho ngôn ngữ cấp cao.

2. CÁC KIỂU ĐỊNH VỊ TRONG BỘ VI XỬ LÝ RISC


Trong bộ xử lý RISC, các lệnh số học và logic chỉ được thực hiện theo kiểu thanh ghi
và tức thì, còn những lệnh đọc và ghi vào bộ nhớ là những lệnh có toán hạng bộ nhớ thì được
thực hiện với những kiểu định vị khác.
2.1 KIỂU ĐỊNH VỊ THANH GHI
Đây là kiểu định vị thường dùng cho các bộ xử lý RISC, các toán hạng nguồn và kết quả
đều nằm trong thanh ghi mà số thứ tự được nêu ra trong lệnh. Hình 5.3 cho vài ví dụ về
kiểu thanh ghi và dạng các lệnh tương ứng trong một vài kiến trúc RISC.

Hình 5.3. Dạng lệnh trong kiểu định vị thanh ghi - thanh ghi cho vài CPU RISC

2.2 KIỂU ĐỊNH VỊ TỨC THÌ


Trong kiểu này, toán hạng là một số có dấu, được chứa ngay trong lệnh.

Giáo trình Kiến trúc máy tính 33


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

Hình 5.4: Dạng lệnh trong kiểu định vị thanh ghi - tức thì cho vài CPU RISC

2.2 KIỂU ĐỊNH VỊ TRỰC TIẾP


- Trong kiểu này địa chỉ toán hạng nằm ngay trong lệnh.
- Ví dụ, kiểu định vị trực tiếp được dùng cho các biến của hệ điều hành, người sử dụng
không có quyền thâm nhập các biến này.

Hình 5.5. Dạng lệnh thâm nhập bộ nhớ trong của vài kiến trúc RISC

2.4. KIỂU ĐỊNH VỊ GIÁN TIẾP BẰNG THANH GHI + ĐỘ DỜI


Đây là kiểu đặc thù cho các kiến trúc RISC. Địa chỉ toán hạng được tính như sau:
Địa chỉ toán hạng = thanh ghi(địa chỉ)+độ dời
Ta để ý rằng kiểu định vị trực tiếp chỉ là một trường hợp đặc biệt của kiểu này khi
thanh ghi (địa chỉ) = 0. Trong các bộ xử lý RISC, một thanh ghi (R0 hoặc R31) được mắc
vào điện thế thấp (tức là 0) và ta có định vị trực tiếp khi dùng thanh ghi đó như là thanh
ghi địa chỉ.
2.5. KIỂU ĐỊNH VỊ TỰ TĂNG
Một vài bộ xử lý RISC, ví dụ bộ xử lý PowerPC, dùng kiểu định vị này.

Giáo trình Kiến trúc máy tính 34


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 6. TỔ CHỨC BỘ VI XỬ LÝ
Mục tiêu:
- Trình bày được nhiệm vụ và cách tổ chức đường đi của dữ liệu trong bộ xử lý
- Trình bày được nguyên tắc vận hành của bộ điều khiển mạch điện tử
- Trình bày được nguyên tắc vận hành của bộ điều khiển vi chương trình
- Trình bày được nhiệm vụ của ngắt
- Trình bày được tiến trình thi hành lệnh mã máy

1. ĐƯỜNG ĐI CỦA DỮ LIỆU


Phần đường đi dữ liệu gồm có bộ số học và logic (ALU: Arithmetic and Logic Unit),
các mạch dịch, các thanh ghi và các đường nối kết các bộ phận trên. Phần này chứa hầu hết
các trạng thái của bộ xử lý.
Ngoài các thanh ghi tổng quát, phần đường đi dữ liệu còn chứa thanh ghi đếm chương
trình (PC: Program Counter), thanh ghi trạng thái (SR: Status Register), thanh ghi đệm
TEMP (Temporary), các thanh ghi địa chỉ bộ nhớ (MAR: Memory Address Register), thanh
ghi số liệu bộ nhớ (MBR: Memory Buffer Register), bộ đa hợp (MUX: Multiplexor), đây là
điểm cuối của các kênh dữ liệu - CPU và bộ nhớ, với nhiệm vụ lập thời biểu truy cập bộ nhớ
từ CPU và các kênh dữ liệu, hệ thống bus nguồn (S1, S2) và bus kết quả (Dest).
Nhiệm vụ chính của phần đường đi dữ liệu là đọc các toán hạng từ các thanh ghi tổng
quát, thực hiện các phép tính trên toán hạng này trong bộ số học và logic ALU và lưu trữ kết
quả trong các thanh ghi tổng quát. Ở ngã vào và ngã ra các thanh ghi tổng quát có các mạch
chốt A, B, C. Thông thường, số lượng các thanh ghi tổng quát là 32.
Phần đường đi của dữ liệu chiếm phân nửa diện tích của bộ xử lý nhưng là phần dễ thiết
kế và cài đặt trong bộ xử lý.

2. BỘ ĐIỀU KHIỂN
Bộ điều khiển tạo các tín hiệu điều khiển di chuyển số liệu (tín hiệu di chuyển số liệu
từ các thanh ghi đến bus hoặc tín hiệu viết vào các thanh ghi), điều khiển các tác vụ mà các
bộ phận chức năng phải làm (điều khiển ALU, điều khiển đọc và viết vào bộ nhớ trong...).
Bộ điều khiển cũng tạo các tín hiệu giúp các lệnh được thực hiện một cách tuần tự. Việc cài
đặt bộ điều khiển có thể dùng một trong hai cách sau: dùng mạch điện tử hoặc dùng vi
chương trình (microprogram).
2.1. BỘ ĐIỀU KHIỂN MẠCH ĐIỆN TỬ
Để hiểu được vận hành của bộ điều khiển mạch điện tử, chúng ta xét đến mô tả về
Automate trạng thái hữu hạn: có nhiều hệ thống hay nhiều thành phần mà ở mỗi thời điểm
xem xét đều có một trạng thái (state). Mục đích của trạng thái là ghi nhớ những gì có liên

Giáo trình Kiến trúc máy tính 35


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
quan trong quá trình hoạt động của hệ thống. Vì chỉ có một số trạng thái nhất định
nên nói chung không thể ghi nhớ hết toàn bộ lịch sử của hệ thống, do vậy nó phải được
thiết kế cẩn thận để ghi nhớ những gì quan trọng. Ưu điểm của hệ thống (chỉ có một số hữu
hạn các trạng thái) đó là có thể cài đặt hệ thống với một lượng tài nguyên cố định. Chẳng
hạn, chúng ta có thể cài đặt Automate trạng thái hữu hạn trong phần cứng máy tính ở dạng
mạch điện hay một dạng chương trình đơn giản, trong đó, nó có khả năng quyết định khi chỉ
biết một lượng giới hạn dữ liệu hoặc bằng cách dùng vị trí trong đoạn mã lệnh để đưa ra
quyết định.

Hình 6.1: Nguyên tắc vận hành của bộ điều khiển dùng mạch điện
Hình 6.1 cho thấy nguyên tắc của một bộ điều khiển bằng mạch điện.
Các đường điều khiển của phần đường đi số liệu là các ngã ra của một hoặc nhiều
Automate trạng thái hữu hạn. Các ngã vào của Automate gồm có thanh ghi lệnh, thanh ghi
này chứa lệnh phải thi hành và những thông tin từ bộ đường đi số liệu. Ứng với cấu hình các
đường vào và trạng thái hiện tại, Automate sẽ cho trạng thái tương lai và các đường ra tương
ứng với trạng thái hiện tại. Automate được cài đặt dưới dạng là một hay nhiều mạch mảng
logic lập trình được (PLA: Programmable Logic Array) hoặc các mạch logic ngẫu nhiên.
Kỹ thuật điều khiển này đơn giản và hữu hiệu khi các lệnh có chiều dài cố định, có dạng
thức đơn giản. Nó được dùng nhiều trong các bộ xử lý RISC.

Giáo trình Kiến trúc máy tính 36


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

2.2. BỘ ĐIỀU KHIỂN VI CHƯƠNG TRÌNH

Hình 6.2: Nguyên tắc vận hành của bộ điều khiển vi chương trình

Sơ đồ nguyên tắc của bộ điều khiển dùng vi chương trình được trình bày ở hình 6.2.
Trong kỹ thuật này, các đường dây điều khiển của bộ đường đi dữ liệu ứng với các ngã ra của
một vi lệnh nằm trong bộ nhớ vi chương trình. Việc điều khiển các tác vụ của một lệnh mã
máy được thực hiện bằng một chuỗi các vi lệnh. Một vi máy tính nằm bên trong bộ điều
khiển thực hiện từng lệnh của vi chương trình này. Chính vi máy tính này điều khiển việc
thực hiện một cách tuần tự các vi lệnh để hoàn thành tác vụ mà lệnh mã máy phải thực hiện.
Các tác vụ của lệnh mã máy cũng tuỳ thuộc vào trạng thái của phần đường đi dữ liệu. Bộ
điều khiển bằng vi chương trình được dùng rộng rãi trong các bộ xử lý CISC. Bộ xử lý này
có tập lệnh phức tạp với các lệnh có chiều dài khác nhau và có dạng thức phức tạp. Trong các
bộ xử lý CISC, người ta cài đặt một lệnh mã máy bằng cách viết một vi chương trình. Như
vậy công việc khá đơn giản và rất hữu hiệu. Các sai sót trong thiết kế automat điều khiển
cũng dễ sửa đổi.

3. NGẮT (INTERUPT)
3.1. KHÁI NIỆM
Ngắt là cơ chế cho phép CPU tạm dừng chương trình đang thực hiện để chuyển sang

Giáo trình Kiến trúc máy tính 37


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
thực hiện một chương trình khác, gọi là chương trình con phục vụ ngắt.
Phần lớn các nhà sản xuất máy tính (ví dụ như IBM, INTEL) dùng từ ngắt quãng để ám
chỉ sự kiện này, tuy nhiên một số nhà sản xuất khác dùng từ “ngoại lệ”, “lỗi”, “bẩy” để chỉ
định hiện tượng này.
3.2. CÁC LOẠI NGẮT
– Ngắt do lỗi khi thực hiện chương trình, ví dụ: tràn số, chia cho 0 …
– Ngắt do lỗi phần cứng, ví dụ: lỗi bộ nhớ RAM
– Ngắt do môđun vào-ra phát tín hiệu ngắt đến CPU yêu cầu trao đổi dữ liệu.

3.3. HOẠT ĐỘNG NGẮT


Sau khi hoàn thành một lệnh, bộ xử lý kiểm tra tín hiệu ngắt.
- Nếu không có ngắt bộ xử lý nhận lệnh tiếp theo của chương trình hiện tại
- Nếu có tín hiệu ngắt:
1. Thực hiện xong lệnh đang làm.
2. Lưu trữ trạng thái hiện tại.
3. Nhảy đến chương trình phục vụ ngắt
4. Khi chương trình phục vụ chấm dứt, bộ xử lý khôi phục lại trạng thái cũ
của nó và tiếp tục thực hiện chương trình mà nó đang thực hiện khi bị ngắt.

Giáo trình Kiến trúc máy tính 38


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

3.4. CHU TRÌNH LỆNH VỚI NGẮT

Ngắt quãng là một sự kiện xảy ra một cách ngẫu nhiên trong máy tính và làm ngưng tính
tuần tự của chương trình (nghĩa là tạo ra một lệnh nhảy).
Bộ điều khiển của CPU là bộ phận khó thực hiện nhất và ngắt quãng là phần khó thực
hiện nhất trong bộ điều khiển. Để nhận biết được một ngắt quãng lúc đang thi hành một lệnh,
ta phải biết điều chỉnh chu kỳ xung nhịp và điều này có thể ảnh hưởng đến hiệu quả của máy
tính..
Người ta đã nghĩ ra “ngắt quãng” là để nhận biết các sai sót trong tính toán số học và để
ứng dụng cho những hiện tượng thời gian thực. Bây giờ, ngắt quãng được dùng cho các công
việc sau đây:
- Ngoại vi đòi hỏi nhập hoặc xuất số liệu.
- Người lập trình muốn dùng dịch vụ của hệ điều hành.

Giáo trình Kiến trúc máy tính 39


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
- Cho một chương trình chạy từng lệnh.
- Làm điểm dừng của một chương trình.
- Báo tràn số liệu trong tính toán số học.
- Trang bộ nhớ thực sự không có trong bộ nhớ.
- Báo vi phạm vùng cấm của bộ nhớ.
- Báo dùng một lệnh không có trong tập lệnh.
- Báo phần cứng máy tính bị hư.
- Báo điện bị cắt.
Dù rằng ngắt quãng không xảy ra thường xuyên nhưng bộ xử lý phải được thiết kế sao
cho có thể lưu giữ trạng thái của nó trước khi nhảy đi phục vụ ngắt quãng. Sau khi thực hiện
xong chương trình phục vụ ngắt, bộ xử lý phải khôi phục trạng thái của nó để có thể tiếp tục
công việc.

4. TIẾN TRÌNH THI HÀNH LỆNH MÃ MÁY


Viêc thi hành một lệnh mã máy có thể chia thành 5 giai đoạn:
- Đọc lệnh (IF: Instruction Fetch)
- Giải mã lệnh (ID: Instruction Decode)
- Thi hành lệnh (EX: Execute)
- Thâm nhập bộ nhớ trong hoặc nhảy (MEM: Memory access)
- Lưu trữ kết quả (RS: Result Storing).
Mỗi giai đoạn được thi hành trong một hoặc nhiều chu kỳ xung nhịp.
4.1. ĐỌC LỆNH
MAR ← PC
IR ← M[MAR]
Bộ đếm chương trình PC được đưa vào MAR. Lệnh được đọc từ bộ nhớ trong, tại các
ô nhớ có địa chỉ nằm trong MAR và được đưa vào thanh ghi lệnh IR.
4.2.GIẢI MÃ VÀ ĐỌC CÁC THANH GHI NGUỒN
A ← Rs1
B ← Rs2
PC ← PC + 4
Lệnh được giải mã. Kế đó các thanh ghi Rs1 và Rs2 được đưa vào A và B. Thanh ghi
PC được tăng lên để chỉ tới lệnh kế đó. Để hiểu rõ giai đoạn này, ta lấy dạng thức của một
lệnh làm tính tiêu biểu sau đây:

Giáo trình Kiến trúc máy tính 40


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

Các thanh ghi nguồn Rs1 và Rs2 được sử dụng tuỳ theo tác vụ, kết quả được đặt trong
thanh ghi đích Rd.
Ta thấy việc giải mã đưc thực hiện cùng lúc với việc đọc các thanh ghi Rs1 và Rs2 vì
các thanh ghi này luôn nằm tại cùng vị trí ở trong lệnh.
4.3. THI HÀNH LỆNH
Tuỳ theo loại lệnh mà một trong ba nhiệm vụ sau đây được thực hiện:
- Liên hệ tới bộ nhớ
MAR ← Địa chỉ do ALU tính tuỳ theo kiểu định vị (Rs2).
MBR ← Rs1
Địa chỉ hiệu dụng do ALU tính được đưa vào MAR và thanh ghi nguồn Rs1 được đưa
vào MBR để được lưu vào bộ nhớ trong.
- Một lệnh của ALU
Ngã ra ALU ← Kết quả của phép tính ALU thực hiện phép tính xác định
trong mã lệnh, đưa kết quả ra ngã ra.
- Một phép nhảy
Ngã ra ALU ← Địa chỉ lệnh tiếp theo do ALU tính.
ALU cộng địa chỉ của PC với độ dời để làm thành địa chỉ đích và đưa địa
chỉ này ra ngã ra. Nếu là một phép nhảy có điều kiện thì thanh ghi trạng thái được đọc quyết
định có cộng độ dời vào PC hay không.
4.4. THÂM NHẬP BỘ NHỚ TRONG HOẶC NHẢY LẦN CUỐI
Giai đoạn này thường chỉ được dùng cho các lệnh nạp dữ liệu, lưu giữ dữ liệu và lệnh
nhảy.
- Tham khảo đến bộ nhớ:
MBR ← M[MAR] hoặc M[MAR] ← MBR
Số liệu được nạp vào MBR hoặc lưu vào địa chỉ mà MAR trỏ đến.
- Nhảy:
If (điều kiện), PC ← ngả ra ALU
Nếu điều kiện đúng, ngã ra ALU được nạp vào PC. Đối với lệnh nhảy không điều
kiện, ngả ra ALU luôn được nạp vào thanh ghi PC.
4.5. LƯU TRỮ KẾT QUẢ
Rd ← Ngã ra ALU hoặc Rd ← MBR Lưu trữ kết quả trong thanh ghi đích.

Giáo trình Kiến trúc máy tính 41


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 7. KỸ THUẬT ỐNG DẪN
Mục tiêu:
- Trình bày được một số kỹ thuật xử lý thông tin: ống dẫn, siêu ống dẫn
- Trình bày được hoạt động xử lý lệnh trong các kỹ thuật ống dẫn, siêu ống dẫn

1. ỐNG DẪN
Đây là một kỹ thuật làm cho các giai đoạn khác nhau của nhiều lệnh được thi hành cùng
một lúc.
Ví dụ: Chúng ta có những lệnh đều đặn, mỗi lệnh được thực hiện trong cùng một
khoảng thời gian. Giả sử, mỗi lệnh được thực hiện trong 5 giai đoạn và mỗi giai đoạn được
thực hiện trong 1 chu kỳ xung nhịp.
Các giai đoạn thực hiện một lệnh là: lấy lệnh (IF:Instruction Fetch), giải mã (ID:
Instruction Decode), thi hành (EX: Execute), thâm nhập bộ nhớ (MEM: Memory Access),
lưu trữ kết quả (RS: Result Storing).
Hình 7.1 cho thấy chỉ trong một chu kỳ xung nhịp, bộ xử lý có thể thực hiện một lệnh
(bình thường lệnh này được thực hiện trong 5 chu kỳ).
Chu kỳ xung nhịp
Chuỗi lệnh
1 2 3 4 5 6 7 8 9
Lệnh thứ i IF ID EX MEM RS
Lệnh thứ i+1 IF ID EX MEM RS
Lệnh thứ i+2 IF ID EX MEM RS
Lệnh thứ i+3 IF ID EX MEM RS
Lệnh thứ i+4 IF ID EX MEM RS

Hình 7.1: Các giai đoạn khác nhau của nhiều lệnh được thi hành cùng một lúc
So sánh với kiểu xử lý tuần tự thông thường, 5 lệnh được thực hiện trong 25 chu kỳ
xung nhịp, thì xử lý lệnh theo kỹ thuật ống dẫn thực hiện 5 lệnh chỉ trong 9 chu kỳ xung
nhịp.
Như vậy kỹ thuật ống dẫn làm tăng tốc độ thực hiện các lệnh. Tuy nhiên kỹ thuật ống
dẫn có một số ràng buộc:
- Cần phải có một mạch điện để thi hành mỗi giai đoạn của lệnh vì tất cả các giai đoạn của
lệnh được thi hành cùng lúc. Trong một bộ xử lý không dùng kỹ thuật ống dẫn, ta có thể
dùng bộ làm toán ALU để cập nhật thanh ghi PC, cập nhật địa chỉ của toán hạng bộ nhớ, địa
chỉ ô nhớ mà chương trình cần nhảy tới, làm các phép tính trên các toán hạng vì các phép
tính này có thể xảy ra ở nhiều giai đoạn khác nhau.
Giáo trình Kiến trúc máy tính 42
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
- Phải có nhiều thanh ghi khác nhau dùng cho các tác vụ đọc và viết. Trên hình 7.1, tại
một chu kỳ xung nhịp, ta thấy cùng một lúc có 2 tác vụ đọc (ID, MEM) và 1 tác vụ viết
(RS).
- Trong một máy có kỹ thuật ống dẫn, có khi kết quả của một tác vụ trước đó, là toán
hạng nguồn của một tác vụ khác. Như vậy sẽ có thêm những khó khăn mà ta sẽ đề cập ở mục
tới.
- Cần phải giải mã các lệnh một cách đơn giản để có thể giải mã và đọc các toán hạng
trong một chu kỳ duy nhất của xung nhịp.
- Cần phải có các bộ làm tính ALU hữu hiệu để có thể thi hành lệnh số học dài nhất,
có số giữ, trong một khoảng thời gian ít hơn một chu kỳ của xung nhịp.
- Cần phải có nhiều thanh ghi lệnh để lưu giữ lệnh mà chúng ta phải xem xét cho mỗi
giai đoạn thi hành lệnh.
- Cuối cùng phải có nhiều thanh ghi bộ đếm chương trình PC để có thể tái tục các
lệnh trong trường hợp có ngắt quãng.

2. KHÓ KHĂN TRONG KĨ THUẬT ỐNG DẪN


Khi thi hành lệnh trong một máy tính dùng kỹ thuật ống dẫn, có nhiều trường hợp làm
cho việc thực hiện kỹ thuật ống dẫn không thực hiện được như là: thiếu các mạch chức năng,
một lệnh dùng kết quả của lệnh trước, một lệnh nhảy.
Ta có thể phân biệt 3 loại khó khăn: khó khăn do cấu trúc, khó khăn do số liệu và khó
khăn do điều khiển.
2.1. KHÓ KHĂN DO CẤU TRÚC
Đây là khó khăn do thiếu bộ phận chức năng, ví dụ trong một máy tính dùng kỹ thuật
ống dẫn phải có nhiều ALU, nhiều PC, nhiều thanh ghi lệnh IR ... Các khó khăn này được giải
quyết bằng cách thêm các bộ phận chức năng cần thiết và hữu hiệu.
2.2. KHÓ KHĂN DO SỐ LIỆU
Lấy ví dụ trường hợp các lệnh liên tiếp sau:
Lệnh 1: ADD R1, R2, R3
Lệnh 2: SUB R4, R1, R5
Lệnh 3: AND R6, R1, R7
Lệnh 4: OR R8, R1, R9
Hình 7.2 cho thấy R1, kết quả của lệnh 1 chỉ có thể được dùng cho lệnh 2 sau giai
đoạn MEM của lệnh 1, nhưng R1 được dùng cho lệnh 2 vào giai đoạn EX của lệnh 1. Chúng
ta cũng thấy R1 được dùng cho các lệnh 3 và 4.
Giáo trình Kiến trúc máy tính 43
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin

Hình 7.2. Chuỗi lệnh minh họa khó khăn do số liệu.

Để khắc phục khó khăn này, một bộ phận phần cứng được dùng để đưa kết quả từ ngã
ra ALU trực tiếp vô một trong các thanh ghi ngã vào.
Khi bộ phận phần cứng nêu trên phát hiện có dùng kết quả của ALU làm toán hạng
cho liệt kê, nó tác đ`ộng vào mạch đa hợp để đưa ngã ra của ALU vào ngã vào của ALU hoặc
vào ngã vào của một đơn vị chức năng khác nếu cần
.

2.3 KHÓ KHĂN DO ĐIỀU KHIỂN


Các lệnh làm thay đổi tính thi hành các lệnh một cách tuần tự (nghĩa là PC tăng đều
đặn sau mỗi lệnh), gây khó khăn về điều khiển.
Các lệnh này là lệnh nhảy đến một địa chỉ tuyệt đối chứa trong một thanh ghi, hay lệnh nhảy
đến một địa chỉ xác định một cách tương đối so với địa chỉ hiện tại của bộ đếm chương trình
PC. Các lệnh nhảy trên có thể có hoặc không điều kiện.
Trong trường hợp đơn giản nhất, tác vụ nhảy không thể biết trước giai đoạn giải mã.
Như vậy, nếu lệnh nhảy bắt đầu ở chu kỳ C thì lệnh mà chương trình nhảy tới chỉ được bắt
đầu ở chu kỳ C+2. Ngoài ra, phải biết địa chỉ cần nhảy đến mà ta có ở cuối giai đoạn giải mã
ID. Trong lệnh nhảy tương đối, ta phải cộng độ dời chứa trong thanh ghi lệnh IR vào thanh
ghi PC. Việc tính địa chỉ này chỉ được thực hiện vào giai đoạn ID với điều kiện phải có một
Giáo trình Kiến trúc máy tính 44
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
mạch công việc riêng biệt.
Vậy trong trường hợp lệnh nhảy không điều kiện, lệnh mà chương trình nhảy đến bắt
đầu thực hiện ở chu kỳ C+2 nếu lệnh nhảy bắt đầu ở chu kỳ C.

Cho các lệnh nhảy có điều kiện thì phải tính toán điều kiện. Thông thường các kiến
trúc RISC đặt kết quả việc so sánh vào trong thanh ghi trạng thái, hoặc vào trong thanh ghi
tổng quát. Trong cả 2 trường hợp, đọc điều kiện tương đương với đọc thanh ghi. Đọc thanh
ghi có thể được thực hiện trong phân nửa chu kỳ cuối giai đoạn ID.

Một trường hợp khó hơn có thể xảy ra trong những lệnh nhảy có điều kiện. Đó là điều
kiện được có khi so sánh 2 thanh ghi và chỉ thực hiện lệnh nhảy khi kết quả so sánh là đúng.
Việc tính toán trên các đại lượng logic không thể thực hiện được trong phân nửa chu kỳ và
như thế phải kéo dài thời gian thực hiện lệnh nhảy có điều kiện. Người ta thường tránh các
trường hợp này để không làm giảm mức hữu hiệu của máy tính.

Vậy trường hợp đơn giản, người ta có thể được địa chỉ cần nhảy đến và điều kiện nhảy
cuối giai đoạn ID. Vậy có chậm đi một chu kỳ mà người ta có thể giải quyết bằng nhiều cách.

Cách thứ nhất là đóng băng kỹ thuật ống dẫn trong một chu kỳ, nghĩa là ngưng thi hành
lệnh thứ i+1 đang làm nếu lệnh thư i là lệnh nhảy. Ta mất trắng một chu kỳ cho mỗi lệnh
nhảy.

Cách thứ hai là thi hành lệnh sau lệnh nhảy nhưng lưu ý rằng hiệu quả của một lệnh
nhảy bị chậm mất một lệnh. Vậy lệnh theo sau lệnh nhảy được thực hiện trước khi lệnh mà
chương trình phải nhảy tới được thực hiện. Chương trình dịch hay người lập trình có nhiệm vụ
xen vào một lệnh hữu ích sau lệnh nhảy.

Trong trường hợp nhảy có điều kiện, việc nhảy có thể được thực hiện hay không thực
hiện. Lệnh hữu ích đặt sau lệnh nhảy không làm sai lệch chương trình dù điều kiện nhảy
đúng hay sai.

Bộ xử lý RISC SPARC có những lệnh nhảy với huỷ bỏ. Các lệnh này cho phép thi hành
lệnh sau lệnh nhảy nếu điều kiện nhảy đúng và huỷ bỏ thực hiện lệnh đó nếu điều kiện nhảy
sai.

3. SIÊU ỐNG DẪN


Máy tính có kỹ thuật siêu ống dẫn bậc n bằng cách chia các giai đoạn của kỹ thuật ống
dẫn đơn giản, mỗi giai đoạn được thực hiện trong khoảng thời gian Tc, thành n giai đoạn con
thực hiện trong khoảng thời gian Tc/n. Độ hữu hiệu của kỹ thuật này tương đương với việc
Giáo trình Kiến trúc máy tính 45
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
thi hành n lệnh trong mỗi chu kỳ Tc. Hình 7.3 trình bày thí dụ về siêu ống dẫn bậc 2, có so
sánh với siêu ống dẫn đơn giản. Ta thấy trong một chu kỳ Tc, máy dùng kỹ thuật siêu ống
dẫn làm 2 lệnh thay vì làm 1 lệnh trong máy dùng kỹ thuật ống dẫn bình thường. Trong máy
tính siêu ống dẫn, tốc độ thực hiện lệnh tương đương với việc thực hiện một lệnh trong
khoảng thời gian Tc/n. Các bất lợi của siêu ống dẫn là thời gian thực hiện một giai đoạn con
ngắn Tc/n và việc trì hoãn trong thi hành lệnh nhảy lớn.
Trong ví dụ ở Hình 7.3, nếu lệnh thứ i là một lệnh nhảy tương đối thì lệnh này được giải
mã trong giai đoạn ID, địa chỉ nhảy đến được tính vào giai đoạn EX, lệnh phải được nhảy tới
là lệnh thứ i+4, vậy có trì trệ 3 lệnh thay vì 1 lệnh trong kỹ thuật ống dẫn bình thường

Hình7. 3. Siêu ống dẫn bậc 2 so với siêu ống dẫn đơn giản. Trong khoảng thời gian Tc,
máy có siêu ống dẫn làm 2 lệnh thay vì 1 lệnh như trong máy có kĩ thuật ống dẫn đơn giản

Giáo trình Kiến trúc máy tính 46


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 8. BỘ NHỚ
Mục tiêu:
- Trình bày được các cấp bộ nhớ và cách thức vận hành của các loại bộ nhớ được giới
thiệu;
- Đánh giá được hiệu năng hoạt động của các loại bộ nhớ.
1. CÁC LOẠI BỘ NHỚ

Bộ nhớ chứa chương trình, nghĩa là chứa lệnh và số liệu. Người ta phân biệt các loại bộ
nhớ: Bộ nhớ trong (RAM-Bộ nhớ vào ra ngẫu nhiên), được chế tạo bằng chất bán dẫn; bộ
nhớ chỉ đọc (ROM) cũng là loại bộ nhớ chỉ đọc và bộ nhớ ngoài bao gồm: đĩa cứng, đĩa mềm,
băng từ, trống từ, các loại đĩa quang, các loại thẻ nhớ,...
Bộ nhớ RAM có đặc tính là các ô nhớ có thể được đọc hoặc viết vào
Trong khoảng thời gian bằng nhau cho dù chúng ở bất kỳ vị trí nào trong bộ nhớ. Mỗi ô nhớ
có một địa chỉ, thông thường, mỗi ô nhớ là một byte (8 bit), nhưng hệ thống có thể đọc ra hay
viết vào nhiều byte (2,4, hay 8 byte). Bộ nhớ trong (RAM) được đặc trưng bằng dung lượng
và tổ chức của nó (số ô nhớ và số bit cho mỗi ô nhớ), thời gian thâm nhập (thời gian từ lúc
đưa ra địa chỉ ô nhớ đến lúc đọc được nội dung ô nhớ đó) và chu kỳ bộ nhớ (thời gian giữa hai lần
liên tiếp thâm nhập bộ nhớ).

Hình 8.1. Vận hành của bộ nhớ RAM


(Wi, Wj, R/W là các tín hiệu điều khiển)

Tuỳ theo công nghệ chế tạo, người ta phân biệt RAM tĩnh (SRAM: Static RAM) và
RAM động (Dynamic RAM).
1.1 RAM TĨNH: được chế tạo theo công nghệ ECL (CMOS và BiCMOS). Mỗi bit nhớ
gồm có các cổng logic với độ 6 transistor MOS, việc nhớ một dữ liệu là tồn tại nếu bộ nhớ
được cung cấp điện. SRAM là bộ nhớ nhanh, việc đọc không làm huỷ nội dung của ô nhớ và
thời gian thâm nhập bằng chu kỳ bộ nhớ.
Giáo trình Kiến trúc máy tính 47
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
1.2 RAM ĐỘNG: dùng kỹ thuật MOS. Mỗi bit nhớ gồm có một transistor và một tụ
điện. Cũng như SRAM, việc nhớ một dữ liệu là tồn tại nếu bộ nhớ được cung cấp điện. Việc
ghi nhớ dựa vào việc duy trì điện tích nạp vào tụ điện và như vậy việc đọc một bit nhớ làm
nội dung bit này bị huỷ. Vậy sau mỗi lần đọc một ô nhớ, bộ phận điều khiển bộ nhớ phải viết
lại ô nhớ đó nội dung vừa đọc và do đó chu kỳ bộ nhớ động ít nhất là gấp đôi thời gian thâm
nhập ô nhớ. Việc lưu giữ thông tin trong bit nhớ chỉ là tạm thời vì tụ điện sẽ phóng hết điện
tích đã nạp vào và như vậy phải làm tươi bộ nhớ sau mỗi 2µs.
Làm tươi bộ nhớ là đọc ô nhớ và viết lại nội dung đó vào lại ô nhớ. Việc làm tươi
được thực hiện với tất cả các ô nhớ trong bộ nhớ. Việc làm tươi bộ nhớ được thực hiện tự động
bởi một vi mạch bộ nhớ. Bộ nhớ DRAM chậm nhưng rẻ tiền hơn SRAM.
SDRAM (Synchronous DRAM – DRAM đồng bộ), một dạng DRAM đồng bộ bus bộ
nhớ. Tốc độ SDRAM đạt từ 66-133MHz (thời gian thâm nhập bộ nhớ từ 75ns-150ns).
DDR SDRAM (Double Data Rate SDRAM) là cải tiến của bộ nhớ SDRAM với tốc độ
truyền tải gấp đôi SDRAM nhờ vào việc truyền tải hai lần trong một chu kỳ bộ nhớ. Tốc độ
DDR SDRAM đạt từ 200-400MHz .
RDRAM (Rambus RAM) là một loại DRAM được thiết kế với kỹ thuật hoàn toàn mới
so với kỹ thuật SDRAM. RDRAM hoạt động đồng bộ theo một hệ thống lặp và truyền dữ
liệu theo một hướng. Một kênh bộ nhớ RDRAM có thể hỗ trợ đến 32 chip DRAM. Mỗi chip
được ghép nối tuần tự trên một module gọi là RIMM (Rambus Inline Memory Module)
nhưng việc truyền dữ liệu giữa các mạch điều khiển và từng chíp riêng biệt chứ không truyền
giữa các chip với nhau. Bus bộ nhớ RDRAM là đường dẫn liên tục đi qua các chip và module
trên bus, mỗi module có các chân vào và ra trên các đầu đối diện. Do đó, nếu các khe cắm
không chứa RIMM sẽ phải gắn một module liên tục để đảm bảo đường truyền được nối
liền.Tốc độ RDRAM đạt từ 400-800MHz.

1.3. BỘ NHỚ CHỈ ĐỌC ROM : được chế tạo bằng công nghệ bán dẫn. Chương trình
trong ROM được viết vào lúc chế tạo nó. Thông thường, ROM chứa chương trình khởi động
máy tính, chương trình điều khiển trong các thiết bị điều khiển tự động...
PROM (Programable ROM): Chế tạo bằng các mối nối (cầu chì - có thể làm đứt bằng
điện). Chương trình nằm trong PROM có thể được viết vào bởi người sử dụng bằng thiết bị
đặc biệt và không thể xóa được.
EPROM (Erasable Programable ROM): Chế tạo bằng nguyên tắt phân cực tĩnh điện.
Chương trình nằm trong ROM có thể được viết vào (bằng điện) và có thể xóa (bằng tia cực
tím - trung hòa tĩnh điện) để viết lại bởi người sử dụng.
Giáo trình Kiến trúc máy tính 48
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
EEPROM (Eletrically Erasable Programable ROM): Chế tạo bằng công nghệ bán dẫn.
Chương trình nằm trong ROM có thể được viết vào và có thể xóa (bằng điện) để viết lại bởi
người sử dụng.

Bảng 8.2: Các kiểu bộ nhớ bán dẫn

2. CÁC CẤP BỘ NHỚ

Các đặc tính như lượng thông tin lưu trữ, thời gian thâm nhập bộ nhớ, chu kỳ bộ nhớ, giá
tiền mỗi bit nhớ khiến ta phải phân biệt các cấp bộ nhớ: các bộ nhớ nhanh với dung lượng ít
đến các bộ nhớ chậm với dung lượng lớn.
Các đặc tính chính của các cấp bộ nhớ dẫn đến hai mức chính là: mức cache- bộ nhớ
trong và mức bộ nhớ ảo (bao gồm bộ nhớ trong và không gian cấp phát trên đĩa cứng). Cách
tổ chức này trong suốt đối với người sử dụng. Người sử dụng chỉ thấy duy nhất một không
gian định vị ô nhớ, độc lập với vị trí thực tế của các lệnh và dữ liệu cần thâm nhập.

Hình 8.3: Hai mức bộ nhớ


Các cấp bộ nhớ giúp ích cho người lập trình muốn có một bộ nhớ thật nhanh với chi phí
đầu tư giới hạn. Vì các bộ nhớ nhanh đắt tiền nên các bộ nhớ được tổ chức thành nhiều cấp,
cấp có dung lượng ít thì nhanh nhưng đắt tiền hơn cấp có dung lượng cao hơn.
Giáo trình Kiến trúc máy tính 49
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Mục tiêu của việc thiết lập các cấp bộ nhớ là người dùng có một hệ thống bộ nhớ rẻ tiền
như cấp bộ nhớ thấp nhất và gần nhanh như cấp bộ nhớ cao nhất. Các cấp bộ nhớ thường
được lồng vào nhau. Mọi dữ liệu trong một cấp thì được gặp lại trong cấp thấp hơn và có thể
tiếp tục gặp lại trong cấp thấp nhất.
Chúng ta có nhận xét rằng, mỗi cấp bộ nhớ có dung lượng lớn hơn cấp trên mình, ánh xạ
một phần địa chỉ các ô nhớ của mình vào địa chỉ ô nhớ của cấp trên trực tiếp có tốc độ nhanh
hơn, và các cấp bộ nhớ phải có cơ chế quản lý và kiểm tra các địa chỉ ánh xạ.

3. TRUY CẬP DỮ LIỆU TRONG BỘ NHỚ TRONG


Cache là bộ nhớ nhanh, nó chứa lệnh và dữ liệu thường xuyên dùng đến. Việc lựa chọn
lệnh và dữ liệu cần đặt vào cache dựa vào các nguyên tắc sau đây:
Một chương trình mất 90% thời gian thi hành lệnh của nó để thi hành 10% số lệnh
của chương trình.
Nguyên tắc trên cũng được áp dụng cho việc thâm nhập dữ liệu, nhưng ít hiệu nghiệm
hơn việc thâm nhập lệnh. Như vậy có hai nguyên tắc: nguyên tắc về không gian và nguyên
tắc về thời gian.
Nguyên tắc về thời gian: cho biết các ô nhớ được hệ thống xử lý thâm nhập có khả
năng sẽ được thâm nhập trong tương lai gần. Thật vậy, các chương trình được cấu tạo với
phần chính là phần được thi hành nhiều nhất và các phần phụ dùng để xử lý các trường hợp
ngoại lệ. Còn số liệu luôn có cấu trúc và thông thường chỉ có một phần số liệu được thâm
nhập nhiều nhất mà thôi.
Nguyên tắc về không gian: cho biết, bộ xử lý thâm nhập vào một ô nhớ ô nhớ thì có
nhiều khả năng thâm nhập vào ô nhớ có địa chỉ kế tiếp do các lệnh được sắp xếp thành chuỗi
có thứ tự.
Tổ chức các cấp bộ nhớ sao cho các lệnh và dữ liệu thường dùng được nằm trong bộ
nhớ cache, điều này làm tăng hiệu quả của máy tính một cách đáng kể.

4. BỘ NHỚ CACHE
Bộ nhớ Cache là kiểu bộ nhớ tốc độ cao có bên trong CPU để tăng tốc độ truy cập cho
dữ liệu và các chỉ lệnh được lưu trong bộ nhớ RAM.
4.1. VẬN HÀNH CỦA CACHE
Mức cache - bộ nhớ trong trong bảng các cấp bộ nhớ có cơ cấu vận hành trong suốt đối
với bộ xử lý. Với thao tác đọc bộ nhớ, bộ xử lý gởi một địa chỉ và nhận một dữ liệu từ bộ nhớ
trong. Với thao tác ghi bộ nhớ, bộ xử lý viết một dữ liệu vào một ô nhớ với một địa chỉ được

Giáo trình Kiến trúc máy tính 50


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
chỉ ra trong bộ nhớ.
Để cho chương trình vận hành bình thường thì cache phải chứa một phần con của bộ
nhớ trong để bộ xử lý có thể thâm nhập vào các lệnh hoặc dữ liệu thường dùng từ bộ nhớ
cache. Do dung lượng của bộ nhớ cache nhỏ nên nó chỉ chứa một phần chương trình nằm
trong bộ nhớ trong. Để đảm bảo sự đồng nhất giữa nội dung của cache và bộ nhớ trong thì
cache và bộ nhớ trong phải có cùng cấu trúc.
Việc chuyển dữ liệu giữa cache và bộ nhớ trong là việc tải lên hay ghi xuống các khối
dữ liệu. Mỗi khối chứa nhiều từ bộ nhớ tuỳ thuộc vào cấu trúc bộ nhớ cache. Sự lựa chọn
kích thước của khối rất quan trọng cho vận hành của cache có hiệu quả.

Trao đổi dữ liệu giữa các thành phần CPU-Cache-Bộ nhớ trong
Trước khi khảo sát vận hành của cache, ta xét đến các khái niệm liên quan:
- Thành công cache (cache hit): bộ xử lý tìm gặp phần tử cần đọc (ghi) trong cache
- Thất bại cache (cache miss): bộ xử lý không gặp phần tử cần đọc (ghi) trong cache
- Trừng phạt thất bại cache (cache penalty): Thời gian cần thiết để xử lý một thất bại
cache. Thời gian bao gồm thời gian thâm nhập bộ nhớ trong cộng với thời gian chuyển khối
chứa từ cần đọc từ bộ nhớ trong đến cache. Thời gian này tuỳ thuộc vào kích thước của khối.
Để hiểu được cách vận hành của cache, ta lần lượt xem xét và trả lời bốn câu hỏi liên
quan đến các tình huống khác nhau xảy ra trong bộ nhớ trong.
Câu hỏi 1: Phải để một khối bộ nhớ vào chỗ nào của cache (sắp xếp khối)?
Câu hỏi 2: Làm sao để tìm một khối khi nó hiện diện trong cache (nhận diện khối)?
Câu hỏi 3: Khối nào phải được thay thế trong trường hợp thất bại cache (thay thế
khối)?
Câu hỏi 4: Việc gì xảy ra khi ghi vào bộ nhớ (chiến thuật ghi)?

Trả lời câu hỏi 1: Phải để một khối bộ nhớ vào chỗ nào của cache (sắp xếp khối)?
Một khối bộ nhớ được đặt vào trong cache theo một trong ba cách sau:
- Kiểu tương ứng trực tiếp: Nếu mỗi khối bộ nhớ chỉ có một vị trí đặt khối duy nhất
trong cache được xác định theo công thức: K= i mod n

Giáo trình Kiến trúc máy tính 51


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Trong đó:
K: vị trí khối đặt trong cache
i: số thứ tự của khối trong bộ nhớ trong
n: số khối của cache
Như vậy, trong kiểu xếp đặt khối này, mỗi vị trí đặt khối trong cache có thể chứa một
trong các khối trong bộ nhớ cách nhau xn khối (x: 0,1,...,m; n: số khối của cache)
- Kiểu hoàn toàn phối hợp: trong kiểu đặt khối này, một khối trong bộ nhớ trong có
thể được đặt vào vị trí bất kỳ trong cache.
Như vậy, trong kiểu xếp đặt khối này, mỗi vị trí đặt khối trong cache có thể chứa một
trong tất cả các khối trong bộ nhớ.
- Kiểu phối hợp theo tập hợp: với cách tổ chức này, cache bao gồm các tập hợp của
các khối cache. Mỗi tập hợp của các khối cache chứa số khối như nhau. Một khối của bộ nhớ
trong có thể được đặt vào một số vị trí khối giới hạn trong tập hợp được xác định bởi công
thức: K= i mod s
Trong đó:
K: vị trí khối đặt trong cache
i: số thứ tự của khối trong bộ nhớ trong
s: số lượng tập hợp trong cache.
Trong cách đặt khối theo kiểu phối hợp theo tập hợp, nếu tập hợp có m khối, sự tương
ứng giữa các khối trong bộ nhớ trong và các khối của cache được gọi là phối hợp theo tập
hợp m khối.
Nếu m=1 (mỗi tập hợp có 1 khối), ta có kiểu tương ứng trực tiếp.
Nếu m=n (n: số khối của cache), ta có kiểu tương hoàn toàn phối hợp.
Hiện nay, phần lớn các cache của các bộ xử lý đều là kiểu tương ứng trực tiếp hay
kiểu phối hợp theo tập hợp (mỗi tập hợp gồm 2 hoặc 4 khối).

Trả lời câu hỏi 2: Làm sao để tìm một khối khi nó hiện diện trong cache (nhận
diện khối)?
Mỗi khối của cache đều có một nhãn địa chỉ cho biết số thứ tự của các khối bộ
nhớ trong đang hiện diện trong cache. Nhãn của một khối của cache có thể chứa thông tin
cần thiết được xem xét để biết được các khối nằm trong cache có chứa thông tin mà bộ xử lý
cần đọc hay không. Tất cả các nhãn đều được xem xét song song (trong kiểu tương ứng trực
tiếp và phối hợp theo tập hợp) vì tốc độ là yếu tố then chốt. Để biết xem một khối của của
cache có chứa thông tin mà bộ xử lý cần tìm hay không, người ta thêm một bit đánh dấu
Giáo trình Kiến trúc máy tính 52
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
(valid bit) vào nhãn để nói lên khối đó có chứa thông tin mà bộ xử lý cần tìm hay không.
Trả lời câu hỏi 3: Khối nào phải được thay thế trong trường hợp thất bại cache
(thay thế khối)?
Khi có thất bại cache, bộ điều khiển cache thâm nhập bộ nhớ trong và chuyển khối mà
bộ xử lý cần đọc (ghi) vào cache. Như vậy, khối nào trong cache sẽ bị thay thế bới khối mới
được chuyển lên. Đối với kiểu tương ứng trực tiếp, vị trí đặt khối không có sự lựa chọn, nó
được xác định bởi trường chỉ số khối cache trong địa chỉ của từ cần đọc(ghi). Nếu cache là
kiểu hoàn toàn phối hợp hay phối hợp theo tập hợp thì khi thất bại phải chọn lựa thay thế
trong nhiều khối. Có bốn chiến thuật chủ yếu dùng để chọn khối thay thế trong cache:
- Thay thế ngẫu nhiên: để phân bố đồng đều việc thay thế, các khối cần thay thế
trong cache được chọn ngẫu nhiên.
- Khối xưa nhất (LRU: Least Recently Used): các khối đã được thâm nhập sẽ được
đánh dấu và khối bị thay thế là khối không được dùng từ lâu nhất.
- Vào trước ra trước (FIFO: First In First Out): Khối được đưa vào cache đầu tiên,
nếu bị thay thế, khối đó sẽ được thay thế trước nhất.
- Tần số sử dụng ít nhất (LFU: Least Frequently Used): Khối trong cache được tham
chiếu ít nhất.
Điều này sử dụng hệ quả của nguyên tắc sử dụng ô nhớ theo thời gian: nếu các khối
mới được dùng có khả năng sẽ được dùng trong tương lai gần, khối bị thay thế là khối không
dùng trong thời gian lâu nhất.

Trả lời câu hỏi 4: Việc gì xảy ra khi ghi vào bộ nhớ (chiến thuật ghi)?
Thông thường bộ xử lý thâm nhập cache để đọc thông tin. Chỉ có khoảng 15%
các thâm nhập vào cache là để thực hiện thao tác ghi (con số này là 33% với các tính toán
vectơ-vectơ và 55% đối với các phép dịch chuyển ma trận). Như vậy, để tối ưu hoá các hoạt
động của cache, các nhà thiết kế tìm cách tối ưu hoá việc đọc bởi vì các bộ xử lý phải đợi đến
khi việc đọc hoàn thành nhưng sẽ không đợi đến khi việc ghi hoàn tất. Hơn nữa, một khối có
thể được đọc, so sánh và như thế việc đọc một khối có thể được bắt đầu khi chỉ số khối được
biết. Nếu thao tác đọc thành công, dữ liệu ô nhớ cần đọc sẽ được giao ngay cho bộ xử lý.
Chú ý rằng, khi một khối được ánh xạ từ bộ nhớ trong vào cache, việc đọc nội dung của khối
cache không làm thay đổi nội dung của khối so với khối còn nằm trong bộ nhớ trong.
Đối với việc ghi vào bộ nhớ thì không giống như trên, việc thay đổi nội dung của một
khối không thể bắt đầu trước khi nhãn được xem xét để biết có thành công hay thất bại. Thao
tác ghi vào bộ nhớ sẽ tốn nhiều thời gian hơn thao tác đọc bộ nhớ. Trong việc ghi bộ nhớ còn
Giáo trình Kiến trúc máy tính 53
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
có một khó khăn khác là bộ xử lý cho biết số byte cần phải ghi, thường là từ 1 đến 8 byte. Để
đảm bảo đồng nhất dữ liệu khi lưu trữ, có hai cách chính để ghi vào cache:
- Ghi đồng thời: Thông tin được ghi đồng thời vào khối của cache và khối của bộ nhớ
trong. Cách ghi này làm chậm tốc độ chung của hệ thống. Các ngoại vi có thể truy cập bộ
nhớ trực tiếp.
- Ghi lại: Để đảm bảo tốc độ xử lý của hệ thống, thông tin cần ghi chỉ được ghi
vào khối trong cache. Để quản lý sự khác biệt nội dung giữa khối của cache và khối của bộ
nhớ trong, một bit trạng thái (Dirty bit hay Update bit) được dùng để chỉ thị. Khi một thao tác
ghi vào trong cache, bit trạng thái (Dirty bit hay Update bit) của khối cache sẽ được thiết lập.
Khi một khối bị thay thế, khối này sẽ được ghi lại vào bộ nhớ trong chỉ khi bit trạng thái đã
được thiết lập. Với cách ghi này, các ngoại vi liên hệ đến bộ nhớ trong thông qua cache.
Khi có một thất bại ghi vào cache thì phải lựa chọn một trong hai giải pháp sau:
- Ghi có nạp: khối cần ghi từ bộ nhớ trong được nạp vào trong cache như mô tả ở trên.
Cách này thường được dùng trong cách ghi lại.
- Ghi không nạp: khối được thay đổi ở bộ nhớ trong không được đưa vào cache.
Cách này được dùng trong cách ghi đồng thời.
Trong các tổ chức có nhiều hơn một bộ xử lý với các tổ chức cache và bộ nhớ chia sẻ,
các vấn đề liên quan đến tính đồng nhất của dữ liệu cần được đảm bảo. Sự thay đổi dữ liệu
trên một cache riêng lẻ sẽ làm cho dữ liệu trên các hệ thống cache và bộ nhớ liên quan không
đồng nhất. Vấn đề trên có thể được giải quyết bằng một trong các hệ thống cache tổ chức như
sau:
Mỗi bộ điều khiển cache sẽ theo dõi các thao tác ghi vào bộ nhớ từ các bộ phận khác.
Nếu thao tác ghi vào phần bộ nhớ chia sẻ được ánh xạ vào cache của nó quản lý, bộ điều
khiển cache sẽ vô hiệu hoá sự thâm nhập này. Chiến lược này phụ thuộc vào cách ghi đồng
thời trên tất cả các bộ điều khiển cache.
- Một vi mạch được dùng để điều khiển việc cập nhật, một thao tác ghi vào bộ nhớ từ
một cache nào đó sẽ được cập nhật trên các cache khác.
- Một vùng nhớ chia sẻ cho một hay nhiều bộ xử lý thì không được ánh xạ lên cache.
Như vậy, tất cả các thâm nhập vào vùng nhớ chia sẻ này đều bị thất bại cache.

4.2. HIỆU QUẢ CỦA CACHE


Thông thường người ta dùng thời gian thâm nhập trung bình bộ nhớ trong đánh giá
hiệu quả của cache.
Thời gian thâm nhập thành công là thời gian thâm nhập vào một thông tin trong một
Giáo trình Kiến trúc máy tính 54
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
thành công cache. Tỉ số thất bại là tỉ số giữa số thất bại cache và tổng số thâm nhập cache.
Thời gian thâm nhập thành công và trừng phạt thất bại được đo bằng đơn vị thời gian
hoặc bằng chu kỳ xung nhịp (clock cycle).
Trong việc tìm kiếm thông tin trong cache phải chú ý làm giảm tỉ lệ thất bại mà
các nguyên nhân chính là như sau:
- Khởi động: trong lần thâm nhập cache đầu tiên, không có thông tin cần tìm trong
cache nên phải chuyển khối chứa thông tin đó vào cache.
- Khả năng: vì cache không thể chứa tất cả các khối cần thiết cho việc thi hành một
chương trình nên gặp thất bại do cache thiếu khả năng, do đó một khối bị lấy ra khỏi cache
rồi lại được đưa vào sau này.
- Tranh chấp: Nếu chiến thuật thay thế các khối là phối hợp theo tập hợp hay tương ứng trực tiếp, các
thất bại do tranh chấp xảy ra vì một khối có thể bị đưa ra khỏi cache rồi được gọi vào sau đó nếu có nhiều khối
phải được thay thế trong các tập hợp.
Ba nguyên nhân trên cho ta ý niệm về nguyên nhân thất bại, nhưng mô hình đơn giản
trên có những hạn chế của nó. Mô hình này giúp ta thấy một số liệu trung bình nhưng chưa
giải thích được từng thất bại một. Ví dụ, nếu tăng kích thước cache thì giảm thất bại do tranh
chấp và thất bại do khả năng vì cache càng lớn thì nhiều khối có thể được đưa vào. Tuy
nhiên, một thất bại có thể đi từ thất bại do khả năng đến thất bại do tranh chấp khi kích thước
của cache thay đổi. Khi nêu ba nguyên nhân trên ta đã không lưu ý đến cách thức thay
thế các khối. Cách thức này có thể dẫn đến những vận hành bất thường như là tỉ lệ thất
bại cao lên khi độ phối hợp lớn lên.

4.3. CÁC MỨC CỦA CACHE


Việc dùng cache trong có thể làm cho sự cách biệt giữa kích thước và thời gian thâm
nhập giữa cache trong và bộ nhớ trong càng lớn. Người ta đưa vào nhiều mức cache:
+ Cache mức một (L1 cache): thường là cache trong (on-chip cache; nằm bên trong
CPU).
+ Cache mức hai (L2 cache) thường là cache ngoài (off-chip cache; cache này nằm
bên ngoài CPU).
Ngoài ra, trong một số hệ thống (PowerPC G4, IBM S/390 G4, Itanium của Intel) còn
có tổ chức cache mức ba (L3 cache), đây là mức cache trung gian giữa cache L2 và một thẻ
bộ nhớ.

Giáo trình Kiến trúc máy tính 55


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 9. THIẾT BỊ NHẬP XUẤT
Mục tiêu:
- Trình bày được cấu tạo và các vận hành của các loại thiết bị lưu trữ
- Trình bày được các phương pháp để đảm bảo an toàn dữ liệu lưu trữ
- Trình bày được các kiến thức về hệ thống kết nối cơ bản, các bộ phận bên trong máy
tính, cách giao tiếp giữa các thiết bị ngoại vi và bộ xử lý.
Bộ xử lý của máy tính điện tử liên hệ với bên ngoài nhờ các bộ phận xuất nhập (I/O)
mà ta còn gọi là ngoại vi.
Các ngoại vi thông dụng là:
- Màn hình, bàn phím, chuột, máy in, thẻ mạng... là những bộ phận giúp con người sử
dụng máy tính dễ dàng.
- Các đĩa từ, băng từ, đĩa quang, các loại thẻ nhớ là những bộ phận lưu trữ thông tin
trữ lượng lớn.
Tất cả các ngoại vi đều được nối vào bộ xử lý và bộ nhớ trong bằng một hệ thống dây
nối phức tạp vì tính đa dạng của các ngoại vi.
Trong chương này chúng ta tập trung nói đến các bộ phận lưu trữ số liệu có trữ lượng cao
(đĩa từ, đĩa quang, băng từ) và sự kết nối các bộ phận này vào máy tính

1. CÁC THIẾT BỊ LƯU TRỮ


1.1. ĐĨA TỪ
Dù rằng công nghệ mới không ngừng phát minh nhiều loại bộ phận lưu trữ một lượng
thông tin lớn nhưng đĩa từ vẫn giữ vị trí quan trọng từ năm 1965. Đĩa từ có hai nhiệm vụ
trong máy tính.
- Lưu trữ dài hạn các tập tin.
- Thiết lập một cấp bộ nhớ bên dưới bộ nhớ trong để làm bộ nhớ ảo lúc chạy chương
trình.
Do đĩa mềm dần được các thiết bị lưu trữ khác có các tính năng ưu việt hơn nên chúng
ta không xét đến thiết bị này trong chương trình mà chỉ nói đến đĩa cứng. Trong tài liệu này
mô tả một cách khái quát cấu tạo, cách vận hành cũng như đề cập đến các tính chất quan
trọng của đĩa cứng.
Một đĩa cứng chứa nhiều lớp đĩa (từ 1 đến 4) quay quanh một trục khoảng 3.600-
15.000 vòng mỗi phút. Các lớp đĩa này được làm bằng kim loại với hai mặt được phủ một
chất từ tính. Đường kính của đĩa thay đổi từ 1,3 inch đến 8 inch. Mỗi mặt của một lớp đĩa
được chia thành nhiều đường tròn đồng trục gọi là rãnh. Thông thường mỗi mặt của một lớp
đĩa có từ 10.000 đến gần 30.000 rãnh. Mỗi rãnh được chia thành nhiều cung (sector) dùng
Giáo trình Kiến trúc máy tính 56
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
chứa thông tin. Một rãnh có thể chứa từ 64 đến 800 cung. Cung là đơn vị nhỏ nhất mà máy
tính có thể đọc hoặc viết (thông thường khoảng 512 bytes). Chuỗi thông tin ghi trên mỗi
cung gồm có: số thứ tự của cung, một khoảng trống, số liệu của cung đó bao gồm cả các mã
sửa lỗi, một khoảng trống, số thứ tự của cung tiếp theo.
Với kỹ thuật ghi mật độ không đều, tất cả các rãnh đều có cùng một số cung, điều này
làm cho các cung dài hơn ở các rãnh xa trục quay có mật độ ghi thông tin thấp hơn mật độ
ghi trên các cung nằm gần trục quay.

Hình 9.1: Cấu tạo của một đĩa cứng

Với công nghệ ghi với mật độ đều, người ta cho ghi nhiều thông tin hơn ở các rãnh xa
trục quay. Công nghệ ghi này ngày càng được dùng nhiều với sự ra đời của các chuẩn giao
diện thông minh như chuẩn SCSI.

Hình 9.2: Mật độ ghi dữ liệu trên các loại đĩa cứng

Để đọc hoặc ghi thông tin vào một cung, ta dùng một đầu đọc ghi di động áp vào mỗi
mặt của mỗi lớp đĩa. Các đầu đọc/ghi này được gắn chặt vào một thanh làm cho chúng cùng
di chuyển trên một đường bán kính của mỗi lớp đĩa và như thế tất cả các đầu này đều ở trên
những rãnh có cùng bán kính của các lớp đĩa. Từ “trụ” (cylinder) được dùng để gọi tất cả các
rãnh của các lớp đĩa có cùng bán kính và nằm trên một hình trụ.
Người ta luôn muốn đọc nhanh đĩa từ nên thông thường ổ đĩa đọc nhiều hơn số dữ liệu

Giáo trình Kiến trúc máy tính 57


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
cần đọc; người ta nói đây là cách đọc trước. Để quản lý các phức tạp khi kết nối (hoặc ngưng
kết nối) lúc đọc (hoặc ghi) thông tin, và việc đọc trước, ổ đĩa cần có bộ điều khiển đĩa.
Công nghiệp chế tạo đĩa từ tập trung vào việc nâng cao dung lượng của đĩa mà đơn vị
đo lường là mật độ trên một đơn vị bề mặt.

1.2. ĐĨA QUANG


Các thiết bị lưu trữ quang rất thích hợp cho việc phát hành các sản phẩm văn hoá, sao
lưu dữ liệu trên các hệ thống máy tính hiện nay. Ra đời vào năm 1978, đây là sản phẩm của
sự hợp tác nghiên cứu giữa hai công ty Sony và Philips trong công nghiệp giải trí. Từ năm
1980 đến nay, công nghiệp đĩa quang phát triển mạnh trong cả hai lĩnh vực giải trí và lưu trữ
dữ liệu máy tính. Quá trình đọc thông tin dựa trên sự phản chiếu của các tia laser năng lượng
thấp từ lớp lưu trữ dữ liệu. Bộ phận tiếp nhận ánh sáng sẽ nhận biết được những điểm mà tại
đó tia laser bị phản xạ mạnh hay biến mất do các vết khắc (pit) trên bề mặt đĩa. Các tia phản
xạ mạnh chỉ ra rằng tại điểm đó không có lỗ khắc và điểm này được gọi là điểm nền (land).
Bộ nhận ánh sáng trong ổ đĩa thu nhận các tia phản xạ và khuếch tán được khúc xạ từ
bề mặt đĩa. Khi các nguồn sáng được thu nhận, bộ vi xử lý sẽ dịch các mẫu sáng thành các bit
dữ liệu hay âm thanh. Các lỗ trên CD sâu 0,12 micron và rộng 0,6 micron (1 micron bằng
một phần ngàn mm). Các lỗ này được khắc theo một track hình xoắn ốc với khoảng cách 1,6
micron giữa các vòng, khoảng 16.000 track/inch. Các lỗ (pit) và nền (land) kéo dài khoản 0,9
đến 3,3 micron. Track bắt đầu từ phía trong và kết thúc ở phía ngoài theo một đường khép
kín các rìa đĩa 5mm. Dữ liệu lưu trên CD thành từng khối, mỗi khối chứa 2.352 byte. Trong
đó, 304 byte chứa các thông tin về bit đồng bộ, bit nhận dạng (ID), mã sửa lỗi (ECC), mã phát hiện
lỗi (EDC).
Còn lại 2.048 byte chứa dữ liệu. Tốc độ đọc chuẩn của CD-ROM là 75 khối/s hay
153.600 byte/s hay 150KB/s (1X).
Dưới đây là một số loại đĩa quang thông dụng:
- CD (Compact Disk): Đĩa quang không thể xoá được, dùng trong công nghiệp giải trí
(các đĩa âm thanh được số hoá). Chuẩn đĩa có đường kính 12 cm, âm thanh phát từ đĩa
khoảng 60 phút (không dừng).
- CD-ROM (Compact Disk Read Only Memory): Đĩa không xoá dùng để chứa các dữ
liệu máy tính. Chuẩn đĩa có đường kính 12 cm, lưu trữ dữ liệu hơn 650 MB. Khi phát hành,
đĩa CD-ROM đã có chứa nội dung. Thông thường, dĩa CD-ROM được dùng để chứa các
phần mềm và các chương trình điều khiển thiết bị.
- CD-RW (CD-Rewritable): Giống như đĩa CD, đĩa mới chưa có thông tin, người dùng
Giáo trình Kiến trúc máy tính 58
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
có thể ghi dữ liệu lên đĩa, xoá và ghi lại dữ liệu trên đĩa nhiều lần
- DVD (Digital Video Disk - Digital Versatile Disk): Ra đời phục vụ cho công nghiệp
giải trí, đĩa chứa các hình ảnh video được số hoá. Ngày nay, DVD được sử dụng rộng rãi
trong các ứng dụng công nghệ thông tin. Kích thước đĩa có hai loại: 8cm và 12 cm. Đĩa DVD
có thể chứa dữ liệu trên cả hai mặt đĩa, dung lượng tối đa lên đến 17GB.
Các thông số kỹ thuật của đĩa DVD-ROM (loại đĩa chỉ đọc) so với CD-ROM. Tốc độ
đọc chuẩn (1X) của DVD là 1.3MB/s (1X của DVD tương đương khoảng 9X của CDROM).
- DVD-R (DVD-Recordable): Giống như đĩa DVD-ROM, người dùng có thể ghi dữ liệu
lên đĩa một lần và đọc được nhiều lần. Đĩa này chỉ có thể ghi được trên một mặt đĩa, dung
lượng ghi trên mỗi mặt tối đa là 4.7 GB.
- DVD-RW (DVD-Rewritable): Giống như đĩa DVD-ROM, người dùng có thể ghi, xoá
và ghi lại dữ liệu lên đĩa nhiều lần.. Đĩa này cũng có thể ghi được trên một mặt đĩa, dung
lượng ghi trên mỗi mặt tối đa là 4.7 GB.
Với các đặc tính của đĩa quang, giá thành ngày càng thấp, được xem như một phương
tiện thích hợp để phân phối các phần mềm cho máy vi tính. Ngoài ra, đĩa quang còn được
dùng để lưu trữ lâu dài các dữ liệu thay thế cho băng từ.

1.3. CÁC LOẠI THẺ NHỚ


Hiện nay, thẻ nhớ là một trong những công nghệ mới nhất được dùng làm thiết bị lưu
trữ. Thẻ nhớ flash là một dạng bộ nhớ bán dẫn EEPROM(công nghệ dùng để chế tạo các chip
BIOS trên các vỉ mạch chính), được cấu tạo bởi các hàng và các cột. Mỗi vị trí giao nhau là
một ô nhớ gồm có hai transistor, hai transistor này cách nhau bởi một lớp ô-xít mỏng.
Tốc độ, yêu cầu về dòng điện cung cấp thấp và đặc biệt với kích thước nhỏ gọn của
các loại thẻ nhớ làm cho kiểu bộ nhớ này được dùng rộng rãi trong công nghệ lưu trữ và giải
trí hiện nay.

2. GIAO TIẾP GIỮA BỘ XỬ LÝ VÀ BỘ NHỚ TRONG


Trong máy tính, bộ xử lý và bộ nhớ trong liên lạc với các ngoại vi bằng bus. Bus là
một hệ thống các dây cáp nối (khoảng 50 đến 100 sợi cáp riêng biệt) trong đó một nhóm các
cáp được định nghĩa chức năng khác nhau bao gồm: các đường dữ liệu, các đường địa chỉ,
các dây điều khiển, cung cấp nguồn. Dùng bus có 2 ưu điểm là giá tiền thấp và dễ thay đổi
ngoại vi. Người ta có thể gỡ bỏ một ngoại vi hoặc thêm vào ngoại vi mới cho các máy tính
dùng cùng một hệ thống bus.
Giá tiền thiết kế và thực hiện một hệ thống bus là rẻ, vì nhiều ngã vào/ra cùng chia sẻ

Giáo trình Kiến trúc máy tính 59


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
một số đường dây đơn giản. Tuy nhiên, điểm thất lợi chính của bus là tạo ra nghẽn cổ chai, điều
này làm giới hạn lưu lượng vào/ra tối đa. Các hệ thống máy tính dùng cho quản lý phải dùng
thường xuyên các ngoại vi, nên khó khăn chính là phải có một hệ thống bus đủ khả năng phục vụ
bộ xử lý trong việc liên hệ với các ngoại vi.
Một trong những lý do khiến cho việc thiết kế một hệ thống bus khó khăn là tốc độ tối đa
của bus bị giới hạn bởi các yếu tố vật lý như chiều dài của bus và số bộ phận được mắc vào
bus.
Các bus thường có hai loại: bus hệ thống nối bộ xử lý với bộ nhớ (system bus, Front
Side Bus-FSB) và bus nối ngoại vi (bus vào/ra – I/O bus). Bus vào/ra có thể có chiều dài lớn
và có khả năng nối kết với nhiều loại ngoại vi, các ngoại vi này có thể có lưu lượng thông tin
khác nhau, định dạng dữ liệu khác nhau. Bus kết nối bộ xử lý với bộ nhớ thì ngắn và thường
thì rất nhanh. Trong giai đoạn thiết kế bus kết nối bộ xử lý với bộ nhớ, nhà thiết kế biết trước
các linh kiện và bộ phận mà ông ta cần kết nối lại, còn nhà thiết kế bus vào/ra phải thiết kế
bus thoả mãn nhiều ngoại vi có mức trì hoãn và lưu lượng rất khác nhau.

Hình 9.2: Hệ thống bus trong một máy tính


Hiện nay, trong một số hệ thống máy tính, bus nối ngoại vi được phân cấp thành hai
hệ thống bus con. Trong đó, bus tốc độ cao (high-speed bus) hỗ trợ kết nối các thiết bị tốc độ
cao như SCSI, LAN, Graphic, Video,…và hệ thống bus mở rộng (expansion bus) được thiết
kế để kết nối với các ngoại vi yêu cầu tốc độ thấp như: modem, cổng nối tiếp, cổng song
song…Giữa hai hệ thống bus nối ngoại vi trong tổ chức hệ thống bus phân cấp là một giao
diện đệm.

Giáo trình Kiến trúc máy tính 60


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Ta có thể có nhiều lựa chọn trong việc thiết kế một bus, như trong bảng sau:

Đặc tính của bus Bus hệ thống Bus nối ngoại vi

Độ rộng của bus Đường dây địa chỉ và số Đường địa chỉ và số liệu được
liệu khác nhau đa hợp
Độ rộng bus số liệu Càng rộng càng nhanh Càng hẹp càng ít tốn kém
Số từ được chuyền Chuyển đơn giản mỗi lần một
Chuyển nhiều từ
từ.
Chủ nhân của bus Nhiều Một
Chuyển từng gói Có. Cần nhiều chủ nhân bus Không. Kết nối một lần và
chuyển hết thông tin
Xung nhịp Đồng bộ Bất đồng bộ

Hình 9.4: Các lựa chọn chính yếu cho một bus
Trong bảng 9.4 có khái niệm sau đây liên quan đến các chủ nhân của bus – các bộ
phận có thể khởi động một tác vụ đọc hoặc viết trên bus. Ví dụ bộ xử lý luôn là một chủ nhân
của bus. Một bus có nhiều chủ nhân khi nó có nhiều bộ xử lý, hoặc khi các ngoại vi có thể
khởi động một tác vụ có dùng bus. Nếu có nhiều chủ nhân của bus thì phải có một cơ chế
trọng tài để quyết định chủ nhân nào được quyền chiếm lĩnh bus. Một bus có nhiều chủ, có
thể cấp một dãi thông rộng (bandwidth) bằng cách sử dụng các gói tin thay vì dùng bus cho
từng tác vụ riêng lẻ. Kỹ thuật sử dụng gói tin được gọi là phân chia nhỏ tác vụ (dùng bus
chuyển gói). Một tác vụ đọc được phân tích thành một tác vụ yêu cầu đọc (tác vụ này chứa
địa chỉ cần đọc) và một tác vụ trả lời của bộ nhớ (chứa thông tin cần đọc). Mỗi tác vụ đều có một
nhãn cho biết loại của tác vụ. Trong kỹ thuật phân chia nhỏ tác vụ, trong khi bộ nhớ đọc các thông
tin ở địa chỉ đã xác định thì bus được dành cho các chủ khác.
Bus hệ thống là một bus đồng bộ, nó gồm có một xung nhịp trong các đường dây điều
khiển cùng một nghi thức cho các địa chỉ và các số liệu đối với xung nhịp. Do có rất ít hoặc
không có mạch logic nào dùng để quyết định hành động kế tiếp nào cần thực hiện, nên các
bus đồng bộ vừa nhanh, vừa rẻ tiền. Trên bus này, tất cả đều phải vận hành với cùng một
xung nhịp.
Ngược lại, các bus vào/ra thuộc loại bus bất đồng bộ, các bus này không có xung nhịp
đồng bộ trong hệ thống bus. Thay vào đó có các nghi thức bắt tay với các quy định riêng về
thời gian, được dùng giữa các bộ phận phát và bộ phận thu của bus. Bus bất đồng bộ rất dễ

Giáo trình Kiến trúc máy tính 61


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
thích ứng với nhiều ngoại vi và cho phép nối dài bus mà không phải lo ngại gì đến vấn đề
đồng bộ. Bus bất đồng bộ cũng dễ thích ứng với những thay đổi công nghệ.

3. GIAO TIẾP GIỮA BỘ XỬ LÝ VỚI CÁC BỘ PHẬN VÀO RA


Bộ xử lý dùng 2 cách để liên lạc với các bộ phận vào ra:
Cách thứ nhất, thường được dùng: là cách dùng một vùng địa chỉ của bộ nhớ làm
vùng địa chỉ của các ngoại vi. Khi đọc hay viết vào vùng địa chỉ này của bộ nhớ là liên hệ
đến các ngoại vi.
Cách thứ hai, dùng mã lệnh riêng biệt cho vào/ra (tức là có các lệnh vào/ra riêng,
không trùng với lệnh đọc hay viết vào ô nhớ). Trong trường hợp này, bộ xử lý gởi một tín
hiệu điều khiển cho biết địa chỉ đang dùng là của một ngoại vi.
Vi mạch Intel 8086 và máy IBM 370 là các ví dụ về bộ xử lý dùng lệnh vào/ra riêng biệt.
Dù dùng cách nào để định vị vào/ra thì mỗi bộ phận vào/ra đều có các thanh ghi để
cung cấp thông tin về trạng thái và về điều khiển. Bộ phận vào/ra dùng bit trạng thái “sẵn
sàng” để báo cho bộ xử lý nó sẵn sàng nhận số liệu. Định kỳ bộ xử lý xem xét bít này để biết
bộ phận vào ra có sẵn sàng hay không. Phương pháp này là phương pháp thăm dò (polling).
Và nhược điểm của phương pháp này là làm mất thời gian của bộ xử lý vì định kỳ phải thăm
dò tính sẵn sàng của các thiết bị ngoại vi. Điều này đã được nhận thấy từ lâu và đã dẫn đến
phát minh ra ngắt quãng (interrupt) để báo cho bộ xử lý biết lúc có một bộ phận vào/ra cần
được phục vụ.
Việc dùng ngắt quãng làm cho bộ xử lý không mất thời gian thăm dò xem các ngoại vi
có yêu cầu phục vụ hay không, nhưng bộ xử lý phải mất thời gian chuyển dữ liệu. Thông
thường việc trao đổi số liệu giữa ngoại vi và CPU là theo khối số liệu, nên vi mạch thâm
nhập trực tiếp bộ nhớ trong (DMA: Direct Memory Access) được dùng trong nhiều máy tính
để chuyển một khối nhiều từ mà không có sự can thiệp của CPU.

Hình 9.5. Sơ đồ hoạt động của hệ thống bus có vi mạch DMA

Giáo trình Kiến trúc máy tính 62


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
DMA là một vi mạch chức năng đặc biệt. Nó chuyển số liệu giữa ngoại vi và bộ nhớ
trong, trong lúc đó CPU rãnh rỗi để làm công việc khác. Vậy DMA nằm ngoài CPU và tác
động như là một chủ nhân của bus. Bộ xử lý khởi động các thanh ghi của DMA, các thanh
ghi này chứa địa chỉ ô nhớ và số byte cần chuyển. DMA chủ động chuyển số liệu và khi
chấm dứt thì trả quyền điều khiển cho bộ xử lý.
Vi mạch DMA càng thông minh thì công việc của CPU càng nhẹ đi. Nhiều vi mạch
được gọi là bộ xử lý vào/ra (hay bộ điều khiển vào/ra) thực hiện công việc mình theo một
chương trình cố định (chứa trong ROM), hay theo một chương trình mà hệ điều hành nạp vào
bộ nhớ trong. Hệ điều hành thiết lập một hàng chờ đợi gồm các khối điều khiển các bộ phận
vào/ ra. Các khối chứa các thông tin như là vị trí của số liệu (nguồn và đích) và số số liệu.
Các bộ xử lý vào/ra lấy các thông tin này trong hàng chờ đợi, thực hiện các việc cần phải làm
và gởi về CPU tín hiệu ngắt khi đã thực hiện xong công việc.
Một máy tính có bộ xử lý vào/ra được xem như một máy tính đa xử lý vì DMA giúp
cho máy tính thực hiện cùng lúc nhiều quá trình. Tuy nhiên bộ xử lý vào/ra không tổng quát
bằng các bộ xử lý vì chúng chỉ làm được một số việc nhất định. Hơn nữa bộ xử lý vào/ra
không chế biến số liệu như các bộ xử lý thường làm. Nó chỉ di chuyển số liệu từ nơi này sang
nơi khác.
* Một số biện pháp an toàn dữ liệu trong việc lưu trữ thông tin trong đĩa từ
Người ta thường chú trọng đến sự an toàn trong lưu giữ thông tin ở đĩa từ hơn là sự an
toàn của thông tin trong bộ xử lý. Bộ xử lý có thể hư mà không làm tổn hại đến thông tin. Ổ
đĩa của máy tính bị hư có thể gây ra các thiệt hại rất to lớn.
Một phương pháp giúp tăng cường độ an toàn của thông tin trên đĩa từ là dùng một
mảng đĩa từ. Mảng đĩa từ này được gọi là Hệ thống đĩa dự phòng (RAID -Redundant Array of
Independent Disks). Cách lưu trữ dư thông tin làm tăng giá tiền và sự an toàn (ngoại trừ RAID 0).
Cơ chế RAID có các đặc tính sau:
1. RAID là một tập hợp các ổ đĩa cứng (vật lý) được thiết lập theo một kỹ thuật mà hệ điều hành chỉ
“nhìn thấy” chỉ là một ổ đĩa (logic) duy nhất.
2. Với cơ chế đọc/ghi thông tin diễn ra trên nhiều đĩa (ghi đan chéo hay soi gương).
3. Trong mảng đĩa có lưu các thông tin kiểm tra lỗi dữ liệu; do đó, dữ liệu có thể được
phục hồi nếu có một đĩa trong mảng đĩa bị hư hỏng.
Tuỳ theo kỹ thuật thiết lập, RAID có thể có các mức như:
- Raid mức 0: Thực ra, kỹ thuật này không nằm trong số các kỹ thuật có cơ chế an
toàn dữ liệu. Khi mảng được thiết lập theo RAID 0, ổ đĩa logic có được (mà hệ điều hành
Giáo trình Kiến trúc máy tính 63
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
nhận biết) có dung dượng bằng tổng dung lượng của các ổ đĩa thành viên. Điều này giúp cho
người dùng có thể có một ổ đĩa logic có dung lượng lớn hơn rất nhiều so với dung lượng thật
của ổ đĩa vật lý cùng thời điểm. Dữ liệu được ghi phân tán trên tất cả các đĩa trong mảng.
Đây chính là sự khác biệt so với việc ghi dữ liệu trên các đĩa riêng lẻ bình thường bởi vì thời
gian đọc-ghi dữ liệu trên đĩa tỉ lệ nghịch với số đĩa có trong tập hợp (số đĩa trong tập hợp
càng nhiều, thời gian đọc – ghi dữ liệu càng nhanh).
- Raid mức 1: Đây là dạng RAID cơ bản nhất có khả năng đảm bảo an toàn dữ liệu.
RAID 1 đòi hỏi ít nhất 2 đĩa cứng để làm việc. Dữ liệu được ghi vào 2 ổ giống hệt nhau.
Trong trường hợp một ổ bị trục trặc, ổ còn lại sẽ tiếp tục hoạt động bình thường. Có thể thay
thế ổ đĩa bị hỏng mà không phải lo lắng đến vấn đề thông tin thất lạc. Dung lượng cuối cùng
của hệ thống RAID 1 bằng dung lượng của ổ đơn.
- Raid mức 5:: Dữ liệu và bản sao lưu được chia lên tất cả các ổ cứng. Chúng ta quay
trở lại ví dụ về 8 đoạn dữ liệu (1-8) và giờ đây là 3 ổ đĩa cứng. Đoạn dữ liệu số 1 và số 2 sẽ
được ghi vào ổ đĩa 1 và 2 riêng rẽ, đoạn sao lưu của chúng được ghi vào ổ cứng 3. Đoạn số 3
và 4 được ghi vào ổ 1 và 3 với đoạn sao lưu tương ứng ghi vào ổ đĩa 2. Đoạn số 5, 6 ghi vào
ổ đĩa 2 và 3, còn đoạn sao lưu được ghi vào ổ đĩa 1 và sau đó trình tự này lặp lại, đoạn số 7,8
được ghi vào ổ 1, 2 và đoạn sao lưu ghi vào ổ 3 như ban đầu. Như vậy RAID 5 vừa đảm bảo
tốc độ có cải thiện, vừa giữ được tính an toàn cao.

Giáo trình Kiến trúc máy tính 64


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 10. CƠ BẢN VỀ ASSEMBLY
Mục tiêu:
- Trình bày được các thành phần cơ bản của Assembly
- Trình bày được cấu trúc của 1 chương trình Assembly
- Trình bày cách khai báo biến, toán tử, một số hàm cơ bản và các chế độ địa chỉ
Cấu trúc ngữ pháp của lệnh hợp ngữ trong giáo trình này được trình bày theo Macro
Assembler (MASM) dựa trên CPU 8086.
1. CÁC KHÁI NIỆM
1.1. TRƯỜNG TÊN
Tên có thể dài từ 1 đến 31 ký tự . Trong tên chứa các ký tự từ a-z , các số và các ký tự
đặc biệt sau : ?, @ , _ , $ và dấu. Không được phép có ký tự trống trong phần tên . Nếu trong
tên có ký tự . thì nó phải là ký tự đầu tiên. Tên không được bắt đầu bằng một số. ASM không
phân biệt giữa ký tự viết thường và viết hoa.

1.2. TRƯỜNG TOÁN TỬ


Đối với 1 lệnh trường toán tử chưá ký hiệu (sumbol) của mã phép toán (operation code
= OPCODE). ASM sẽ chuyển ký hiệu mã phép toán thành mã máy.
Thông thường ký hiệu mã phép toán mô tả chức năng của phép toán.
Ví dụ: ADD, SUB, INC, DEC, INT ...
Đối với chỉ dẫn của ASM, trường toán tử chưá một opcode giả (pseudooperation code
= pseudo-op). ASM không chuyển pseudo-op thành mã máy mà hướng dẫn ASM thực hiện
một việc gì đó ví dụ tạo ra một thủ tục, định nghĩa các biến ...
1.3. TRƯỜNG CÁC TOÁN HẠNG ( OPERAND(S) FIELD)
Trong một lệnh trường toán hạng chỉ ra các số liệu tham gia trong lệnh đó.
Một lệnh có thể không có toán hạng, có 1 hoặc 2 toán hạng .
Ví dụ : NOP; không có toán hạng
INC AX; 1 toán hạng
ADD WORD1,2; 2 toán hạng cộng 2 với nội dung của từ nhớ WORD1
Trong các lệnh 2 toán hạng toán hạng đầu là toán hạng đích ( destination operand).
Toán hạng đích thường là thanh ghi hoặc vị trí nhớ dùng để lưu trữ kết quả. Toán hạng thứ
hai là toán hạng nguồn. Toán hạng nguồn thường không bị thay đổi sau khi thực hiện lệnh.
Đối với một chỉ dẫn của ASM, trường toán hạng chứa một hoặc nhiều thông tin mà
ASM dùng để thực thi chỉ dẫn .

Giáo trình Kiến trúc máy tính 65


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
1.4. TRƯỜNG CHÚ THÍCH (COMMENT FIELD)
Trường chú thích là một tuỳ chọn của mệnh đề trong ngôn ngữ ASM. Lập trình viên
dùng trường chú thích để thuyết minh về câu lệnh. Điều này là cần thiết vì ngôn ngữ ASM là
ngôn ngữ cấp thấp ( low level) vì vậy sẽ rất khó hiểu chương trình nếu nó không được chú
thích một cách đầy đủ và rỏ ràng. Tuy nhiên không nên có chú thích đối với mọi dòng của
chương trình, kể cả nnhững lệnh mà ý nghĩa của nó đã rất rỏ ràng như:

NOP; không làm chi cả

Người ta dùng dấu chấm phẩy (;) để bắt đầu trường chú thích.
ASM cũng cho phép dùng toàn bộ một dòng cho chú thích để tạo một khoảng trống
ngăn cách các phần khác nhau cuả chương trình, ví dụ:
;
; khởi tạo các thanh ghi
;
MOV AX,0
MOV BX,0
1.5. CÁC SỐ
Một số nhị phân là một dãy các bit 0, 1 và kí tự kết thúc phải là b hoặc B;
Một số thập phân là một dãy các số thập phân và kết thúc bởi d hoặc D ( có thể không
cần)
Một số hexa phải bắt đầu bởi 1 chữ số thập phân và ký tự kết thúc phải là h hoặc H
Sau đây là biểu diễn số hợp lệ và không hợp lệ trong ASM:
Số Loại
10111 thập phân
10111b nhị phân
64223 thập phân
-2183D thập phân
1B4DH hex
1B4D số hex không hợp lệ
FFFFH số hex không hợp lệ
0FFFFH số hex

Giáo trình Kiến trúc máy tính 66


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
2. CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH
Một chương trình ngôn ngữ máy bao gồm:
2.1. CÁC KIỂU BỘ NHỚ
Độ lớn của mã và số liệu trong một chương trình được quy định bởi chỉ dẫn MODEL
nhằm xác định kiểu bộ nhớ dùng với chương trình. Cú pháp của chỉ dẫn MODEL như sau:
.MODEL <kiểu bộ nhớ>
Bảng sau cho thấy các kiểu bộ nhớ
MODEL Mô tả
-SMALL - code và data nằm trong 1 đoạn
-MEDIUM - code nhiều hơn 1 đoạn, data trong 1 đoạn
-COMPACT - data nhiều hơn 1 đoạn, code trong 1 đoạn
-LARGE - code và data lớn hơn 1 đoạn, array không quá 64kb.
-HUGE - code và data lớn hơn 1 đoạn, array quá 64kb

Thông thường các ứng dụng đơn giản chỉ đòi hỏi mã chương trình không quá 64KB
và dữ liệu cũng không lớn hơn 64KB nên ta sử dụng ở dạng Small.
. MODEL SMALL

2.2. ĐOẠN SỐ LIỆU


Đoạn số liệu của chương trình chứa các khai báo biến, khai báo hằng… để bắt đầu đoạn
số liệu chúng ta dùng chỉ dẫn DATA với cú pháp như sau:
.DATA
; khai báo các biến hằng và mảng
Ví dụ:
.DATA
WORD1 DW 2
WORD2 DW 5
MSG DB ‘ day la 1 chuoi ki tu’
MASK EQU 10001110B

2.3. ĐOẠN NGĂN XẾP


Mục đích của việc khai báo ngăn xếp là dành một vùng nhớ (vùng STACK) để lưu trữ
cho stack. Cú pháp của lệnh như sau:
.STACK size
Nếu không khai báo size thì 1KB được dành cho vùng stack.
Giáo trình Kiến trúc máy tính 67
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Ví dụ: . STACK 100h; dành 256 bytes cho vùng stack

2.4 ĐOẠN MÃ
Đoạn mã chứa các lệnh của chương trình. Bắt đầu đoạn mã bằng chỉ dẫn CODE
như sau:
. CODE
Bên trong đoạn mã các lệnh thường được tổ chức thành thủ tục (procedure) mà cấu trúc
của một thủ tục như sau:
name PROC
; body of the procedure
name ENDP
Sau đây là cấu trúc của một chương trình hợp ngữ mà phần CODE là thủ tục có tên là
main.
TITLE Chương trình hợp ngữ
.MODEL memory_type; kiểu bộ nhớ
.STACK size; khai báo dung lượng đoạn stack
.DATA
; định nghĩa số liệu tại đây
.CODE
main PROC ; main là tên chương trình
…………
CALL subname; gọi chương trình con
…………
main ENDP
subname PROC; định nghĩa chương trình con
RET
subname ENDP
END MAIN

3. BIẾN VÀ KHAI BÁO BIẾN


Khi khai báo 1 biến, hệ thống sẽ cấp một số ô nhớ cố định (địa chỉ).
Các toán tử dùng để định nghĩa các loại số liệu:
DB define byte
DW define word

Giáo trình Kiến trúc máy tính 68


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
DD define double word (2 từ liên tiếp)
DQ define quadword (4 từ liên tiếp)
Biến được khai báo trong phần dữ liệu
3.1 BIẾN BYTE
Chỉ dẫn ASM để định nghĩa biến byte có dạng như sau:
NAME DB initial_value
Ví dụ 1:
Alpha DB 4
Chỉ dẫn này sẽ gán tên alpha cho một byte nhớ trong bộ nhớ mà giá trị ban đầu của nó
là 4. Nếu giá trị của byte là không xác định thì đặt dấu chấm hỏi (?) vào giá trị ban đầu.
Ví dụ 2:
Byte DB ?
Đối với biến byte vùng giá trị khả dĩ mà nó lưu trữ là -128 -> 127 đối với số có dấu và
0 đến 255 đối với số không dấu.

3.2. BIẾN TỪ
Chỉ dẫn của ASM để định nghĩa một biến từ như sau:
NAME DW <giá trị khởi tạo>
Ví dụ:
WRD DW -2
Cũng có thể dùng dấu ? để thay thế cho biến từ có giá trị không xác định. Vùng giá trị
của biến từ là -32768 đến 32767 đối với số có dấu và 0 đến 56535 đối với số không dấu.

3.3. MẢNG (ARRAYS)


Trong ASM một mảng là một loạt các byte nhớ hoặc từ nhớ liên tiếp nhau.
Ví dụ: Định nghĩa một mảng 3 byte gọi là M mà giá trị ban đầu của nó là 10h, 20h và
30h chúng ta có thể viết:
M DB 10h, 20h, 30h
M là tên được gán cho byte đầu tiên
M+1 là tên của byte thứ 2
M+2 là tên của byte thứ 3
mang2 DB 10 DUP(0) ; Khai báo biến mảng gồm 10 phần tử, mỗi
; phần tử có chiều dài 1 byte với giá trị gán ban đầu là 0

Giáo trình Kiến trúc máy tính 69


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
mang3 DB 10 DUP(?) ; Khai báo biến mảng gồm 10 phần tử, mỗi phần tử có chiều
dài 1 byte, không cần gán giá trị ban đầu.
Kí tự:
ki_tu DB ‘ A’
hay
ki_tu DB 41h
Chuỗi các kí tự (character string)
Một mảng các mã ASCII có thể được định nghĩa bằng một chuỗi các kí tự.
Ví dụ
letters DW 41h, 42h, 43h
Tương đương với
letters DW ‘ ABC’
Bên trong một chuỗi, ASM sẽ phân biệt chữ hoa và chữ thường. Vì vậy chuỗi ‘abc’ sẽ
được chuyển thành 3 bytes: 61h, 62h, 63h.

4. TOÁN TỬ
Ta xét 3 loại toán tử cơ bản sau:
4.1. TOÁN TỬ SỐ HỌC

Toán tử Cú pháp Mô tả
+ + bt Số dương
- - bt Số âm
* bt1*bt2 Nhân
/ bt1/bt2 Chia
Mod bt1 mod bt2 Lấy phần dư
+ bt1 + bt2 Cộng
- bt1 - bt2 Trừ
Shl bt shl n Dịch trái n bít
Shr bt shr n Dịch phải n bít

Trong đó bt, bt1, bt2 là các biểu thức hằng, n là số nguyên.


VD: MOV AH,(8+1)*7/3 ; AH ← 21
MOV AH, 00010001b shr 2 ; AH ← 0000 0100b
MOV AH, 100 mod 3 ; AH ← 1

Giáo trình Kiến trúc máy tính 70


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
4.2. TOÁN TỬ LOGIC
Bao gồm các toán tử AND, OR, NOT, XOR
VD: MOV AH, 10 OR 4 AND 2 ; AH = 10
MOV AH, 0F0h AND 7Fh ; AH = 70h
4.3. TOÁN TỬ QUAN HỆ
Các toán tử quan hệ so sánh 2 biểu thức, cho giá trị true (-1) nếu điều kiện thỏa và
false (0) nếu không thỏa.
Toán tử Cú pháp Mô tả
EQ bt1 EQ bt2 Bằng
NE bt1 NE bt2 Không bằng
LT bt1 LT bt2 Nhỏ hơn
LE bt1 LE bt2 Nhỏ hơn hay bằng
GT bt1 GT bt2 Lớn hơn
GE bt1 GE bt2 Lớn hơn hay bằng

5. MỘT SỐ HÀM CỦA NGẮT 21H


INT 21h được dùng để gọi một số lớn các hàm (function) của DOS. Tùy theo giá trị
mà chúng ta đặt thanh ghi AH, INT 21h sẽ gọi chạy một routine tương ứng.
5.1. AH = 1h:
Chức năng: Đọc 1 kí tự từ bàn phím và kí tự đó lưu trữ trong thanh ghi AL.
Nếu AL = 0 thì là kí tự điều khiển
Ví dụ: Đọc 1 kí tự từ bàn phím
MOV AH, 01h
INT 21h
5.2 AH = 2
Chức năng: Hiển thị 1 kí tự ASCII có trong thanh ghi DL ra màn hình.
Ví dụ: hiển thị chữ A ra màn hình
MOV DL, ‘A’
MOV AH, 2 ; hàm chuẩn bị in
INT 21h
5.3. AH = 9h:
Chức năng: dùng để in 1 chuỗi có địa chỉ bắt đầu trong thanh ghi DX ra màn hình.
Ví dụ: Xuất ra màn hình chuỗi “chào các bạn”.

Giáo trình Kiến trúc máy tính 71


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
chuoi DB ‘chao cac ban $’
LEA DX , chuoi
MOV AH, 9 ; chuẩn bị in
INT 21h ; chấp nhận in
5.4. TRở Về DOS: AH = 4CH
MOV AH, 4CH
INT 21H
2 lệnh này có thể thay thế bằng 1 chỉ thị .exit
( Để kết thúc một chương trình trong hợp ngữ ta sử dụng lệnh trở về DOS)

6. CÁC CHẾ ĐỘ ĐỊA CHỈ


6.1. PHÂN LOẠI THANH GHI:
- Thanh ghi tổng quát: chủ yếu dùng để lưu trữ dữ liệu trong quá trình thực thi
chương trình, nhưng mỗi thanh ghi còn có 1 số chức năng riêng.
- Thanh ghi AX (accumulation register): thanh ghi tích lũy dài 16bit nhưng có thể
chia làm 2 thanh ghi 8bit là AH, AL.
AX ngoài chức năng lưu trữ dữ liệu, nó còn được CPU dùng trong phép toán số học như
nhân, chia.
- Thanh ghi BX (Base register): dài 16 bit nhưng nó cũng chia ra làm 2 thanh ghi 8
bit là BH và BL.
BX lưu giữ địa chỉ của 1 thủ tục hay biến, nó cũng được dùng để thực hiện các phép
dời chuyển số học và giữ liệu.
- Thanh ghi DX (Data register): 16 bit
Thanh ghi DX: có vai trò đặc biệt trong phép nhân và phép chia ngoài chức năng lưu trữ dữ
liệu. Ex: khi nhân DX sẽ lưu giữ 16bit cao của tích
- Thanh ghi CX (Couter Register): Thanh ghi này dùng làm bộ đếm trong các vòng lặp.
Các lệnh tự động lặp lại và sau mỗi lần lặp giá trị của CX tự động giảm đi 1.
- CL thường chứa số lần dịch, quay trong các lệnh dịch, quay thanh ghi
- CX dài 16 bit, nó cũng có thể chia làm 2 thanh ghi 8 bit là CH và CL.
CPU có 4 thanh ghi đoạn:
CS: chứa địa chỉ bắt đầu của code trong chương trình
DS: chứa địa chỉ của các biến khai báo trong chương trình
SS: chứa địa chỉ của bộ nhớ Stack dùng trong chương trình
ES: chứa địa chỉ cơ sở bổ sung cho các biến bộ nhớ.
Giáo trình Kiến trúc máy tính 72
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
6.2 CHẾ ĐỘ ĐỊA CHỈ : là cách thức chỉ ra toán hạng trong lệnh
Các chế độ địa chỉ thường dùng là:
- Chế độ địa chỉ bằng thanh ghi: toán hạng là thanh ghi
Các thanh ghi có thể sử dụng trong phép định địa chỉ thanh ghi là AH, BH, CH, DH,
AL, BL, CL, DL, AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, ES, SS.
- Chế độ địa chỉ tức thời: toán hạng là biểu thức hằng xác định.
Các hằng số có thể ở dạng thập phân (có dấu và không dấu), nhị phân, thập lục phân
các hằng số định nghĩa bằng lênh EQU…
Ví dụ:
MOV AH, 10
MOV AH, 1010b
MOV AH, 0Ah
Ngoài ra còn có 4 chế độ địa chỉ khác là:
- Chế độ địa chỉ gián tiếp thanh ghi
- Chế độ địa chỉ cơ sở
- Chế độ địa chỉ chỉ số
- Chế độ địa chỉ chỉ số cơ sở
Ngoài ra còn có các khaí niệm chúng ta cần quan tuân
Các cách định địa chỉ trong hợp ngữ
- Toán hạng trực tiếp:
Toán hạng trực tiếp là một biểu thức hằng xác định. Các hằng số có thể ở dạng thập
phân (có dấu và không dấu), nhị phân, thập lục phân, các hằng số định nghĩa bằng lệnh
EQU, …
VD: MOV AH,10
MOV AH,1010b
MOV AH,0Ah
MOV AH,A12
- Toán hạng thanh ghi:
Các thanh ghi có thể sử dụng trong phép định địa chỉ thanh ghi là AH, BH, CH, DH,
AL, BL, CL, DL, AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, ES, SS.
- Toán hạng bộ nhớ:
- Trực tiếp:

Giáo trình Kiến trúc máy tính 73


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Toán hạng này xác định dữ liệu lưu trong bộ nhớ tại một địa chỉ xác định khi dịch, địa
chỉ này là một biểu thức hằng (có thể kết hợp với toán tử chỉ số [ ] hay toán tử +, -, :). Thanh
ghi đoạn mặc định là thanh ghi DS nhưng ta có thể dùng toán tử :để chỉ thanh ghi đoạn
khác.
VD: A DW 1000h
B DB 100 DUP(0)
MOV AX, A ; Chuyển nội dung của biến A vào
MOV AX, [A] ; thanh ghi AX
MOV AH, B ; Truy xuất phần tử đầu tiên của
MOV AH, B[0] ; mảng B
MOV AH, B + 1 ; Truy xuất phần tử thứ hai của
MOV AH, B[1] ; mảng B
MOV AH, B + 5 ; Truy xuất phần tử thứ 6 của
MOV AH, B[5] ; mảng B
Chú ý rằng lệnh MOV AX,[1000h] sẽ chuyển giá trị 1000h vào thanh ghi AX.
Nếu muốn chuyển nội dung tại ô nhớ 1000h vào thanh ghi AX thì phải dùng lệnh
MOV AX,DS:[1000h] hay MOV AX,DS:1000

Giáo trình Kiến trúc máy tính 74


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 11. CÁC LỆNH ĐIỀU KHIỂN
Mục tiêu:
- Trình bày được cú pháp các lệnh điều khiển
- Sử dụng được các lệnh này để viết chương trình
1. CÁC LỆNH CƠ BẢN
CPU 8086 có hàng trăm lệnh, trong chương này, chúng ta sẽ xem xét 7 lệnh đơn giản
của 8086 mà chúng thường được dùng với các thao tác di chuyển số liệu và thực hiện các
phép toán số học .
Trong phần sau đây WORD1 và WORD2 là các biến từ, BYTE1 và BYTE2 là các biến
byte .
1.1. LỆNH MOV VA XCHG

 Lệnh MOV <đích> , <nguồn>


Giá trị của <nguồn> được chép vào <đích> và giá trị của nguồn là không thay đổi.
- <đích> và <nguồn>: phải có cùng kích cỡ.
- <đích> và <nguồn>: không được đều là thanh ghi đoạn
- <đích> và <nguồn>: phải có thanh ghi đa năng, không có chế độ đích nguồn cùng 1
chế độ địa chỉ trực tiếp hay gián tiếp.
- <đích> không được là hằng.
Ví dụ 1:
MOV AX,WORD1 ; lấy nội dung của từ nhớ WORD1 đưa vào thanh ghi AX
MOV AX, BX ; AX lấy nội dung của BX , BX không thay đổi
MOV AH, ’A’ ; AX lấy giá trị 41h
Ví dụ 2:
+ MOV AL, BX (Là sai vì AL, BX là khác độ dài)
Sửa lại: MOV AX, BX
+ MOV DS, CS (sai vì chúng đều là thanh ghi đoạn)
Sửa lại: MOV AX, CS
MOV DS, AX
+ MOV DS, [SI] (không có thanh ghi đa năng)
Sửa lại: dùng thanh ghi AX làm thanh ghi trung gian
MOV AX, [SI]
MOV DS, AX

Giáo trình Kiến trúc máy tính 75


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
 Lệnh: XCHG <đích> , <nguồn>
Dùng để hoán chuyển nội dung 2 toán hạng. Toán hạng chỉ có thể là thanh ghi hay bộ
nhớ.
- <đích> và <nguồn>: phải có cùng kích cỡ.
- <đích> và <nguồn>: không được đều là thanh ghi đoạn
- <đích> và <nguồn>: phải có thanh ghi đa năng, không có chế độ đích nguồn cùng 1
chế độ địa chỉ trực tiếp hay gián tiếp.
- <đích> không được là hằng.
Ví dụ
XCHG AH, BL
XCHGAX, W1 ; trao đổi nội dung của thanh ghi AX và từ nhớ W1.

1.2. LỆNH ADD, SUB, INC, DEC


Lệnh ADD, SUB được dùng để cộng và trừ nội dung của 2 thanh ghi, của một thanh
ghi và một vị trí nhớ, hoặc cộng (trừ) một số với một thanh ghi hoặc một vị trí nhớ.
Cú pháp: ADD <đích> , <nguồn>
Giá trị của <đích> = <đích> + <nguồn>
SUB <đích> , <nguồn>
Giá trị của <đích> = <đích> - <nguồn>
Cú pháp: INC <đích>
DEC <đích>
- Lệnh INC để cộng thêm 1 vào nội dung của một thanh ghi hoặc một vị trí nhớ.
- Lệnh DEC để giảm bớt 1 khỏi một thanh ghi hoặc một vị trí nhớ.

1.3. LỆNH LEA REG 16, MEM16: (Load Effect Address) nạp địa chỉ offset của toán
hạng bộ nhớ vào thanh ghi.

2. LỆNH NHẬP VÀ XUẤT


2.1. LỆNH NHẬP
FUNTION 1 : Nhập vào 1 ký tự
Input : AH = 1h
Output: AL = mã ASCII của ký tự đã nhập
AL=0 nếu không nhập ký tự nào
Để gọi routine ta thực hiện các lệnh sau:
MOV AH, 1h; hàm nhập kí tự
Giáo trình Kiến trúc máy tính 76
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
INT 21h; mã ASCII của ký tự nhập nằm trong AL và
; hiển thị ký tự ra màn hình.

2.2. LỆNH XUẤT


Hàm 2 : Hiển thị một ký tự hoặc thực hiện chức năng của ký tự điều khiển
Input : AH = 2h
DL = mã ASCII của ký tự hiển thị hoặc ký tự điều khiển.
Output:AL= mã ASCII của ký tự hiển thị hoặc ký tự điều khiển
Ví dụ : Các lệnh sau sẽ in ra màn hình dấu ?
MOV AH,2
MOV DL,’?’ ; character is ‘?’
INT 21H ; display character
Hàm 2 cũng có thể được dùng để thực hiện chức năng điều khiển. Nếu DL chứa ký tự
điều khiển thì khi gọi INT 21h, ký tự điều khiển sẽ được thực hiện.
Các kí tự điều khiển thường dùng là:
ASCII code (Hex) SYMBOL FUNCTION
7 BEL beep
8 BS backspace
9 HT tab
A LF line feed
D CR carriage return

Ví dụ: Viết chương trình đọc một ký tự từ bàn phím và in nó trên đầu dòng mới
TITLEPGM1: ECHO PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
.STARTUP
; hiển thị dấu nhắc
MOV AH,2
MOV DL,’?’
INT 21H

Giáo trình Kiến trúc máy tính 77


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
; nhập 1 ký tự
MOV AH,1 ; hàm đọc ký tự
INT 21H; ký tự được đưa và AL
MOV BL,AL; cất ký tự trong BL
; nhảy đến dòng mới
MOV AH,2 ; hàm xuất 1 ký tự
MOV DL,0DH; ký tự carriage return
INT 21H, thực hiện carriage return
MOV DL,0AH; ký tự line feed
INT 21H; thực hiện line feed
; xuất ký tự
MOV DL,BL; đưa ký tự vào DL
INT 21H; xuất ký tự
; trở về DOS
MOV AH,4CH; hàm thoát về DOS
INT 21H; exit to DOS
MAIN ENDP
END MAIN

3. LỆNH LOGIC, DỊCH VÀ QUAY


3.1. CÁC LỆNH LOGIC
Chúng ta có thể dùng các lệnh logic để thay đổi từng bit trên byte hoặc trên một từ số
liệu. Khi một phép toán logic được áp dụng cho toán hạng 8 hoặc 16 bit thì có thể áp dụng
phép toán logic đó trên từng bit để thu được kết qủa cuối cùng.
Ví dụ : Thực hiện các phép toán sau :
1. 10101010 AND 1111 0000 = 1010 0000
2. 10101010 OR 1111 0000 = 1111 1010
3. 1010 1010 XOR 1111 0000 = 01011010
4. NOT 10101010 = 01010101

3.1.1. Lệnh AND, OR và XOR


Lệnh AND, OR và XOR thực hiện các chức năng đúng như tên gọi của nó.

Giáo trình Kiến trúc máy tính 78


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Cú pháp:
AND <đích> , <nguồn>
OR <đích> , <nguồn>
XOR <đích> , <nguồn>
Kết qủa của lệnh được lưu trữ trong toán hạng đích do đó chúng phải là thanh ghi hoặc
vị trí nhớ. Toán hạng nguồn là có thể là hằng số, thanh ghi hoặc vị trí nhớ. Dĩ nhiên hai toán
hạng đều là vị trí nhớ là không được phép.
3.1.2. Lệnh NEG
Chức năng: Lệnh NOT dùng để lấy bù 1 ( đảo) toán hạng đích.
Cú pháp: NEG <đích>

3.2. LỆNH DỊCH VÀ QUAY


Lệnh dịch và quay sẽ dịch các bít trên toán hạng đích một hoặc nhiều vị trí sang trái
hoặc sang phải. Khác nhau của lệnh dịch và quay là ở chỗ: các bít bị dịch ra (trong lệnh dịch)
sẽ bị mất. Trong khi đó đối với lệnh quay, các bít bị dịch ra từ một đầu của toán hạng sẽ được
đưa trở lại đầu kia của nó.
Có 2 khả năng viết đối với lệnh dịch và quay:
OPCODE <dich>, CL
Thanh ghi CL chứa n số lần dịch hay quay.
Toán hạng đích có thể là một thanh ghi 8bít hoặc 16bít, hoặc một vị trí nhớ.
Các lệnh dịch và quay thường dùng để nhân chia các số nhị phân. Chúng cũng được
dùng cho hoạt động nhập xuất nhị phân và hex.

3.2.1. Các lệnh dịch


 Lệnh dịch trái ( left shift)
Lệnh SHL dịch toán hạng đích sang trái. Cú pháp của lệnh như sau:
SHL < dich> , CL ; dịch trái n bit ( CL chứa n)
Cứ mỗi lần dịch trái, một số 0 được thêm vào LSB.
CF 7 6 5 4 3 2 1 0 0

1 byte
Các cờ bị ảnh hưởng: SF, PF, ZF phản ảnh kết quả
AF không xác định
CF= bit cuối cùng được dịch ra
OF= 1 nếu kết qủa thay đổi dấu vào lần dịch cuối cùng

Giáo trình Kiến trúc máy tính 79


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Ví dụ 1 : Giả sử DH =8Ah và CL=3 . Hỏi giá trị của DH và CF sau khi lệnh
SHL DH,CL được thực hiện ?
Kết qủa DH=01010000=50h , CF=0
 Lệnh dịch phải ( Right Shift )
Lệnh SHR dịch phải toán hạng đích 1 hoặc N lần .
SHR <dich>, CL
Cứ mỗi lần dịch phải, một số 0 được thêm vào MSB. Các cờ bị ảnh hưởng giống như
lệnh SHL.
0 7 6 5 4 3 2 1 0 CF

1 byte
Ví dụ 2 : Giả sử DH = 8A, CL=2
Lệnh SHR DH, CL ; dịch phải DH 2 lần sẽ cho kết quả như sau :
Kết qủa trên DH=22h , CF=1.
Cũng như lệnh SAL , lệnh SAR (dịch phải số học) hoạt động giống như SHR, chỉ có 1
điều khác là MSB vẫn giữ giá trị nguyên thủy (bit dấu giữ nguyên) sau khi dịch.
3.2.1. Lệnh quay
 Quay trái ( rotate left ) = ROL sẽ quay các bit sang trái, LSB sẽ được thay bằng
MSB
Còn CF=MSB
CF 7 6 5 4 3 2 1 0

Cú pháp của ROL như sau :


ROL <dich>, CL
 Quay phải ( rotate right ) = ROR sẽ quay các bit sang phải, MSB sẽ được
thay bằng LSB .
Còn CF=LSB
7 6 5 4 3 2 1 0 CF

Cú pháp của lệnh quay như sau:


ROR <dich> , CL
Trong các lệnh quay phải và quay trái CF chứa bit bị quay ra ngoài .
Ví dụ sau đây cho thấy cách để khám các bit trên một byte hoặc 1 từ mà không làm
thay đổi nội dung của nó.

Giáo trình Kiến trúc máy tính 80


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Ví dụ : Dùng ROL để đếm số bit 1 trên BX mà không thay đổi nội dung của nó. Kết
qủa cất trên AX.
Giải :
TOP:
XOR AX,AX ; xoá AX
MOV CX,16 ; số lần lặp = 16 ( một từ )
ROL BX,1 ; CF = bit quay ra
JNC NEXT ; nếu CF =0 thì nhảy đến vòng lặp
INC AX ; ngược lại (CF=1) , tăng AX
NEXT:
LOOP TOP

4. LỆNH LẶP VÀ RẼ NHÁNH


Sự cần thiết của lệnh nhảy:
Ở các chương trình viết bằng ngôn ngữ cấp cao thì việc nhảy (Go to) nên tránh nhưng ở
lập trình hệ thống thì đây là việc cần thiết và là điểm mạnh của 1 chương trình viết bằng
ASEMBLY.
Một lệnh nhảy đến CPU phải thực thi 1 đoạn lệnh ở 1 chỗ khác với nơi mà các lệnh đang
được thực thi.
Trong lập trình, có những nhóm phát biểu phải lặp đi lặp lại nhiều lần trong 1 điều kiện
nào đó. Để đáp ứng điều kiện này ASM cung cấp 2 lệnh JMP và LOOP.

4.1. LỆNH NHẢY KHÔNG ĐIỀU KIỆN JMP

Chức năng: Nhảy đến một điểm


Cú pháp: JMP <đích>
Trong đó destination là một nhãn ở trong cùng một đoạn với lệnh JMP. Lệnh JMP
dùng để khắc phục hạn chế của các lệnh nhảy có điều kiện.

4.2. NHẢY CÓ ĐIỀU KIỆN:


Cú pháp: Jxxx <nhãn đích>
Nếu điều kiện của lệnh được thỏa mãn thì lệnh tại <nhãn đích> sẽ được thực hiện,
nếu điều kiện không thỏa thì lệnh tiếp theo lệnh nhảy sẽ được thực hiện. Đối với lệnh JNZ thì
điều kiện là kết quả của trước nó phải bằng 0.
Căn cứ vào trạng thái các cờ mà quyết định lệnh nhảy:
- Lệnh JA label: (Jump if Above)
Giáo trình Kiến trúc máy tính 81
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Nếu CF = 0 và ZF = 0 thì JMP label
- Lệnh JAE label: (Jump if Above or Equal)
Nếu CF = 0 thì JMP label
- Lệnh JB label: (Jump if Below)
Nếu CF = 1 thì JMP label
- Lệnh JBE label: (Jump if Below or Equal)
Nếu CF = 1 hoặc ZF = 1 thì JMP label
- Lệnh JNA label: (Jump if Not Above)
Giống lệnh JBE
- Lệnh JNAE label: (Jump if Not Above or Equal)
Giống lệnh JB
- Lệnh JNB label: (Jump if Not Below)
Giống lệnh JAE
- Lệnh JNBE label: (Jump if Not Below or Equal)
Giống lệnh JA
- Lệnh JG label: (Jump if Greater)
Nếu SF = OF và ZF = 0 thì JMP label
- Lệnh JGE label: (Jump if Greater or Equal)
Nếu SF = OF thì JMP label
- Lệnh JL label: (Jump if Less)
Nếu SF <> OF thì JMP label
- Lệnh JLE label: (Jump if Less or Equal)
Nếu CF <> OF hoặc ZF = 1 thì JMP label
- Lệnh JNG label: (Jump if Not Greater)
Giống lệnh JLE
- Lệnh JNGE label: (Jump if Not Greater or Equal)
Giống lệnh JL
- Lệnh JNL label: (Jump if Not Less)
Giống lệnh JGE
- Lệnh JNLE label: (Jump if Not Less or Equal)
Giống lệnh JG
- Lệnh JC label: (Jump if Carry)
Giống lệnh JB
Giáo trình Kiến trúc máy tính 82
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
- Lệnh JNC label: (Jump if Not Carry)
Giống lệnh JNB
- Lệnh JZ label: (Jump if Zero)
Nếu ZF = 1 thì JMP label
- Lệnh JE label: (Jump if Equal)
Giống lệnh JZ
- Lệnh JNZ label: (Jump if Not Zero)
Nếu ZF = 0 thì JMP label
- Lệnh JNE label: (Jump if Equal)
Giống lệnh JNZ
- Lệnh JS label: (Jump on Sign)
Nếu SF = 1 thì JMP label
- Lệnh JNS label: (Jump if No Sign)
Nếu SF = 0 thì JMP label
- Lệnh JO label: (Jump on Overflow)
Nếu OF = 1 thì JMP label
- Lệnh JNO label: (Jump if No Overflow)
Nếu OF = 0 thì JMP label
- Lệnh JP label: (Jump on Parity)
Nếu PF = 1 thì JMP label
- Lệnh JNP label: (Jump if No Parity)
Nếu PF = 0 thì JMP label
- Lệnh JCXZ label: (Jump if CX Zero)
Nếu CX = 1 thì JMP label
4.3. LỆNH SO SÁNH CMP (COMPARE):
Các lệnh nhảy thường lấy kết quả của lệnh CMP như là điều kiện.
Cú pháp: CMP <dich>,< nguon>
Lệnh này so sánh toán hạng nguồn và toán hạng đích bằng cách tính hiệu dich – nguon.
Kết quả sẽ không được cất giữ. Như vậy lệnh CMP giống như lệnh SUB, chỉ khác là trong
lệnh CMP toán hạng đích không thay đổi.

Giáo trình Kiến trúc máy tính 83


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
4.4. LỆNH LẶP

 Lệnh LOOP: Cho phép lặp 1 công việc với 1 số lần nào đó. Mỗi lần lặp CX
giảm đi 1 đơn vị. Vòng lặp chấm dứt khi CX = 0.
Cú pháp
LOOP <nhãn>
Mô tả: CX = CX – 1
Nếu CX <> 0 thì JMP <nhãn>
Ví dụ: Dùng vòng lặp in ra 1 hàng 80 dấu ‘*’
MOV CX,80 ; CX chứa số lần lặp
MOV AH,2 ; hàm xuất kí tự
MOV DL,’*’ ; DL chứa kí tự ‘*’
TOP:
INT 21h ; in dấu ‘*’
LOOP TOP ; lặp 80 lần
Bài tập áp dụng: Viết chương trình in ra mã ASCII từ 32..255

 Vòng WHILE
Vòng WHILE phụ thuộc vào 1 điều kiện. Nếu điều kiện đúng thì thực hiện vòng
WHILE. Vì vậy nếu điều kiện sai thì vòng WHILE không thực hiện gì cả.
Cú pháp:
while <điều kiện> do <câu lệnh>
Mô tả:
while_:
; mã hóa điều kiện để so sánh
; nếu không thỏa thì thoát khỏi vòng lặp
JMP end_while
; mã hóa công việc S
JMP while_
end_while:
Ví dụ: Viết đoạn mã để đếm số ký tự được nhập vào trên cùng một hàng.
MOV DX, 0 ; DX để đếm số ký tự
MOV AH, 1 ; hàm đọc 1 kí tự
INT 21h ; đọc kí tự vào AL

Giáo trình Kiến trúc máy tính 84


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
WHILE_:
CMP AL, 0DH; Có phải là ký tự CR?
JE END_WHILE ; Đúng, thoát
INC DX ; tăng DX lên 1
INT 21h ; đọc ký tự
JMP WHILE_ ; lặp
END_WHILE:

 Vòng REPEAT
Cấu trúc: REPEAT là
repeat
<các câu lệnh>;
until <điều kiện>
Để mã hóa lệnh repeat thì cần thiết kế 1 nhãn repeat_:
Mô tả:
Repeat_:
; mã hóa công việc S1
; mã hóa công việc s2
……….
; mã hóa công việc sn
; mã hóa điều kiện so sánh
Jxyz repeat_
Trong cấu trúc repeat mệnh đề được thi hành đồng thời điều kiện được kiểm tra. Nếu
điều kiện đúng thì vòng lặp kết thúc.
Ví dụ: Viết đoạn mã để đọc vào các ký tự cho đến khi gặp ký tự trống.
MOV AH, 1 ; đọc ký tự
REPEAT:
INT 21h ; ký tự trên AL
; until
CMP AL, ‘ ’; AL = ‘ ‘ ?
JNE REPEAT
Bài tập áp dụng: Viết chương trình nhập vào 1 chuỗi văn bản đến khi nào gặp
Enter thì dừng.

Giáo trình Kiến trúc máy tính 85


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
4.5. LỆNH RẼ NHÁNH
Trong ngôn ngữ cấp cao cấu trúc rẽ nhánh cho phép một chương trình rẽ nhánh đến
những đoạn khác nhau tùy thuộc vào các điều kiện.
 Cấu trúc IF – THEN
Cấu trúc IF – THEN có thể diễn đạt như sau:
IF <điều kiện> đúng
THEN
Thực hiện các câu lệnh;
END IF
Ví dụ: Thay thế giá trị trên AX bằng giá trị tuyệt đối của nó
Thuật toán như sau:
IF AX < 0
THEN
Thay thế AX bằng – AX
END – IF
Có thể mã hóa như sau:
; if AX<0
CMP AX,0
JNL END_IF ; dừng
;then
NEG AX ; đổi dấu AX
END_IF :

 IF_ THEN_ELSE
IF <điều kiện đúng>
THEN
<Thực hiện các câu lệnh với điều kiện đúng>
ELSE
<Thực hiện các câu lệnh với điều kiện đúng>
END_IF
Ví dụ: giả sử AL và BL chứa ASCII code của 1 ký tự. Hãy xuất ra màn hình ký tự
trước (theo thứ tự ký tự).

Giáo trình Kiến trúc máy tính 86


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Thuật toán:
IF AL<= BL
THEN
Hiển thị AL
ELSE
Hiển thị ký tự trong BL
END_IF
Có thể mã hóa như sau:
MOV AH, 2 ; chuẩn bị xuất ký tự
; if AL<=BL
CMP AL, BL ; AL <= BL ?
JNBE ELSE_ ; no, display character in BL
; then
MOV DL, AL
JMP DISPLAY
ELSE_:
MOV DL, BL
DISPLAY:
INT 21H
END_IF:

5. LỆNH NHÂN VÀ CHIA


5.1 LỆNH MUL VÀ IMUL
- Nhân có dấu và nhân không dấu
Trong phép nhân nhị phân số có dấu và số không dấu phải được phân biệt một cách rõ
ràng. Nhân có dấu và nhân không dấu dẫn đến kết quả khác nhau nên có 2 lệnh nhân:
MUL (multiply: ) nhân không dấu
IMUL (integer multiply:) nhân có dấu
Các lệnh này nhân 2 toán hạng byte hoặc từ. Nếu 2 toán hạng byte được nhân với nhau
thì kết quả là một từ 16bít. Nếu 2 toán hạng từ được nhân với nhau thì kết quả là một double
32bít.
Cú pháp của chúng là:
MUL <nguồn>;
IMUL < nguồn>;
Giáo trình Kiến trúc máy tính 87
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
- Toán hạng nguồn là thanh ghi hoặc vị trí nhớ nhưng không được là một hằng.
- Phép nhân kiểu byte
Đối với phép nhân mà toán hạng là kiểu byte thì
AX = AL * <nguồn>;
- Đối với phép nhân kiểu từ thì
DX : AX = AX * <nguồn>;
- Ứng dụng đơn giản của lệnh MUL và IMUL
Ví dụ: Chuyển đoạn chương trình sau trong ngôn ngữ cấp cao thành mã hợp ngữ: A=
5xA - 12xB. Giả sử A, B là 2 biến từ và không xảy ra sự tràn.
Code
MOV AX,5 ; AX=5
IMUL A ; AX=5xA
MOV A,AX
; A=5xA
MOV AX,12
; AX=12
IMUL B
; AX=12xB
SUB A,AX
; A=5xA-12xB
5.2. LỆNH DIV VÀ IDIV
Cú pháp:
DIV <số chia>
IDIV <số chia>
- Toán hạng byte
Lệnh chia toán hạng byte sẽ chia số bị chia 16 bit trên AX cho số chia là 1byte. Số
chia phải là một thanh ghi 8 bít hoặc là một byte nhớ.
Thương số trên AL còn số dư trên AH.
- Toán hạng từ
Lệnh chia toán hạng từ sẽ chia số bị chia 32 bít trên DX: AX cho số chia là 1 từ. Số chia
phải là một thanh ghi 16bít hoặc 1 từ nhớ. Thương số trên AX còn số dư trên DX.

Giáo trình Kiến trúc máy tính 88


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
CHƯƠNG 12. NGĂN XẾP VÀ CHƯƠNG TRÌNH CON
Mục tiêu:
- Trình bày được khái niệm, hoạt động ngăn xếp
- Trình bày được cách viết chương trình con
Đoạn ngăn xếp (stack segment) trong chương trình được dùng để cất giữ tạm thời số
liệu và địa chỉ. Ta sẽ xem xét cách tổ chức stack và sử dụng nó để thực hiện các thủ tục
(procedure).

1. NGĂN XẾP (STACK)


Ngăn xếp là cấu trúc dữ liệu 1 chiều. Điều đó có nghĩa là số liệu được đưa vào và lấy
ra khỏi stack tại đầu cuối của stack theo nguyên tắc LIFO (last in first out). Vị trí tại đó số
liệu được đưa vào hay lấy ra gọi là đỉnh của ngăn xếp. Có thể hình dung stack như một chồng
đĩa. Đĩa đưa vào sau cùng nằm tại đỉnh của chồng đĩa. Khi lấy ra, đĩa trên cùng sẽ được lấy ra
trước. Một chương trình phải dành ra một khối nhớ cho ngăn xếp. Chúng ta dùng chỉ dẫn:
. STACK 100h
Để khai báo kích thước vùng stack là 256bytes.
Khi chương trình được dịch và nạp vào bộ nhớ thanh ghi SS sẽ chứa địa chỉ đoạn
stack. Còn SP(stack pointer) chứa địa chỉ đỉnh của ngăn xếp. Trong khai báo stack 100h trên
đây, SP nhận giá trị 100h.

1.1 LỆNH PUSH


Chức năng: thêm một từ mới vào stack chúng ta dùng lệnh:
Cú pháp:
PUSH nguồn; đưa một thanh ghi hoặc từ nhớ 16bit vào stack
Ví dụ: PUSH AX

1.2. LỆNH POP


Để lấy số liệu tại đỉnh stack ra khỏi stack, chúng ta dùng lệnh:
POP đích; lấy số liệu tại đỉnh stack ra destination
Ví dụ: POP BX; lấy số liệu trong stack ra thanh ghi BX

1.3 MỘT SỐ ỨNG DỤNG CỦA STACK


Vì nguyên tắc làm việc của stack là LIFO nên các đối tượng được lấy ra khỏi stack có trật
tự ngược lại với trật tự mà chúng ta được đưa vào stack.

Giáo trình Kiến trúc máy tính 89


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Bài toán: Nhập vào một chuỗi kí tự, in đảo ngược chuỗi.
(Ví dụ: Nhập : Cong nghe thong tin
Xuất : int gnoht ehgn gnoC)
- Thuật toán cho chương trình
; Nhập chuỗi kí tự
Khởi động bộ đếm
Đọc một kí tự
WHILE kí tự <> 13 DO
Cất kí tự vào STACK
Tăng biến đếm
Đọc một kí tự
END_WHILE
; Hiển thị đảo ngược
FOR biến đếm lần DO
Lấy một kí tự từ STACK
Hiển thị nó
END_FOR
- Chương trình
TITLE vd: daonguoc
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
; in dấu nhắc
MOV AH, 2
MOV DL, ‘?’
INT 21H
; xóa biến đếm CX
XOR CX, CX
; đọc 1 kí tự
MOV AH, 1
INT 21H
; trong khi kí tự không phải là CR
Giáo trình Kiến trúc máy tính 90
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
WHILE_:
CMP AL, 0DH
JE END_WHILE
; cất AL vào stack tăng biến đếm
PUSH AX; đẩy AX vào stack
INC CX; tăng CX
; đọc 1 ký tự
INT 21h
JMP WHILE_
END_WHILE:
; xuống dòng mới
MOV AH, 2
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
JCXZ EXIT ; thoát nếu CX=0 (không có kí tự nào được nhập)
; lặp CX lần
TOP:
; Lấy kí tự từ stack
POP DX
; xuất nó
INT 21H
LOOP TOP ; lặp nếu CX >0
; end_for
EXIT:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
Giải thích thêm về chương trình: Vì số kí tự nhập là không biết vì vậy dùng thanh
ghi CX để đếm số kí tự nhập. CX cũng dùng cho vòng FOR để xuất các kí tự theo thứ tự
ngược lại. Mặc dù kí tự chỉ giữ trên AL nhưng phải đẩy cả thanh ghi AX vào stack. Khi xuất
Giáo trình Kiến trúc máy tính 91
Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
kí tự chúng ta dùng lệnh POP DX để lấy nội dung trên stack ra. Mã ASCII của kí tự ở trên DL,
sau đó gọi INT 21h để xuất kí tự.

2. CHƯƠNG TRÌNH CON (CTC)


2.1. GIỚI THIỆU CHUNG VÀ CÚ PHÁP
Trong phần này chúng ta đã đề cập đến ý tưởng lập trình top-down. Ý tưởng này có
nghĩa là một bài toán nguyên thuỷ được chia thành các bài toán con mà chúng dễ giải quyết
hơn bài toán nguyên thuỷ. Trong các ngôn ngữ cấp cao người ta dùng chương trình con để
giải các bài toán con và chúng ta cũng làm như vậy trong hợp ngữ. Như vậy là một chương
trình hợp ngữ có thể được xây dựng bằng các chương trình con.
Một chương trình con gọi là chương trình con chính sẽ chứa nội dung chủ yếu của
chương trình.
Để thực hiện một công việc nào đó, chương trình con chính gọi( CALL) một chương
trình con con.
Chương trình con cũng có thể gọi một chương trình con khác.
Khi một chương trình con gọi một chương trình con khác, điều khiển được chuyển tới
( control transfer) chương trình con được gọi và các lệnh của chương trình con được gọi sẽ
được thi hành. Sau khi thi hành hết các lệnh trong nó, chương trình con được gọi sẽ trả điều
khiển(return control) cho chương trình con gọi nó. Trong ngôn ngữ cấp cao, lập trình viên
không biết và không thể biết cơ cấu của việc chuyển và trả điều khiển giữa chương trình
con chính và chương trình con con.
Khai báo chương trình con
Cú pháp của lệnh tạo một chương trình con như sau :
Tên_chương_trình PROC type
; body of procedure
RET
Tên_chương_trình ENDP
Name do người dùng định nghĩa là tên của chương trình con.
Type có thể là NEAR ( có thể không khai báo ) hoặc FAR.
- NEAR có nghĩa là chương trình con được gọi nằm cùng một đoạn với chương
trình con gọi.
- FAR có nghĩa là chương trình con được gọi và chương trình con gọi nằm khác
đọan. Trong phần này chúng ta sẽ chỉ mô tả chương trình con NEAR.

Giáo trình Kiến trúc máy tính 92


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Lệnh RET trả điều khiển cho chương trình con gọi. Tất cả các chương trình con phải
kết thúc bởi RET trừ chương trình con chính.
Chú thích cho chương trình con: Để người đọc dễ hiểu chương trình con người ta
thường sử dụng chú thích cho chương trình con dưới dạng sau:
; ( mô tả các công việc mà chương trình con thi hành)
; input: ( mô tả các tham số có tham gia trong chương trình )
; output : ( cho biết kết qủa sau khi chạy chương trình con )
; uses : ( liệt kê danh sách các chương trình con mà nó gọi )

2.2 LỆNH CALL VÀ RETURN


Lệnh CALL được dùng để gọi một chương trình con. Có 2 cách gọi một chương trình
con là gọi trực tiếp và gọi gián tiếp.
CALL Tên_chương_trình ; gọi trực tiếp chương trình con có tên là name
CALL address-expression ; gọi gián tiếp chương trình con trong đó address-
expression chỉ định một thanh ghi hoặc một vị trí nhớ mà nó chứa địa chỉ của chương trình
con.
Khi lệnh CALL được thi hành thì :
- Điạ chỉ quay về của chương trình con gọi được cất vào stack. Địa chỉ này chính là
offset của lệnh tiếp theo sau lệnh CALL.
- IP lấy địa chỉ offset của lệnh đầu tiên trên chương trình con được gọi, có nghĩa là
điều khiển được chuyển đến chương trình con.
Để trả điều khiển cho chương trình con chính, lệnh RET pop-value được sử dụng.
Pop-value(một số nguyên N ) là tùy chọn. Đối với chương trình con NEAR, lệnh RET sẽ lấy
giá trị trong SP đưa vào IP. Nếu pop-value là ra một số N thì
IP=SP+N

Giáo trình Kiến trúc máy tính 93


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
2.2. LỢI ÍCH
Chương trình con làm cho cấu trúc logic của của chương trình dễ kiểm soát hơn, dễ tìm sai sót
hơn và có thể tái sử dụng mã -> tiết kiệm được công sức và thời gian lập trình.
Ví dụ: Chương trình con lấy thời gian của tệp như sau
GETTIME PROC
push ax bx cx dx
G0:
clrscr
HienString Vaotentep ;Vao ten tep
lea dx,buff1
call GET_FILE_NAME
lea dx,File_name
mov al,0
mov ah,43h
int 21h
jnc G1
HienString Err_tt
jmp Exit_G
G1:
HienString Thuoctinhla
shr cx,1
jnc G2
HienString tt1
G2:
shr cx,1
jnc G3
HienString tt2
G3:
shr cx,1
jnc G4
HienString tt3
G4:
shr cx,1
shr cx,1
shr cx,1
jnc G5
HienString tt4
G5:
HienString tt5
mov ah,1
int 21h
cmp al,'c'
jne Exit_G
jmp G0
Exit_G:
pop dx cx bx ax
ret
GETTIME endp

Giáo trình Kiến trúc máy tính 94


Trường Trung cấp nghề Cơ Điện Đông Nam Bộ Khoa Công nghệ thông tin
Tài liệu tham khảo

1. Kiến Trúc Máy Tính ; NGUYỄN ĐÌNH VIỆT (Tác giả); Nhà xuất bản: Đại học
quốc gia Hà Nội, năm 2000.
2. Giáo trình kiến trúc máy tính; Tác giả: Msc Võ Văn Chín, Ths Nguyễn Hồng Vân,
KS Phạm Hữu Tài; Khoa CNTT, Đại học Cần Thơ, năm 1997
3. Kiến trúc máy tính (Võ Văn Chín, Nguyễn Hồng Vân, Phạm Hữu Tài trường Đại
học Cần Thơ), Hướng dẫn lập trình với Assembly (Lê Mạnh Thạnh, Nguyễn Kim Tuấn, Nhà
xuất bản Khoa học và kỹ thuật), năm 2000.

Giáo trình Kiến trúc máy tính 95

You might also like