GIÁO TRÌNH KIẾN TRÚC MÁY TÍNH
Trang 1MỤC LỤC
Chương1 3
Kiến trúc máy vi tính PC và đơn vị xử lý trung tâm 3
1.1 Các thành phần cơ bản của máy tính số 3
1.2 Biểu diễn thông tin trong máy tính số 5
1.3 Kiến trúc cơ bản máy vi tính PC 14
1.4 Đơn vị xử lý trung tâm CPU (Central Proccessing Unit) 18
1.4.1 Cấu hình bên ngoài 18
1.4.2 Cấu hình bên trong 21
1.4.3 Quản lý bộ nhớ trong chế độ thực và các thanh ghi đoạn 21
1.4.4 Các thanh ghi 24
1.4.5 Quản lý bộ nhớ trong chế độ bảo vệ 27
1.4.6 Cơ chế đa nhiệm 35
1.4.7 Các chế độ xác định địa chỉ toán hạng 36
1.5 Kỹ thuật đường ống và kỹ thuật xử lý song song mức lệnh 40
1.5.1 Kỹ thuật xử lý lệnh kiểu đường ống (Pipeline) 41
1.5.2 Kỹ thuật ILP (xử lý song song mức lệnh) 42
Chương 2 43
Tổ chức bộ nhớ trong máy vi tính PC 43
2.1 Tổ chức bộ nhớ theo phân cấp 43
2.2 Tổ chức cache 45
2.2.1 Trường hợp mỗi khối chứa một từ (hoặc 1 byte) dữ liệu 45
2.2.2 Trường hợp mỗi khối chứa nhiều từ dữ liệu 47
2.2.3 Kỹ thuật tập liên hợp 47
2.3 Tổ chức bộ nhớ máy vi tính PC 48
2.3.1 Cơ chế quản lý bộ nhớ theo phân trang 48
2.3.2 Cơ chế truy nhập bộ nhớ theo trang 50
Chương 3 52
Các phương pháp vào ra dữ liệu trong máy vi tính 52
3.1 Cấu trúc phần cứng của hệ thống vào/ra dữ liệu 52
3.2 Các phương pháp vào/ra dữ liệu 52
3.2.1 Phân loại 52
3.2.2 Phương pháp vào/ra dữ liệu theo định trình 53
3.2.3 Phương pháp vào/ra dữ liệu theo kiểu thăm dò 54
3.2.4 Phương pháp vào/ra dữ liệu theo ngắt cứng 55
3.2.5 Phương pháp vào/ra dữ liệu theo kiểu DMA (truy nhập trực tiếp bộ nhớ - Direct Memory Access) 57
Chương 4 59
Các thiết bị vào ra 59
4.1 Các thiết bị giao diện và điều khiển vào/ra dữ liệu 59
4.1.1 Ngắt và bộ điều khiển ngắt PIC 8259 59
4.1.2 Truy nhập trực tiếp bộ nhớ và bộ điều khiển DMAC 8237 68
4.1.3 Vào-ra nối tiếp và thiết bị giao diện vào-ra nối tiếp UART 8250/16450 75
Trang 24.1.4 Thiết bị giao diện song song 83
4.2 Các thiết bị ngoại vi 86
4.2.1 Bàn phím 86
4.2.2 Màn hình 90
4.2.3 Đĩa từ 93
Trang 3Chương1 Kiến trúc máy vi tính PC và đơn vị xử lý trung tâm
1.1 Các thành phần cơ bản của máy tính số
Trong lịch sử, máy tính điện tử được phát triển theo 2 hướng kỹ thuật tách biệt, từ đó sinh ra 2 loại máy tính là Máy tính tương tự (analog computer) và máy tính số (digital computer) Máy tính tương tự hoạt động trên các loại số liệu liên tục với các mạch điện tử tương tự, còn máy tính số hoạt động trên các loại số liệu rời rạc với các mạch điện tử số Hiện nay các máy tính số chiếm
ưu thế vượt trội nên khi nói đến máy tính người ta cũng thường hiểu ngầm là máy tính số
Máy tính số gồm các khối chức năng chính như sau:
- Đơn vị xử lý trung tâm (CPU): được chế tạo bởi một mạch vi điện tử có độ tích hợp rất cao, nó
có nhiệm vụ đọc mã lệnh là các bit thông tin 0 hoặc 1 từ bộ nhớ chính, giải mã các lệnh này thành một chuỗi các xung điều khiển để điều khiển các khối khác thực hiện từng bước các thao tác trong lệnh Để làm được điều này bên trong vi xử lí có các thanh ghi (registers) để chứa địa chỉ của các lệnh sắp thực hiện (lệnh kế tiếp) như thanh ghi con trỏ lệnh IP (Instruction Pointer) hay còn gọi là bộ đếm chương trình PC (Program Counter) và các thanh ghi khác dùng để lưu trữ
dữ liệu tạm thời hoặc các trạng thái của hệ thống Các thanh ghi này cùng với bộ tính số học và logic ALU (Arithmetical and Logic Unit) cho phép thực hiện các thao tác với dữ liệu Trong vi
xử lí thì đơn vị điều khiển CU (Control Unit) là phần phức tạp nhất vì nó có chức năng giải mã lệnh và tạo các xung điều khiển toàn hệ thống CPU thực hiện các chức năng chính sau:
- Điều khiển ghi/đọc thông tin lên bộ nhớ
-Hiểu và thực hiện 1 tập hữu hạn các chỉ thị được thể hiện dưới dạng mã số
-Nhập tuần tự các chỉ thị từ bộ nhớ và thực thi các chỉ thị này (chức năng thực hiện chương trình đang có trong bộ nhớ)
-Điều khiển quá trình nhập thông tin từ thiết bị đầu vào và điều khiển quá trình xuất thông tin qua thiết bị đầu ra
- Bộ nhớ chính (RAM+ROM): Được tạo bởi các vi mạch nhớ bán dẫn có tốc độ truy cập nhanh
nhưng dung lượng hạn chế, nằm trên bản mạch chính được chia thành các ô nhớ và mỗi ô nhớ có một địa chỉ duy nhất xác định Địa chỉ của các ô nhớ (xác định vị trí của ô đó trong bộ nhớ) bắt đầu từ 0 và tăng dần, mỗi ô nhớ dài 1 byte
ROM : ROM là bộ nhớ chỉ đọc Dữ liệu trong ROM được duy trì ngay cả khi không có
Trang 4nguồn điện nuôi ROM chứa các chương trình kiểm tra hệ thống, chương trình xác lập cấu hình hệ thống, chương trình đọc cung đĩa khởi động, các chương trình điều khiển các thiết bị vào-ra cơ bản của máy tính (BIOS-Basic Input/Output/Output System)
RAM: RAM là bộ nhớ thao tác Bộ nhớ RAM có chức năng chứa các phần mềm của hệ thống (hệ
điều hành), phần mềm và dữ liệu của một hoặc nhiều chương trình đang hoạt động (chương trình ứng dụng) Nội dung RAM sẽ bị xóa khi mất điện
Ngoài ra còn có:
+ Bộ nhớ khối (bộ nhớ ngoài): Lưu giữ tài nguyên phần mềm của máy tính bao gồm: HĐH, các chương trình và các dữ liệu Bộ nhớ ngoài được kết nối với hệ thống dưới dạng các thiết bị vào/ra Nó có dung lượng lớn nhưng tốc độ truy cập chậm Các loại bộ nhớ ngoài như: Đĩa cứng, đĩa mềm,…
+ Bộ nhớ cache: Là thành phần nhớ tốc độ nhanh được đặt đệm giữa CPU và bộ nhớ chính nhằm tăng tốc độ truy cập bộ nhớ của CPU Dung lượng nhỏ hơn bộ nhớ chính Nó được sử dụng để lưu trữ các lệnh và dữ liệu thường được sử dụng nhiều trong quá trình thực hiện chương trình (bộ nhớ này có thể có hoặc ko có)
-Thiết bị vào: Thực hiện chức năng nhập thông tin cho máy tính
Ví dụ: Bàn phím, chuột,…
-Thiết bị ra: Hiển thị các thông tin đưa ra từ máy tính ở dạng con người có thể hiểu được
VD: Màn hình, máy in, thiết bị âm thanh,…
- Phối ghép vào/ra (thiết bị giao diện): là các mạch điện tử thực hiện chức năng ghép nối, cho phép
CPU thông tin được với các thiết bị ngoại vi như bàn phím, màn hình, ổ đĩa từ, chuột,…Các mạch điện tử này gọi là các cổng vào/ra (I/O port) Tùy theo yêu cầu mà chúng có chức năng hoặc là cổng vào nếu cho phép CPU nhận thông tin từ ngoài hoặc là cổng ra nếu cho phép CPU xuất thông tin ra ngoài hoặc cả hai
Sự có mặt của thiết bị giao diện là do có sự khác biệt rất lớn về dạng thức truyền tải và tốc độ xử
lý thông tin giữa đơn vị xử lý trung tâm và các thiết bị ngoại vi Bên trong máy tính con số được
sử dụng làm phương tiện truyền tải thông tin, thế giới bên ngoài máy tính thông tin được truyền tải dưới dạng ký tự, ánh sáng, âm thanh, Đơn vị xử lý trung tâm xử lý thông tin với tốc độ rất cao, các thiết bị bên ngoài máy tính xử lý thông tin với tốc độ chậm hơn nhiều
- Hệ thống bus:
Các khối cơ bản của máy tính được kết nối với nhau qua một tập đường dây truyền tín hiệu gọi là bus hệ thống: Là đường truyền thông tin trong máy tính.Về mặt vật lý Bus là tập hợp của các đường dây truyền tín hiệu điện, mỗi một đường dây truyền được một bit thông tin tại một thời điểm Đơn vị xử lý trung tâm CPU thực hiện kết nối và trao đổi thông tin với các đơn vị chức năng khác thông qua hệ thống BUS Bus hệ thống gồm 3 bus thành phần là:
+ Bus dữ liệu (2 chiều): để truyền tải dữ liệu
+ Bus địa chỉ (1 chiều: chiều ra từ CPU) để CPU định vị, chọn ô nhớ hoặc chọn thiết bị ngoại vi cần liên lạc, là loại bus 1 chiều
Trang 5+ Bus điều khiển(2 chiều): Do CPU hay thiết bị khác phát ra để điều khiển quá trình trao đổi dữ liệu như tín hiệu để phân biệt đơn vị được CPU truy nhập là thuộc bộ nhớ hay thiết bị vào/ra, thao tác truy nhập là đọc hay viết,…
Để người sử dụng có thể làm việc được trên máy tính (như viết và cho chạy các chương trình ứng dụng của riêng họ) thì chỉ với các bộ phận phần cứng trên là không đủ, một phần mềm gọi là HĐH phải được cài đặt sẵn trong máy tính Đó là 1 tập hợp các chương trình để sử dụng các chức năng cơ bản của các bộ phận phần cứng hay phần mềm trên hệ thống máy tính Khác với chương trình ứng dụng, HĐH là một chương trình hệ thống đặc biệt chạy trong suốt thời gian hoạt động của máy tính Thực ra nó là một tập hợp các chương trình lo việc điều khiển hoạt động của máy tính cũng như cho phép các chương trình phần mềm khác chạy được Nó điều khiển máy tính quyết định cho các chương trình nào chạy trong khoảng thời gian nào, quyết định nguồn tài nguyên nào (bộ nhớ, thiết bị vào/ra,…) đang được sử dụng,
Trong các lĩnh vực khoa học và đời sống, máy tính số có thể dùng trong lĩnh vực xử lý dữ liệu, sử dụng trong đo lường và điều khiển tự động hay được dùng như một bộ xử lí số…
1.2 Biểu diễn thông tin trong máy tính số
1 Các hệ đếm liên quan tới máy tính
- Trong cuộc sống hàng ngày ta thường dùng hệ đếm cơ số mười hay hệ thập phân là tổ hợp các chữ
số từ 0 tới 9 để biểu diễn giá trị các số Còn trong máy tính số thì hệ đếm nhị phân được sử dụng
để biểu diễn giá trị các số Bởi vì máy tính số được xây dựng trên cơ sở các mạch điện, mà các mạch điện ở từng thời điểm chỉ ở một trong hai trạng thái đóng hoặc mở; có hoặc không có dòng điện trong mạch; điện áp cao hoặc điện áp thấp Trong hệ nhị phân thì bit (là số 0 hoặc 1) là đơn
vị nhỏ nhất biểu diễn dữ liệu (đơn vị nhỏ nhất mang thông tin) trong máy tính
- Để biểu giá trị của một số N bất kỳ ta dùng ký pháp vị trí như sau:
anan-1….a1a0a-1a-2…a-(m-1)a-m=an*bn+an-1*bn-1+…+a1*b1+a0*b0+a-1*b-1+a-2*b-2 +…+a-(m-1)*b (m-1)+a-m*b-m
-Trong đó:
b : là c ơ số ;
b n-1 ,…,b 2 ,b 1 ,b 0 ,b -1 ,b -2 ,…,b -(m-1) ,b -m là các tr ọng số
a n , a n-1 ,a n-2 ,…,a 1 ,a 0 ,a -1 ,a -2 ,…a -(m-1) ,a -m : là các s ố nằm ở vị trí tương ứng với trọng số
Khi cần phân biệt rõ hệ đếm thường viết thêm chỉ số dưới ký hiệu cơ số vào các số Ví dụ số 65 trong hệ thập phân được viết là 6510, trong hệ nhị phân được viết là 1001022
Trang 6Trong đó :
2 - cơ số ;
2-1, 20, 21, 22, 23 ,24, 25, 26– các trọng số
1, 0, 1, 1, 1,1,1,1 – là các chữ số được đặt ở vị trí tương ứng với trọng số
- Hiện nay có 4 hệ đếm hay được dùng trong những bài toán liên quan đến máy tính đó là :
Hệ mười (decimal) b=10 a={0,1,2,3,4,5,6,7,8,9}
Hệ nhị phân (binary) b=2 a={0,1}
Hệ tám (octal) b=8 a={0,1,2,3,4,5,6,7}
Hệ mười sáu (hexaldecimal) b=16 a={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
Giữa các hệ đếm thường xuyên phải có sự chuyển đổi qua lại :
+ Đổi số thập phân sang các số có hệ cơ số r được thực hiện bằng cách tách số đó thành 2 phần : Phần nguyên và phần phân số để biến đổi riêng rẽ Sự biến đổi phần nguyên được thực hiện bằng cách chia liên tiếp cho r và tích lũy các số dư lại Biến đổi phần phân số được thực hiện bằng cách nhân liên tiếp với r và tích lũy các số nguyên nhận được Ví dụ dưới đây là quá trình biến đổi số thập phân sang số nhị phân :
Đổi 23.37510 sang nhị phân Chúng ta sẽ chuyển đổi phần nguyên dùng phương thức số
dư :
KQ : 23.37510 = 10111.0112
Tuy nhiên, trong việc biến đổi phần lẻ của một số thập phân sang số nhị phân theo phương thức nhân, có một số trường hợp việc biến đổi số lặp lại vô hạn như:
Trang 7+ Đổi số nhị phân sang số thập phân: Bằng cách cộng các số mũ 2 ứng với các số bằng 1 trong số nhị phân
Ví d ụ:
+ Chuyển đổi giữa các số nhị phân và số hệ thập lục: Một nhóm số nhị phân 4 bit vừa đủ
biểu diễn một chữ số trong hệ mười sáu nên ta sẽ nhóm số nhị phân cần chuyển đổi thành các nhóm 4bit và đổi mỗi nhóm đó ra 1 chữ số mười sáu:
+ Giữa hệ thập phân và nhị phân tồn tại một hệ lai BCD (binary coded decimal): Hệ này
mã hóa mỗi con số trong hệ thập phân bằng một só nhị phân Thường dùng một số nhị phân 4 bit
để mã hóa cho các chữ số từ 0 đến 9 Như vậy không dùng hết các tổ hợp có thể có của 4bit (24=16)
Ví dụ: Số 52010 nếu biểu diễn theo số BCD sẽ là:
Trang 8biểu diễn của 2 trong hệ nhị phân là 2 = 1*21 + 0*20 = 10 nên kết quả chính là 0
0 – 1 = 1 mượn 1 (vì số bị trừ nhỏ hơn số trừ nên phải mượn 1từ số
ở vị trí cao hơn bên trái)
- Nhân hai số nhị phân: Phép tính nhân trong hệ nhị phân cũng tương tự như phương
pháp làm trong hệ thập phân Hai số A và B được nhân với nhau bởi những tích số của các kí số
0 và 1 của A và B: với mỗi con số ở B, tích của nó với một con số trong A được tính và viết xuống một hàng mới, mỗi hàng mới phải chuyển dịch vị trí sang bên trái 1 bit Tổng của các tích cục bộ này cho ta kết quả tích số cuối cùng
Nguyên tắc: 0 * 0 = 0 ; 1 * 0 = 0; 0 * 1 = 0; 1 * 1 = 1
Ví dụ: 9 x 6 = 54 (1001 x 110 = 110110)
Trang 9Để dễ hiểu, xem 2 hình dười đây, hình thứ nhất biểu diễn cách nhân 2 số thập phân và hình thứ 2 là cách nhân 2 số nhị phân
3 Biểu diễn số nguyên không dấu và có dấu trong máy tính
3.1 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
Để biểu diễn các số nguyên không dấu, người ta dùng n bit Tương ứng với độ dài của số bit được sử dụng, ta có các khoảng giá trị xác định như sau:
S ố bit Kho ảng giá trị
n bit: 0 2 n - 1
8 bit (Byte) 0255
16 bit(Word) 065535
Trang 103.2 Biểu diễn số nguyên có dấu trong máy tính
Các số nguyên có dấu dùng bit tận cùng bên trái làm bit dấu : bit bằng 0 biểu diễn cho dấu (+)
và bằng 1 cho dấu (-) Một cách tổng quát ta có
S ố bit Kho ảng giá trị
S ố bù 2 của một số nhị phân được tạo ra bằng cách lấy 1 trừ mỗi chữ số và cộng 1 vào chữ
s ố có ý nghĩa thấp nhất của số vừa được tạo ra Phương pháp tạo số bù 2 của một số trên thực tế đuợc thực hiện bằng cách đổi số 0 thành số 1, đổi số 1 thành số 0 và cộng 1 vào chữ số có ý
ngh ĩa thấp nhất của số vừa được tạo ra
Ví d ụ : Số bù 2 của -25
10 = 11100111
2 -6510=1011 1111 Với hệ thống bù 2 các phép tính cộng và trừ hai số nhị phân được thực hiện qua chỉ một phép tính cộng Trong hệ thống bù 2 khi thực hiện cộng hai số có thể có bốn tình huống xảy ra:
+ C ả 2 số là dương : Khi thực hiện phép cộng thì cộng từng số từ phải qua trái, kể cả bit
dấu Ví dụ cộng hai số dương 4 bit :
+ M ột số là dương, một số là âm và số âm có trị tuyệt đối nhỏ hơn Bù 2 của số âm được
tạo và thêm bit dấu vào vị trí cao nhất
Khi thực hiện phép cộng, một bit nhớ sẽ được tạo ra từ bit dấu Cần bỏ bit nhớ đi Kết quả
là một số dương
Ví dụ cộng hai số khác dấu 4 bit :
Trang 11+ Một số là dương, một số là âm và số âm có trị tuyệt đối lớn hơn
Khi thực hiện phép cộng, không có nhớ từ bit dấu Kết quả là một số âm ở dạng bù 2 Cần
bỏ bit dấu ở kết quả và phải tạo số bù 2 với số đó để nhận được kết quả thật
Ví dụ cộng hai số khác dấu 4 bit :
+ C ả hai số là âm : Khi thực hiện phép cộng, có nhớ được tạo ra từ bit dấu Cần bỏ bit nhớ và
kết quả là một số âm ở dạng bù 2 Phải bỏ bit dấu và tạo số bù 2 với số đó để nhận được kết quả thật
Ví dụ cộng hai số âm 4 bit :
4 Biểu diễn số thực trong máy tính
Trong các hệ đếm để mô tả các giá trị có phần nhỏ hơn 1 người ta dùng 1 dấu “.” (theo tiếng Anh) hay dấu “,” (theo tiếng Việt) để phân cách 2 phần: Phần nguyên và phần phân số Vì vậy trong mục này ta sẽ gọi số có dấu phảy là số có dấu chấm
Có 2 cách biểu diễn một số thực trong hệ nhị phân : Số có dấu chấm cố định (fixed point number) và
số có dấu chấm động (floating point number)
4.1 Biểu diễn số có dấu chấm cố định
Tương tự như cách biểu diễn 1 số thực thông thường của hệ thập phân gồm 2 phần : Phần nguyên và phần sau dấu chấm Công thức như sau :
an-1an-2….b1b2…bm-1bm=an-1*En-1+an-2*En-2+…+a1*E1+a0*E0+b1*E-1+b2*E-2 +…+bm-1*E(m-1)+bm*E-m
-VD : 111.11=2*2-2 + 2*2-1 + 2*20 + 2*21 + 2*22
4.2 Biểu diễn số có dấu chấm động
Khi cần biểu diễn và xử lí những phân số và những số rất dài, thí dụ các số bao gồm rất nhiều con số 0 mà chỉ có một ít con số có ý nghĩa như hai số sau :
Khối lượng mặt trời : 199000000000000000000000000000000000g
Trang 12Khối lượng điện tử : 0.000000000000000000000000000000910956g
Khi này máy tính sẽ phải dùng đến một số lớn byte nhớ để lưu trữ các con số 0 như vậy Như đã biết rằng 1 byte biểu diễn được 256 số (từ 0 tới 255) thì để biểu diễn một số trong dải rất rộng từ lớn đến nhỏ như vậy cần đến cỡ 14 byte cho phần nguyên và 12 byte cho phần thập phân
Rõ ràng trong trường hợp này dùng loại số có dấu chấm tĩnh sẽ rất bất tiện Máy tính số thường biểu diễn và lưu trữ những số trên trong dạng dấu chấm động như sau : 1.99*1033g và 0.910956*10-27g hay theo cách viết khoa học là 1.99E33g và 0.910956E-27g Tổng quát lên thì một số dấu chấm động sẽ có dạng là:
+ Dạng đơn giản : Số dấu chấm động được lưu trữ dưới dạng dữ liệu 32bit :
Dữ liệu này biểu diễn giá trị : V=(-1)S*2E-127*1.F
V : giá trị của số dấu chấm động
S : bit dấu
E : Số nguyên nhị phân
F : Phần sau dấu chấm nhị phân (dạng mã nhị phân) Phần định trị có dạng 1.F + Dạng độ chính xác gấp đôi : Giá trị dấu chấm động độ chính xác gấp đôi được lưu trữ dưới dạng dữ liệu 64bit :
Dữ liệu này biểu diễn giá trị :
V=(-1)S*2E-1023*1.F Phạm vi biểu diễn của số dấu chấm động 64bit được hiểu theo cách tương tự như với số chấm động 32bit
Ví dụ các bước biến đổi số thập phân -12.625
10 sang số chấm động chuẩn IEEE 754 chính xác đơn (32 bit):
• Bước 3: Điền các bit vào các trường theo chuẩn:
Số âm: bit dấu S có giá trị 1 Phần mũ E với số thừa K=127, ta có: E-127=3
⇒ E = 3 + 127 = 130 (1000 0010
2)
Trang 131.2.5 Biểu diễn các dạng thông tin khác
- Biểu diễn hình ảnh :
Ảnh thực chất là một tập hợp các điểm màu liên tiếp liền nhau hoặc 1 tập hợp các đường hình học nhằm miêu tả 1 phong cảnh sự vật hay một chủ đề nào đó Trên máy tính ảnh được lưu trên các file nhị phân theo các định dạng do nhà sản xuất quy định Hiện tại có hơn 50 định dạng ảnh
khác nhau được chia làm 2 loại cơ bản nhất là ảnh bitmap và ảnh vecto Như ảnh bitmap mỗi bit
t ương ứng một điểm ảnh (giá trị 1 – màu đen, giá trị 0 – màu trắng)
Ta có thể gặp rất nhiều các định dạng ảnh khác nhau như : BMP,ICO,GIF, JPG,…
- Biểu diễn âm thanh : ta có thể mã hóa âm thanh theo hệ đếm nhị phân bằng cách ngắt âm thanh ra
thành nhiều giá trị sau một khoảng thời gian nhất định Sau đó gán cho mỗi giá trị một mã nhị phân và lưu trữ chúng tuần tự trong một tệp Ví thính giác con người chỉ phân biệt được tần số
Trang 14âm thanh tối đa là fmax=20Khz, nên theo quy luật lấy mẫu tần số ngắt âm thanh tối thiểu phải lớn gấp đôi tần số tối đa fmax
Mã hóa âm thanh bằng 8bit sẽ cho 256 giá trị khác nhau Những khổ âm thanh thường gặp là WAVE, MPEG,…
1.3 Kiến trúc cơ bản máy vi tính PC
Một máy tính PC được xây dựng trên cơ sở các khối chức năng cơ bản sau:
1 Đơn vị xử lý trung tâm CPU 80286
CPU 80286 là loại 16 bít (độ rộng của dữ liệu hoặc mã lệnh là 16 bit) Chức năng chính của CPU:
+ Quản lý bộ nhớ
CPU 80286 có Bus địa chỉ 24bit và quản lý được 24*220 = 16M ô nhớ vật lý
+ Hiểu và xử lý một tập hữu hạn các lệnh
- Chuyển dữ liệu giữa CPU và bộ nhớ (MOV, PúH, POP v.v.)
- Số học và logic (ADD, SUB, MUL, DIV v.v )
- Xử lý bit (SHL.SHR.ROL.Rỏ v.v )
- Rẽ nhánh (JMP CALL, RET INT v.v )
- Vào/ra dữ liệu các cổng (IN, OUT)
- Các lệnh khác (CLI STI v.v )
+ Thực hiện chương trình theo cơ chế nhập tuần tự từng lệnh từ bộ nhớ và xử lý
+ Điều khiển hoạt động trao đổi dữ liệu giữa CPU và bộ nhớ, giữa CPU với thiết bị vào/ra
và với các thiết bị khác
CPU 80286 có hai ch ế độ làm việc
Trang 15+ Chế độ thực: là chế độ hoạt động giống như CPU.8086 Khi bật nguồn điện thì CPU được đặt ở chế độ thực Trong chế độ này CPU quản lý bộ nhớ vật lý lớn đến 24*216 = 1Mb, và có thể
mở rộng đến 16Mb
+ Chế độ bảo vệ
Chế độ bảo vệ cung cấp cơ chế bảo vệ bộ nhớ và công cụ hỗ trợ quản lý bộ nhớ ảo Trong chế độ này CPU quản lý được 214 * 216 = 230 = 1G ô nhớ Các CPU từ 80286 trở về sau đều có khả năng làm việc ở chế độ này
và RAM
ROM : ROM là bộ nhớ chỉ đọc Dữ liệu trong ROM được duy trì ngay cả khi không có
nguồn điện nuôi ROM chứa các phần mềm cơ bản sau:
- Các chương trình kiểm tra hệ thống (quá trình POST): Kiểm tra CPU, kiểm tra RAM, kiểm tra các thiết bị điều khiển và giao diện, các thiết bị ngoại vi như bàn phím, ổ đĩa, v.v
- Chương trình xác lập cấu hình hệ thống
- Chương trình quét ROM mở rộng (Tại các địa chỉ C000 : 0000, D000:
000 Nếu tìm thấy bất kỳ ROM nào có chương trình thì nó sẽ được thực thi)
- Chương trình đọc cung khởi động (mặt 0, rãnh 0, cung vật lý 1) của ổ đĩa khởi động mặc định BIOS thường cho phép chọn ổ đĩa khởi động mặc định Nếu khởi động từ đĩa mềm thì cung khởi động (Boot Record) được đọc Nếu khởi động từ ổ cứng thì cung khởi động chủ (Master Boot Record-MBR) của ổ đĩa cứng thứ nhất được đọc Nội dung cung này được nạp vào RAM tại địa chỉ
0000 : 7C00 CPU chạy chương trình khởi động hệ điều hành tại địa chỉ này
ROM còn chứa các chương trình điều khiển các thiết bị vào-ra cơ bản của máy tính Basic Input/Output/Output System) BIOS là cầu nối giữa phần cứng và phần mềm trong hệ thống máy tính Các chương trình điều khiển này luôn gắn với cấu hình phần cứng của máy tính Thông qua các chương trình này hệ điều hành có thể giao diện được với phần cứng của từng máy tính
(BIOS-RAM: RAM là bộ nhớ thao tác Bộ nhớ RAM có chức năng chứa các phần mềm của hệ
thống (hệ điều hành), phần mềm và dữ liệu của một hoặc nhiều chương trình đang hoạt động (chương trình ứng dụng)
Phân bổ địa chỉ của các vùng chức năng tại vùng nhớ đầu tiên như sau:
Trang 16Địa chỉ vật lý
(hexadecimal)
Địa chỉ đoạn (hexadecimal)
Tên và chức năng vùng nhớ
000000-09FFFF 00000 Vùng nhớ quy ước 640Kb dành cho hệ điều hành và
người sử dụng 0A0000-0BFFFF A000 Vùng nhớ 128Kb dành cho hiển thị (VIDEO RAM) 0C0000-0DFFFF C000 Vùng nhớ 128Kb dự phòng cho ROM, mở rộng
(C000,C800,D000,D800) 0E0000-0EFFFF E000 Vùng nhớ 64kb dự phòng cho RAM hệ thống
5 B ộ định thời TIMER 8254
TIMER 8254 gồm có 3 bộ đếm nhị phân 16 bít Đây là các bộ đếm khả trình Các bộ đếm
16 bít trong TIMER 8254 nhận xung nhịp tần số 1190MHz từ mạch tạo xung chuẩn TIMER
8254 tạo ra xung nhịp cho đồng hồ hệ thống, xung nhịp làm tươi DRAM và xung âm thanh cho loa:
Bộ đếm # 0: tạo xung nhịp chu kỳ 55ms (18.2 xung/ls) cho đồng hồ hệ thống
Bộ đếm #1: tạo xung nhịp kích hoạt hệ thống làm tươi DRAM
Bộ đếm #2: Cho phép người sử dụng lập trình tạo xung âm thanh cho loa
6 B ộ điều khi ển ng ắt PIC8259 (Programmable Interrupt Controller)
PIC 8259 là thiết bị điều khiển khả trình PIC 8259 hỗ trợ CPU thực hiện
cơ chế ngắt cùng cho phép CPU phản ứng tức thời với yêu cầu của các thiết bị vào-ra dữ liệu
và các thiết bị khác Trong máy vi tính dòng AT có hai thiết bị PIC 8259, mỗi thiết bị ghi nhận được 8 yêu cầu ngắt
Trang 177 B ộ điều khiển truy nhập trực tiếp bộ nhớ DMAC 8237 (Direct Memory Access Controller)
DMAC 8237 là thiết bị điều khiển khả trình DMAC 8237 điều khiển quá trình vào/ra dữ liệu trực tiếp giữa bộ nhớ và các thiết bị ngoại vi (ví dụ: thiết bị đĩa từ), gọi tắt là quá trình DMA (Direct Memory Access) Trong máy vi tính dòng AT có hai thiết bị DMAC 8237, mỗi thiết bị phục vụ 4 kênh DMA
8 Thi ết bị giao diện bàn phím KC 8042 (Keyboard Controller)
KC 8042 thực hiện chức năng giao diện giữa bàn phím và đơn vị xử lý trung tâm CPU
KC 8042 thực hiện giao diện kiểu nối tiếp đồng bộ giữa CPU và bàn phím, phát các chỉ thị và nhận mã phím từ bàn phím
9 Thi ết bị giao diện màn hình CRTC (Cathode Ray Tube Controller)
CRTC là thiết bị khả trình CRTC thực hiện chức năng giao diện giữa CPU và màn hình hiển thị CRTC nhận lệnh và dữ liệu từ CPU, tạo ra tín hiệu ảnh và các tín hiệu đồng bộ điều khiển hiển thị trên màn hình CRTC có thể làm việc ở hai chế độ văn bản và đồ hoạ màu
10 Thi ết bị giao diện nối tiếp UART 8250 (Universal Asynchronous Receiver Transmitter)
UART 8250 thực hiện chức năng giao diện kiểu nối tiếp không đồng bộ giữa CPU và các thiết bị ngoại vi theo chuẩn RS232.UART 8250 thực hiện chức năng nhận và phát dữ liệu dạng nối tiếp, tạo và nhận các tín hiệu bắt tay với thế giới bên ngoài theo chuẩn RS232 Trong máy
vi tính dòng AT có hai thiết bị UART 8250
11 Thi ết bị giao diện song song PPI (Programmable Peripheral Interface)
Mạch PPI thực hiện quá trình giao diện song song giữa CPU và các thiết bị ngoại vi PPI thực hiện chức năng nhận và phát dữ liệu dạng song song, tạo và nhạn các tín hiệu bắt tay với các thiết bị ngoại vi
12 Thi ết bị giao diện mềm FDC (Floppy Disk Controller)
FDC thực hiện chức năng giao diện giữa CPU và thiết bị đĩa mềm FDC nhận lệnh và dữ liệu từ CPU hoặc bộ nhớ, chuyển thành dạng thích hợp đưa ra thiết bị đĩa mềm và ngược lại
13 Thi ết bị giao diện đĩa cứng HDC (Hard Disk Controller)
HDC thực hiện chức năng giao diện giữa CPU và thiết bị đĩa cứng theo chuẩn IDE, HDC nhận dữ liệu từ bộ nhớ, chuyển thành dạng thích hợp đưa ra thiết bị đĩa cứng và ngược lại theo chuẩn IDE
Trong PC hiện đại các mạch chức năng như 8254, 8259, 8237, CMOSRAM, 8250, PPI, 8042, điều khiển IDE, cầu PCI, v.v được tích hợp vào các mạch tích hợp cỡ lớn (chipset)
Không gian địa chỉ các thiết bị vào-ra được phân bổ chặt chẽ Địa chỉ các cổng vào-ra (port address) được phân bổ như sau:
Trang 18060-064 Thiết bị điều khiển giao diện bàn phím KC8042 070-071 CMOS-RAM-Đồng hồ thời gian thực
080-09F Thanh ghi trang DMA 0A0-0BF Bộ điều khiển ngắt PIC-2 8259, thợ
0C0-0DF Bộ điều khiển DMAC-2 8237
0F8-0FF Bộ đồng xử lý 80x87 170-177 Thiết bị điều khiển giao diện IDE-1 1F0-1F7 Thiết bị điều khiển giao diện IDE-0 200-207 Thiết bị giao diện điều khiển trò chơi 278-27F Thiết bị giao diện song song 2 (cổng máy in LPT2) 2F8-2FF Thiết bị giao diện nối tiếp 2 (cổng nối tiếp COM2) 300-31F Card thử nghiệm
378-37F Thiết bị giao diện song song 1 (cổng máy in LPT1)
3B0-3BF Thiết bị giao diện màn hình đơn sắc
3D0-3DF Thiết bị giao diện màn hình VGA
3F0-3F7 Thiết bị giao diện đĩa mềm FDC 3F8-3FF Thiết bị giao diện nối tiếp 1 (cổng nối tiếp COM1)
1.4 Đơn vị xử lý trung tâm CPU (Central Proccessing Unit)
1.4.1 Cấu hình bên ngoài
Đơn vị xử lý trung tâm 80286 của máy vi tính PC/AT có các chân tín hiệu như hình sau:
Trang 19- CLK: tín hiệu xung tạo nhịp thời gian cơ sở cho đơn vị xử lý trung tâm
- RST: tín hiệu khởi động hệ thống (đưa mạch logic bên trong CPU về trạng thái ban đầu)
Nếu RST=1 trong ít nhất 16 nhịp đồng hồ thì vi xử lý sẽ bỏ chương trình đang chạy và nhảy vào trạng thái khởi động lại ngay sau khi chuyển xuống mức 0
- A23-A0: BUS địa chỉ (24 tín hiệu địa chỉ, 3 trạng thái) xác định địa chỉ bộ nhớ và các thiết bị vào-ra Kích thước tối đa của bộ nhớ vật lý là 224 = 16Mb Khi CPU làm việc với các cổng vào-ra thì các chân A23-A16 có mức 0, các dây A15-A0 được dùng để xác định địa chỉ 64Kb cổng vào-ra
- D15-D0: BUS dữ liệu 16 bít, hai chiều, 3 trạng thái
- Vcc: Nguồn nuôi +5V cho vi xử lý
- GND: Được nối đất (0V)
Các tín hệu điều khiển
- INT: tín hiệu yêu cầu ngắt cứng Yêu cầu ngắt có thể bị che khi bit cờ IF trong thanh ghi FLAGS được đặt xuống 0
- NMI: yêu cầu ngắt không che được bằng cờ IF
Ngắt này không bị che bởi cờ ngắt Ngắt này sẽ được thực hiện ngay sau khi kết thúc lệnh hiện tại
- HOLD: yêu cầu CPU "thả nổi" hệ thống BUS
Khi có thiết bị nào đó muốn làm chủ (quản lý hệ thống bus như DMAC 8237) nó sẽ gửi tín hiệu HOLD cho CPU
- HLDA: trả lời "HOLD" Khi HLDA tích cực thì các đầu Ao-A23, Do-D15 và một số đầu tín hiệu điều khiển khác có trở kháng cao, CPU bị cách ly với thế giới bên ngoài (Nếu đồng ý thì HLDA=1)
- -LOCK: cấm các µP khác làm chủ BUS
- PEREQ, -PEACK, -BUSY, -ERROR: Các tín hiệu này được dùng để ghép nối 80286 với các phần tử
mở rộng của vi xử lý như bộ đồng xử lý toán 80287
+ PEREQ: tín hiệu từ bộ đồng xử lý là một toán hạng đã được gửi
+ -PEACK: Báo cho bộ đồng xử lý là 1 toán hạng đã được gửi
PEREQ
MI/-IO
Trang 20+ -BUSY: tín hiệu từ bộ đồng xử lý báo bận
+ -ERROR: tín hiệu từ bộ đồng xử lý báo lỗi
- -BHE: Khi kết hợp với chân A0 sẽ cho các chỉ thị sau:
0 1 1 byte trên D15÷D8 được truy xuất tới địa chỉ lẻ (vd 2F05H)
1 0 1 byte trên D15÷D8 được truy xuất tới địa chỉ chẵn (vd 2F04H)
- COD/-INTA: mức tích cực thấp là tín hiệu trả lời ngắt
- M/-IO: Nếu =1 truy xuất bộ nhớ
Nếu =0 Truy xuất bộ phận vào/ra
- READY: Nếu bộ nhớ (thiết bị ngoại vi) cần truy nhập hoàn tất việc chuyển số liệu đến (hoặc đi) chúng cần phát ra tín hiệu READY ở mức tích cực 1 tới vi xử lý, chỉ khi ấy vi xử lý mới đọc số liệu vào hoặc tiếp tục xuất ra số liệu
- Về điều khiển thì 80286 phát ra các tín hiệu trạng thái tới 1 chip gọi là bộ điều khiển bus (82288) tiếp
đó chip này sẽ dịch (giải mã) các tín hiệu trạng thái và phát ra các tín hiệu điều khiển tới các bus cụ thể sau:
Trang 211.4.2 Cấu hình bên trong
CPU 80286 được cấu thành từ 4 đơn vị chính như sau:
- Đơn vị BUS (BU):
BU bao gồm các đệm địa chỉ, điều khiển và dữ liệu BU thực hiện giao diện BUS, tạo ra và nhận vào các tín hiệu địa chỉ, điều khiển và dữ liệu và nhập lệnh từ bộ nhớ vào hàng đợi
- Đơn vị lệnh IU
IU gồm bộ giải mã lệnh và hàng đợi lệnh đã giải mã Đơn vị lệnh IU thực hiện giải mã lệnh và đưa vào hàng đợi
- Đơn vị thực hiện EU : EU thực hiện lệnh đã được giải mã
EU bao gồm đơn vị điều khiển, các thanh ghi và đơn vị số học – logic
+ Đơn vị điều khiển CU (Control Unit) : Đơn vị điều khiển CU có chức năng giải mã lệnh và từ
đó tạo ra các tín hiệu điều khiển hoạt động của các đơn vị chức năng khác ở bên trong và bên ngoài đơn vị xử lý trung tâm CPU, nhằm thực thi được lệnh hiện hành CU điều khiển thực hiện các vi thao tác thực hiện lệnh theo nhịp của xung đồng hồ Clock
+ Đơn vị số học – logic ALU (Arithmetic – Logic Unit) : ALU thực hiện các phép tính số học, logic và các phép xử lý dữ liệu khác
+ Các thanh ghi dùng để chứa địa của ô nhớ, chứa dữ liệu, hay trạng thái kết quả của phép tính
…trong quá trình CPU thực hiện chương trình
- Đơn vị địa chỉ AU : Đơn vị địa chỉ AU gồm các thanh ghi đoạn, các thanh ghi trong chế độ bảo vệ, bộ cộng địa chỉ offset, bộ tạo địa chỉ vật lý từ địa chỉ logic AU quản lý bộ nhớ trong cả hai chế độ làm việc : chế độ thực và chế độ bảo vệ
1.4.3 Quản lý bộ nhớ trong chế độ thực và các thanh ghi đoạn
Trang 22- Các thanh ghi của CPU 8086 chỉ có độ dài 16bits nên nếu dùng 1 thanh ghi để đánh địa chỉ thì quản lý được 216 ô nhớ
Để giải quyết vấn đề quản lý 1Mbyte thì ta sẽ thông qua nội dung của 2 thanh ghi 16bits theo phương thức như sau :
+ Chia không gian địa chỉ thành các đoạn nhớ với kích thước cố định là 64Kbyte
++ Mỗi đoạn gồm các ô nhớ liên tiếp, độc lập và được định vị tách rời nhau
++ Mỗi đoạn sẽ được gán một địa chỉ duy nhất xác định gọi là địa chỉ đoán (là địa chỉ của
ô nhớ đầu tiên của đoạn đó, còn được gọi là địa chỉ nền)
++ Mỗi ô nhớ trong đoạn được xác định bằng địa chỉ offset (địa chỉ lệch) : là khoảng cách
từ địa chỉ đoạn đến ô nhớ đó Một cặp giá trị địa chỉ đoạn và địa chỉ lệch có định dạng : Địa chỉ đoạn : Địa chỉ offset được gọi là địa chỉ logic Địa chỉ logic này cho phép định vị chính xác 1 ô nhớ (1byte nhớ) trong không gian địa chỉ
b Cách qu ản lý
Trong chế độ thực bộ nhớ được quản lý theo cơ chế phân đoạn (segmentation), tức là bộ nhớ được định vị và giám sát theo đoạn Trong cơ chế phân đoạn mỗi một chương trình không được xem là một chuỗi liên tục của mã lệnh và dữ liệu mà được chia thành các modul mã lệnh, dữ liệu, ngăn xếp,…Mỗi modul được chứa trong một đoạn nhớ và có một địa chỉ xác định Ở CPU 16bit mỗi một đoạn có kích thước 64Kb Hệ điều hành có thể đặt các modul của chương trình ở bất kỳ chỗ nào trong bộ nhớ vật lý, đoạn nhớ sẽ mang tên của loại modul nó chứa
Có 4 loại đoạn khác nhau:
+ Đoạn mã lệnh (code segment): chứa mã lệnh của chương trình
+ Đoạn dữ liệu (data segment): chứa dữ liệu của chương trình
+ Đoạn ngăn xếp (stack segment): là đoạn chứa các thông tin và dữ liệu phục vụ chương trình con + Đoạn mở rộng (extra segment): chứa dữ liệu mở rộng
Mỗi một đoạn có một địa chỉ gọi là địa chỉ đoạn CPU có phần cững hỗ trợ việc quản lý và truy nhập các đoạn, đó là các thanh ghi đoạn 16bit CS, DS, SS, ES Trong chế độ thực thanh ghi đoạn chứa địa chỉ đoạn Cụ thể :
+ Thanh ghi CS chứa địa chỉ đoạn mã lệnh
+ Thanh ghi DS chứa địa chỉ đoạn dữ liệu
+ Thanh ghi SS chứa địa chỉ đoạn ngăn xếp
+ Thanh ghi ES chứa địa chỉ đoạn mở rộng
- Địa chỉ đoạn xác định vị trí của đoạn trong bộ nhớ Ta nhận được địa chỉ nền của đoạn vật lý (địa chỉ của ô nhớ đầu tiên của đoạn) bằng cách dịch trái địa chỉ đoạn đi 4 bit và điền các số 0 vào 4 bit thấp nhất
- Mỗi ô nhớ trong đoạn được định vị bằng một cặp con số : địa chỉ đoạn và địa chỉ offset (địa chỉ lệch), trong đó địa chỉ offset là con số xác định vị trí của ô nhớ so với nền đoạn Cặp số này được gọi là địa chỉ logic của ô nhớ Địa chỉ logic của một ô nhớ thường được biểu diễn ở dạng : địa chỉ đoạn : địa chỉ offset
Ta có 2 cặp thanh ghi sau luôn đi với nhau : CS : IP và SS : SP
Trang 23+ IP : Chứa địa chỉ offset của ô nhớ trong đoạn mã lệnh chứa lệnh CPU cần nhập để thực hiện
+ SP : Chứa địa chỉ offset của ô đỉnh ngăn xếp trong đoạn ngăn xếp
- Khi truy nhập các đoạn dữ liệu người lập trình cần xác định offset của các ô nhớ bằng các phương pháp xác định địa chỉ toán hạng (định vị toán hạng)
- Ta có thể hình dung cơ chế quản lý bộ nhớ trong chế độ thực như hình vẽ sau :
Cách tính địa chỉ vật lí
- Vì thanh ghi đoạn là thanh ghi 16bit có nhiệm vụ xác định đoạn của ô nhớ Còn các thanh
ghi 16bit còn lại (thanh ghi đa năng, con trỏ, chỉ số) xác định vị trí của ô nhớ trong đoạn
- Vì địa chỉ vật lý có độ dài 20bit
địa chỉ đoạn chiếm 16bits cao trong 20bits địa chỉ vật lý
Địa chỉ offset chiếm 16bits thấp trong 20bit địa chỉ vật lý
ta có cách chuyển đổi sau:
B1: Dịch trái địa chỉ đoạn đi 4 bit và điền các bit 0 vào 4 bit thấp
B2: Cộng địa chỉ offset với địa chỉ đoạn sau khi dịch trái
Cụ thể như sau:
Công thức tính: Địa chỉ vật lý = Địa chỉ đoạn *10H + Địa chỉ offset
Vd: địa chỉ logic 1234h:0005h sẽ ứng với
Trang 24địa chỉ vật lí 1234h * 10h + 0005h = 12340h + 0005h = 12345h
Việc đổi từ địa chỉ vật lí sang địa chỉ logic cũng không có gì phức tạp Tuy nhiên, do các segment gối đầu nhau nên mỗi ô nhớ có thể thuộc một vài segment khác nhau Vì vậy, một địa chỉ vật lí
có thể ứng với nhiều địa chỉ logic khác nhau
Vd: địa chỉ vật lí 12345h có thể ứng với các địa chỉ logic sau:
1234h:0005h 1230h:0045h 1200h:0345h 1000h:2345h 1232h:0025h
…
Ta có thể thấy rõ hơn về cơ chế quản lý bộ nhớ trong chế độ thực qua hình vẽ dưới:
- Nhận xét:
+ Các đoạn không được xếp tuần tự nhau mà được xếp chồng gối lên nhau
+ Khoảng cách tối thiểu của mỗi đoạn là cách nhau 16 ô nhớ hay cách nhau 16bytes
1.4.4 Các thanh ghi
Các thanh ghi là các đơn vị lưu trữ dữ liệu nằm trong CPU có tốc độ truy cập nhanh Chúng được dùng để chứa các toán hạng của lệnh, các kết quả tạm thời của các quá trình tính toán Các thanh ghi trong 80286 được chia ra thành các nhóm sau :
Các thanh ghi đa năng AX, BX, CX, DX :
Trang 25AX, BX, CX, DX là các thanh ghi đa năng 16 bit, được dùng để chứa các toán hạng của lệnh hoặc các kết quả của phép tính
Có thể truy nhập từng thanh ghi này như là các thanh ghi 16 bit AX, BX, CX, DX hoặc như các thanh ghi 8 bit AH, AL, BH, BL, CH, CL, DH, DL
Các thanh ghi AX, BX, CX, DX còn có các chức năng mặc định riêng trong một số ngữ cảnh cụ thể sau :
- AX (Accumulator): Khi gọi các hàm chức năng của hệ điều hành qua lệnh INT, thanh ghi
AX hoặc AH được dùng để chứa con số xác định một chức năng cụ thể cần thực hiện của hàm này
VD : INT 21 thực hiện hàm 5B- Tạo tập tin mới thì AH=5B
- BX (Base): Khi thực hiện các lệnh truy nhập đoạn dữ liệu, BX được dùng để xác định địa chỉ offset hoặc địa chỉ offset nền của ô nhớ trong đoạn
- CX (Counter): Khi thực hiện các lệnh LOOP hoặc REP, CX đóng vai trò một bộ đếm (chứa số đếm), xác định số lần thực hiện lặp
VD : Để lặp 1 vòng n lần CX=n Giá trị này được giảm đi 1 khi thực hiện song 1 lần lặp
và cứ tiếp tục như vậy cho tới khi CX=0 thì kết thúc
- DX (Data) : Được dùng để chứa hai byte cao kết quả phép nhân hoặc phần dư của phép chia 16 bit Khi truy nhập các cổng vào/ra có địa chỉ lớn hơn 255, DX được dùng để chứa địa chỉ (xác định địa chỉ) các công này
VD : DX=378H là địa chỉ của cổng máy in
Các thanh ghi địa chỉ BP, SI, DI, SP: là các thanh ghi 16 bit
- SP (Base Pointer): BP được dùng để xác định địa chỉ offset hoặc địa chỉ offset nền của ô nhớ khi thực hiện các lệnh truy nhập các đoạn dữ liệu BP thường được dùng để xác định địa chỉ offset hoặc địa chỉ offset nền khi truy nhập đoạn ngăn xếp
- SI (Source Index) : SI được dùng để chứa (xác định) địa chỉ offset hoặc một phần của địa chỉ offset khi truy nhập đoạn dữ liệu SI thường được dùng để chứa địa chỉ offset của xâu ký tự trong đoạn dữ liệu (DS : SI) khi thực hiện lệnh thao tác xâu
- DI (Destination Index) : DI được dùng để chứa (xác định) địa chỉ offset hoặc một phần của địa chỉ offset khi truy nhập đoạn dữ liệu DI thường được dùng để chứa địa chỉ offset của xâu ký tự trong đoạn mở rộng (ES: DI khi thực hiện lệnh thao tác xâu)
- SP (Stack Pointer) : Con trỏ ngắn xếp SP chứa địa chỉ offset của ô nhớ trong đoạn ngăn xếp SP luôn trỏ đến đỉnh ngăn xếp
Nhóm thanh ghi đoạn CS, DS, SS, ES : Là các thanh ghi 16bit, trong quản lý bộ nhớ theo cơ
chế phân đoạn thì
Trang 26CS : Chứa địa chỉ đoạn của đoạn mã lệnh
DS : Chứa địa chỉ đoạn của đoạn dữ liệu
ES : Chứa địa chỉ đoạn của đoạn mở rộng
SS : Chứa địa chỉ đoạn của đoạn ngăn xếp
Các thanh ghi điều khiển và trạng thái :
- Con trỏ lệnh IP (In struction Pointer): là thanh ghi 16 bit IP chứa địa chỉ offset của ô
nhớ trong đoạn mã lệnh Khi nhập lệnh thì IP tự động tăng dần và khi CPU nhập xong một lệnh thì IP trỏ đến ô nhớ chứa lệnh tiếp theo trong đoạn mã lệnh Nội dung IP bị thay đổi bất thường khi CPU thực lệnh nhảy, lệnh gọi chương trình con hoặc bởi các cơ chế ngắt cứng và mềm
- Thanh ghi cờ FLAGS : là thanh ghi 16 bit chứa các bít thông tin phản ánh trạng thái
của kết quả phép tính
Một số bit cờ như IF, TF, IOPL ảnh hưởng đến hoạt động của CPU
Không thể tác động trực tiếp vào toàn bộ thanh ghi cờ mà chỉ có thể tác động vào một
số bit cờ qua các lệnh CLC, STC, CLI, STI, CLD, STD
- CF (Carry Flag) : cờ nhớ ; Nếu có hiện tượng nhớ từ bit cao nhất khi thực hiện phép tính thì
CF = 1 Các lệnh CLC, STC và các lệnh dịch bit, quay vòng ảnh hưởng tới cờ này
- PF (Parity Flag) : cờ kiểm tra chẵn lẻ ; Nếu lượng các bit 1 trong kết quả chẵn thì PF=1
- AF(Auxiliary Flags) : cờ nhớ phụ Cờ AF được sử dụng trong các phép tính số học với các
số BCD (Binary Cođe Decimal) Nếu có nhớ hay có mượn đối với 4 bit thấp thì AF= 1
- ZF (Zero Flag) : cờ zero Nếu kết quả phép tính bằng không thì ZF = 1
- SF (Sign Flag): cờ dấu ; Nếu kết qủa âm (bít cao nhất của kết quả có giá trị 1) thì SF =1
- TF (Trap Flag) : cờ bẫy ; Nếu TF = 1, CPU được đặt ở chế độ chạy từng lệnh phục vụ hiệu chỉnh chương trình (debug) Trong chế độ này mỗi lệnh khi được thực hiện xong sẽ gây ra một ngắt logic (ngắt 01H) kích hoạt chương trình hiệu chỉnh
- IF (Interrupt Flag) : cờ ngắt ; Nếu IF = 1, cho phép CPU phản ứng với tín hiệu báo ngắt INT Dùng lệnh CLI hoặc ST1 tác động được vào cờ này
- DF (Direction Flag): cờ hướng ; DF xác định hướng tăng hoặc giảm của các thanh ghi
SI DI khi thực hiện các lệnh thao tác xâu ký tự
Nếu DF = 1 thì SI và DI giảm
Nếu DF = 0 thì SI và DI tăng
Dùng lệnh STD và CLD tác động được vào bít cờ này
- OF (Overflow Flag) : cờ tràn ; OF được dùng trong các phép tính số học dấu chấm động OF
= 1 nếu kết quả quá lớn hoặc quá nhỏ, vượt quá khả năng biểu diễn của máy tính (bị tràn)
- Hai cờ NT và IOPL (I/O Privilege Level) chỉ được dùng trong chế độ bảo vệ
Thanh ghi trạng thái máy (MSW) :
Trang 27- PE (Protected Mode Enable) cho phép chế độ bảo vệ Nếu PE = 1 : cho phép CPU làm việc ở chế độ bảo vệ Khi khởi động máy tính thì PE = 0
- MP (Monitor CoProcessor): MP được dùng để đồng bộ hoạt động của CPU và bộ đồng xử lý
- EM (Emulation) : EM = 0 cho phép thực hiện các mã lệnh dấu phảy động trên bộ đồng xử lý
EM = 1 khi CPU gặp mã lệnh lệnh dấu phẩy động sẽ sinh ra ngoại tệ kích hoạt chương trình thực hiện phép tính dấu chấm động (chương trình mô phỏng bộ đồng xử lý)
- TS (Task Switch) dùng ở chế độ đa nhiệm Lệnh LMSW tác động được vào thanh ghi này
CPU 80286 còn có các thanh ghi khác như sau : (Hoạt động trong chế độ bảo vệ)
- Thanh ghi nhiệm vụ TR (Task Register)
- Thanh ghi bảng mô tả cục bộ LDT (Local Descriptor Table)
- Thanh ghi bảng mô tả ngắt IDT (Interrupt Descriptor Table)
- Thanh ghi bảng bộ mô tả toàn cục GDT (Global Descriptor Table)
- Thanh ghi từ trạng thái máy MSW (Machine Status Word)
1.4.5 Quản lý bộ nhớ trong chế độ bảo vệ
Chế độ bảo vệ (Protected Mode) được thiết kế cho CPU dòng Intel từ 80286 cho đến các CPU 32 bít sau này Chế độ bảo vệ được thiết kế để hỗ trợ hệ điều hành đa nhiệm, cách
ly và bảo vệ hệ điều hành khỏi những truy nhập trái phép của các chương trình ứng dụng, cách
ly và bảo vệ chương trình ứng dụng này khỏi sự truy nhập trái phép của chương trình ứng dụng khác
1.4.5.1- Các mức đặc quyền và luật về quyền truy nhập
Trong chế độ bảo vệ thì mỗi đoạn nhớ được gần một mức đặc quyền và được bảo vệ nhờ cơ chế về quyền truy nhập Các mức đặc quyền được thiết kế để hỗ trợ hoạt động của hệ điều hành
đa nhiệm nhằm:
+ Cách ly và bảo vệ hệ điều hành khỏi các truy nhập trái phép của chương trình ứng dụng + Cách ly và bảo vệ chương trình ứng dụng này khỏi sự truy nhập trái phép của chương trình ứng dụng khác
Dựa vào mức đặc quyền và luật về quyền truy nhập mà CPU sẽ quyết định cho phép hay không cho phép truy nhập đoạn nhớ yêu cầu
Các mức đặc quyền (ký hiệu là PL - Privilêg Level) nằm trong một hệ thống các mức đặc quyền 4 cấp
+ Đặc quyền mức PL = 0, mức đặc quyền cao nhất Mức đặc quyền PL = 0 được gắn cho các chương trrình quản lý thiết bị và quản lý bộ nhớ
+ Đặc quyền mức PL = 1 Mức đặc quyền PL = 1 được gắn cho các chương trình thiết lập mức ưu tiên giữa các nhiệm vụ, chương trình hoàn đổi dữ liệu giữa bộ nhớ chính và bộ nhớ thứ cấp (đĩa từ, chương trình quản lý các cổng vào/ra và các dịch vụ hệ thống khác
+ Đặc quyền mức PL = 2 Mức đặc quyền PL = 2 được gắn cho các chương trình quản
lý tệp, thư mục và các chức năng mở rộng của hệ điều hành
Trang 28+ Đặc quyền mức PL = 3 mức thấp nhất mức đặc quyền PL = 3 được gán cho các chương trình ứng dụng
Các luật về quyền truy nhập: luật về quyền truy nhập xác định quy tắc truy nhập đoạn nhớ Luật 1:
Dữ liệu được lưu trữ trong đoạn nhớ coa mức đặc quyền PL = P chỉ có thể bị truy nhập bởi mã lệnh có mức đặc quyền bằng hoặc cao hơn P (CPL <= DPL, CPL là mức đặc quyền của nhiệm
vụ đang thực hiện, DPL là mức đặc quyền của đoạn dữ liệu bị truy nhập)
Luật 2:
Đoạn mã lệnh có mức đặc quyền PL = P có thể bị gọi hoặc truy nhập bởi nhiệm vụ có mức đặc quyền bắc hoặc thấp hơn P đoạn mã lệnh có mức đặc quyền thấp có thể gọi hoặc truy nhập đoạn mã lệnh có mức đặc quyền cao hơn thông qua cổng gọi
Theo các luật về quyền truy nhập thì chưong trình dang thực hiện có thể truy nhập tự do vào các đoạn mã lệnh và đoạn dữ liệu có cùng mức đặc quyền
Một chương trình có thể truy nhập vào một đoạn dữ liệu có mức đặc quyền thấp hơn, nhưng nếu truy nhập hoặc gọi đoạn mã lệnh có mức đặc quyền cao hơn thì phải thông qua cổng gọi
1.4.5.2 Quản lý bộ nhớ theo phân đoạn trong chế độ bảo vệ
Các đoạn nhớ trong chế độ bảo vệ được quản lý theo ba thông số:
- Bảng bộ mô tả toàn cục GDT (bảng GDT - Global Descriptor Table)
Bảng GDT quản lý các đoạn (các vùng nhớ) chứa các chương trình của hệ điều hành và dữ liệu của hệ thống (các vùng nhớ chứa các thông tin có tính chất toàn cục, thuộc không gian nhớ toàn cục) Các chương trình ứng dụng có thể truy nhập vùng nhớ này
+ Bảng bộ mô tả cục bộ LDT (bảng LDT - Local Desriptor Table) Mỗi bảng LDT quản lý các vùng nhớ thuộc một nhiệm vụ (các vùng nhớ chứa các thông tin có tính chất cục bộ, thuộc không gian nhớ cục bộ) Mã lệnh và dữ liệu của một nhiệm vụ đang chạy sẽ được bảo vệ trước
sự truy nhập trái thép của các nhiệm vụ khác Các bảng LDT thuộc không gian nhớ toàn cục + Bảng bộ mô tả ngắt (bảng IDT - Interrupt Descriptor Table) Bảng IDT chứa các bộ mô tả trỏ đến 256 chương trình phục vụ ngắt Bảng IDT đóng vai trò bảng vectơ ngắt, trong đó mỗi véc
Trang 29đoạn trong Bảng bộ mô tả Người lập trình phải nạp Bộ chọn đoạn vào thanh ghi đoạn tương ứng khi muốn truy nhập một đoạn nào đó
Bộ mô tả đoạn được hệ điều hành, trình biên dịch hoặc trình nạp bộ nhớ tạo ra
Bộ mô tả đoạn gồm 8 byte:
Trang 30Trường địa chỉ nền đoạn (24 bít : A23 - A0) xác định địa chỉ nền của đoạn ở hệ 16 bít thì địa chỉ này cũng là địa chỉ vật lý nền của đoạn Trường giới hạn đoạn (16 bit : L15 - L0) xác định kích thước của đoạn từ 1 byte đến 64Kb)
Trường quyền truy nhập (8 bit) xác định mức đặc quyền và các thuộc tính khác của đoạn:
P - (Present) : Nếu P = 1 đoạn đang tồn tại trong bộ nhớ
Nếu P = 0 CPU sẽ tạo ra ngoại tệ "không tồn tại đoạn" khi người yêu cầu chọn đoạn này DPL - Descriptor Privilege Level): xác định mức đặc quyền của bộ mô tả (mức đặc quyề của đoạn)
DT - Descriptor Type) : xác định loại bộ mô tả
DT = 1 Bộ mô tả đoạn mã lệnh hoặc dữ liệu
DT = 0 Bộ mô tả đoạn hệ thống hoặc cổng giao dịch
Kiểu bộ mô tả: cấu trúc của trường này phụ thuộc vào loại bộ mô tả Có các loại bộ mô tả sau: Bộ mô tả đoạn dữ liệu Bộ mô tả đoạn mã lệnh, Bộ mô tả đoạn hệ thống Bộ mô tả đoạn hệ (DT = 0) có hai loại: bộ mô tả LDT, bộ mô tả TSS Bộ mô tả cổng giao dịch (DT = 0) (còn gọi là cổng giao dịch) được dùng để truy nhập vào các đoạn mã lệnh Các bộ mô tả này sẽ được trình bày ở các phần sau
- Cấu trúc của byte quyền truy nhập trong Bộ mô tả đoạn dữ liệu:
ED (Expansion Direction): xác định hướng truy nhập đoạn (hướng tiến triển của địa chỉ)
ED = 1 : hướng địa chỉ giảm, đoạn dữ liệu là loại ngăn xếp
ED = 0 : hướng địa chỉ tăng
W/R (Wrie/Read): xác định quyền ghi/đọc
W/R = 1 : cho ghi/đọc đoạn, dữ liệu
W/R = 0 cấm ghi đoạn dữ liệu
A (Accessed):
A = 1 đoạn đã bị truy nhập
- Cấu trúc của byte quyền truy nhập trong Bộ mô tả đoạn mã lệnh:
C (Conforming) :
C = 0 chương trình con sẽ thực hiện với mức đặc quyền PL = DPL
C = 1 chương trình sẽ thực hiện với mức đặc quyền PL bằng mức đặc quyền của đoạn chứa chương trình gọi chương trình con này
R (Read):
R = 0 : Đoạn mã lệnh thực hiện được
R = 1 : Đoạn mã lệnh thực hiện được và đọc được
Trang 31A (Accessed): A = 1 đoạn mã lệnh đã bị truy nhập
- Cấu trúc của byte quyền truy nhập trong Bộ mô tả đoạn hệ thống:
Bộ mô tả đoạn hệ thống (Bộ mô tả TSS, Bộ mô tả LDT) quy chiếu đến (trỏ đến) các đoạn chứa thông tin hệ thống
Kiểu đoạn:
- Kiểu = 1: Bộ mô tả quy chiếu đến đoạn trạng thái nhiệm vụ TSS, nhiệm vụ này không ở trạng thái đang thực hiện
- Kiểu = 2 : Bộ mô tả quy chiếu đến đoạn chứa bảng LDT
- Kiểu = 3: Bộ mô tả quy chiếu đến đoạn trạng thái nhiệm v ụ TSS của nhiệm vụ đang thực hiện
+ Hai byte dự phòng cho hệ 32 bit có dạng:
Đối với hệ 16 bít thì hai byte này phải có giá trị là 0000H
c) Bộ mô tả cổng giao dịch (cổng giao dịch): Bộ mô tả cổng giao dịch (cổng giao dịch) được dùng để truy nhập vào các đoạn mã lệnh Cổng giao dịch cung cấp phương tiện chuyển giao điều khiển giữa chương trình nguồn và chương trình dịch, ví dụ qua các lệnh CALL Có thể truy nhập vào các đoạn có mức đặc quyền cao hơn thông qua một cổng giao dịch là cổng gọi
Cổng giao dịch có cấu trúc như sau:
Bộ đếm (WC - word count): xác định số từ cần sao chép từ ngăn xếp của chương trình gọi sang chương trình được gọi Thông số WC chỉ có ở cổng giao dịch kiểu gọi (cổng gọi)
Cấu trúc của byte quyền truy nhập trong Bộ mô tả cổng giao dịch (cổng giao dịch):
Trang 32Kiểu cổng giao dịch: có 4 loại cổng giao dịch
Kiểu = 4 : cổng giao dịch kiểu gọi (cổng gọi)
Kiểu = 5 : cổng giao dịch kiểu nhiệm vụ (cổng nhiệm vụ)
Kiểu = 6 : cổng giao dịch kiểu ngắt (cổng ngắt)
Kiểu = 7 : cổng giao dịch kiểu bẫy (cổng bẫy)
Bộ mô tả cổng giao dịch kiểu gọi (cổng gọi) thường được dùng để chương trình nguồn có mức đặc quyền thấp hơn gọi chương trình đích có mức đặc quyền cao hơn
Bộ mô tả cổng giao dịch kiểu nhiệm vụ (cổng nhiệm vụ) được sử dụng khi có sự thay đổi nhiệm
vụ trong nhiệm vụ hiện hành Bộ mô tả cổng giao dịch kiểu nhiệm vụ quy chiếu đến Bộ mô tả đoạn TSS
Bộ mô tả cổng giao dịch kiểu ngắt và kiểu bẫy (cổng ngắt và cổng bẫy) cung cấp bộ chọn và địa chỉ offset xác định vị trí của chương trình con phục vụ ngắt bên trong đoạn mã lệnh đó d) Lược đồ truy nhập đoạn nhớ nhờ Bộ chọn đoạn và Bộ mô tả đoạn :
Trong chế độ bảo vệ do bộ chọn đoạn cho khả năng trỏ tới được 213 Bộ mô tả đoạn và mỗi Bộ
mô tả của CPU 80286 trỏ đến một đoạn có kích thước cực đại 216 byte nên CPU 80286 có thể quản lý được bộ nhớ kích thước
2*213*216 = 230 = 1 Gbyte
e) Cơ chế truy nhập bộ nhớ (ô nhớ) qua bảng GDT
Trang 33Bảng GDT được hệ điều hành tạo ra khi khởi động hệ thống CPU quản lý bảng GDT qua thanh ghi GDTR Thanh ghi GDTR chứa hai thông tin về bảng GDT: Địa chỉ nền bảng và kích thước (giới hạn) bảng Khi có yêu cầu truy nhập đoạn, người yêu cầu cung cấp Bộ chọn đoạn, CPU thực hiện thao tác kiểm tra quyền truy nhập đoạn trước khi cho truy nhập Đối với việc truy nhập đoạn dữ liệu, quá trình kiểm tra được tiến hành theo quy tắc:
EPL = max (CPL, RPL) Ê DPL
trong đó:
+ CPL là mức đặc quyền của nhiệm vụ đang thực hiện Thông thường CPL có giá trị bằng mức đặc quyền của đoạn chứa mã lệnh đang chạy Bộ xử lý trung
tâm có thể thay đổi giá trị của CPL khi điều khiển chương trình chuyển đến một
đoạn mã có sức đặc quyền cao hơn
+ RPL là mức đặc quyền yêu cầu và là mức đặc quyền của bộ chọn Mức đặc quyền RPL được sinh ra bởi người nạp bộ chọn đoạn
+ EPL là mức đặc quyền hiệu dụng
+ DPL là mức đặc quyền của đoạn bị truy nhập
Nếu điều kiện trên không được thoả mãn thì sẽ sinh ra một ngoại lệ và CPU không cho truy nhập đoạn Nếu điều kiện về quyền truy nhập được thoả mãn thì CPU cho truy nhập đoạn Việc truy nhập từng ô nhớ trong đoạn được thực hiện không qua địa chỉ nền đoạn (có được từ Bộ mô tả đoạn vừa được chọn) và địa chỉ offset của ô nhớ đó
Đối với việc truy nhập đoạn mã lệnh, quá trình kiểm tra được tiến hành theo quy tắc: EPL = max (CPL, RPL) ³ DPL
trong đó việc truy nhập một đoạn mã lệnh có mức đặc quyền cao hơn (EPL >
DPL) phải thực hiện thông qua cổng gọi
f) Cơ chế truy nhập bộ nhớ (ô nhớ) qua bảng LDT
Bảng LDT được hệ điều hành tạo ra khi nạp một chương trình ứng dụng vào bộ nhớ hoặc khi thực hiện một nhiệm vụ Mỗi bảng LDT quản lý các đoạn của một chương trình ứng dụng (một nhiệm vụ) Việc quản lý các đoạn (các vùng nhớ) thuộc một chương trình ứng dụng (một nhiệm vụ) được tổ chức như sau :
Trang 34Mỗi một đoạn nhớ được quản lý bởi một Bộ mô tả đoạn
Các Bộ mô tả đoạn của một nhiệm vụ được chứa trong một bảng LDT riêng biệt Nói cách khác, mỗi bảng LDT quản lý các đoạn nhớ của một nhiệm vụ Mỗi bảng LDT được quản lý bởi một Bộ mô tả LDT Bộ mô tả LDT chứa địa chỉ nền bảng LDT, kích thước bảng, quyền truy nhập bảng (quyền truy nhập nhiệm vụ)
Các Bộ mô tả LDT của các nhiệm vụ được chứa trong bảng GDT, Bảng GDT được quản lý bởi thanh ghi hệ thống GDTR
Khi một nhiệm vụ được thực hiện, hệ điều hành sẽ nạp Bộ chọn LDT vào thanh ghi hệ thống LDTR Thanh ghi LDTR trỏ đến Bộ mô tả LDT vào thanh ghi hệ thống LDTR Thanh ghi LDTR trỏ đến Bộ mô tả LDT trong bảng GDT, từ đây CPU thông qua bảng LDT quản lý được các đoạn của nhiệm vụ đó và bắt đầu (hoặc tiếp tục) thực hiện nhiệm vụ này Để truy nhập các đoạn trong nhiệm vụ, người yêu cầu cần nạp Bộ chọn đoạn vào thanh ghi đoạn tương ứng CPU thực hiện thao tác kiểm tra quyền truy nhập đoạn Nếu điều kiện về quyền truy nhập được thoả mãn thì CPU sẽ sinh ra một ngoại lệ và không cho truy nhập đoạn Việc truy nhập từng ô nhớ trong đoạn được thực hiện thông qua địa chỉ nền đoạn (có được từ Bộ mô tả đoạn vừa được chọn) và địa chỉ offset của ô nhớ đó
g) Cơ chế chuyển điều khiển và gọi chương trình con trong chế độ bảo vệ
Việc chuyển điều khiển xẩy ra khi thực hiện các lệnh nhảy (lệnh JMP) hoặc lệnh gọi chương trình con (lệnh CALL)
Trường hợp thực hiện lệnh nhảy hoặc lệnh gọi trong cùng đoạn mã lệnh của nhiệm vụ đang chạy (lệnh nhảy gắn, lệnh gọi gắn) xẩy ra như sau:
Trang 35Khi thực hiện lệnh nhảy gần (NEAR JUMP), con trỏ lệnh IP được nạp giá trị mới Chương trình tiếp tục được thực hiện từ vị trí mới do IP trỏ đến
Khi thực hiện lệnh gọi gần (NEAR, CALL), bộ xử lý trung tâm thực hiện các thao tác sau: + Cất giá trị hiện thời của IP vào ngăn tiếp
+ Nạp địa chỉ offset của chương trình con được gọi (đich) vào IP
+ Thực hiện chương trình con (đích)
Trường hợp chuyển điều khiển đến những đoạn mã lệnh khác khi thực hiện lệnh gọi xa (FAR CALL) thì có hai tình huống:
- Đoạn mã lệnh đích có mức đặc quyền thấp hơn hoặc bằng mức đặc quyền của đoạn mã lệnh nguồn hiện tại Khi đó bộ xử lý trung tâm thực hiện các thao tác sau:
+ Cất giá trị hiện thời của CS và IP vào ngăn xếp
+ Nạp bộ chọn đoạn mã lệnh chứa chương trình con (đích) vào CS
+ Nạp địa chỉ offset của chương trình con (đích vào IP
+ Thực hiện chương trình đích
Lệnh RET cho phép rời khỏi chương trình con để trở về chương trình gọi nó Lệnh này khôi phục lại nội dung bộ chọn đoạn mã lệnh nguồn (nội dung thanh ghi CS), nọi dung con trỏ lệnh (nội dung thanh ghi IP) và tiếp tục thực hiện chương trình đã gọi chương trình con này
- Đoạn mã lệnh chương trình con (đích) có mức đặc quyền cao hơn mức đặc quyền của đoạn
mã lệnh nguồn hiện tại Khi đó việc gọi chương trình con (đích) phải thực hiện qua cổng gọi
Bộ chọn đoạn lúc này không trỏ đến bộ mô tả đoạn mã lệnh chứa chương trình con (đích), mà trỏ đến cổng gọi (bộ mô tả cổng gọi) Cổng gọi trỏ đến bộ mô tả đoạn mã lệnh của chương trình con (đích), cổng gọi cũng chứa địa chỉ offset bắt đầu chương trình con (đích), qua đó gọi được chương trình con (đích Bộ xử lý trung tâm thực hiện quá trình này như sau:
+ Tạm lưu giữ nội dung CS, IP, SS, SP hiện thời (thuộc chương trình nguồn)
+ Nạp bộ chọn cổng gọi và kiểm tra quyền truy nhập
+ Cất giữ giá trị tạm lưu của SS và SP nguồn vào ngăn xếp đích
+ Chuyển các tham số từ ngăn xếp nguồn sang ngăn xếp đích
+ Cất giữ giá trị tạm lưu của CS và IP nguồn vào ngăn xếp đích
+ Nạp bộ chọn bộ mô tả đoạn mã lệnh đích và địa chỉ offset (lấy từ cổng gọi), qua đónạp
bộ mô tả đoạn mã lệnh đích
+ Thực hiện chương trình con (đích)
Khi bộ xử lý trung tâm gặp lệnh RET thì việc trở về chương trình nguồn
được thực hiện bắt đầu bằng việc kiểm tra quyền truy nhập, sau đó là khôi phục
nội dung các thanh ghi CS, IP, SS, SP theo một trình tự ngược lại
1.4.6 Cơ chế đa nhiệm
Nhiệm vụ được định nghĩa như là một thực hiện của chương trình nào đó Mỗi một nhiệm vụ
có một đoạn trạng thái nhiệm vụ (đoạn TSS - Task State Segment) chứa toàn bộ trạng thái của nhiệm vụ đó Mỗi đoạn TSS được quản lý (trỏ) bởi một Bộ mô tả TSS nằm trong bảng GDT CPU x86 có phần cứng hỗ trợ thao thác chuyển nhiệm vụ Thao tác chuyển nhiệm vụ thực hiện lưu và bảo vệ toàn bộ trạng thái hoạt động của nhiệm vụ đang thực hiện (bao gồm
Trang 36nội dung toàn bộ các thanh ghi của CPU, không gian địa chỉ có liên quan và Bộ chọn LDT của nhiệm vụ đang chạy) vào đoạn TSS, sau đó nạp trạng thái của nhiệm vụ tiếp theo từ đoạn TSS tương ứng vào
CPU, kiểm tra quyền truy nhập và bắt đầu thực hiện nhiệm vụ mới
Thanh ghi nhiệm vụ TR (Task Register) trỏ đến Bộ mô tả TSS quản lý nhiệm vụ hiện thời
Thao tác chuyển nhiệm vụ được tiến hành theo các bước sau :
+ Lưu toàn bộ trạng thái hoạt động của nhiệm vụ đang thực hiện (bao gồm nội dung toàn bộ các thanh ghi của CPU, các địa chỉ có liên quan và Bộ chọn LDT của nhiệm vụ hiện thời) vào đoạn trạng thái nhiệm vụ TSS của nhiệm vụ này
+ Nạp Bộ chọn nhiệm vụ tiếp theo vào thanh ghi TR Thanh ghi TR trỏ đến Bộ mô tả TSS quản lý đoạn TSS của nhiệm vụ tiếp theo
+ Qua Bộ mô tả TSS truy nhập đoạn TSS của nhiệm vụ tiếp theo, nạp trạng thái nhiệm vụ tiếp theo vào các thanh ghi của CPU, trong đó có thanh ghi LDTR Bộ mô tả TSS được nạp vào phần kín của TR
+ Thực hiện kiểm tra quyền truy nhập
+ Thực hiện nhiệm vụ tiếp theo
1.4.7 Các chế độ xác định địa chỉ toán hạng
CPU thực hiện chương trình bằng cách thực hiện tuần tự các lệnh trong bộ nhớ chính
1.4.7.1 Cấu trúc lệnh
Cấu trúc của một lệnh có thể có các dạng sau:
- Mã lệnh: là phần chứa thông tin xác định các thao tác hoặc công việc cần được thực hiện
CPU x86 thực hiện một tập các nhóm lệnh:
- Nhóm lệnh số học: ADD, SUB, MUL, DIV,
Trang 37- Nhóm lệnh chuyển số liệu: MOV, PUSH, POP
- Nhóm lệnh rẽ nhánh và điều khiển: JMP, CALL, RET, INT, LOOP, CLI, STI,
- Nhóm lệnh vào ra: IN, OUT
- Các lệnh khác: logic, thao tác bít, xử lý xâu
- Phần địa chỉ: là phần thông tin xác định nơi chứa toán hạng
Các nơi có thể chứa toán hạng:
+ Tức thời trong lệnh (giá trị toán hạng nằm ngay trong lệnh)
+ Các thanh ghi của CPU
+ Bộ nhớ
1.4.7.2 Các phương pháp xác định địa chỉ toán hạng
Các phương pháp xác định địa chỉ toán hạng (Các phương pháp định vị toán hạng) cho phép xác định nơi chứa toán hạng Nơi chứa toán hạng có thể là: Trên lệnh, thanh ghi và bộ nhớ Bộ nhớ mặc định được hiểu là đoạn dữ liệu, xác định địa chỉ ô nhớ là xác định địa chỉ offset hiệu dụng của ô nhớ trong đoạn đó Trong các trường hợp khác cần chỉ rõ đoạn nhớ cần truy nhập, ví dụ ES: [địa chỉ offset]
Có ba nhóm chế độ định vị toàn hạng
+ Định vị tức thời
+ Định vị thanh ghi
+ Định vị bộ nhớ
Các thao tác có thể xẩy ra giữa các đối tượng sau:
Thanh ghi Tức thời
Thanh ghi Thanh ghi
Bộ nhớ Tức thời
Bộ nhớ Thanh ghi
- Định vị tức thời: Dữ liệu nằm ngay trong câu lệnh
Ví dụ: MOV AX 0F000h: đưa giá trị F000h vào AX
- Định vị thanh ghi : Các thanh ghi đa năng, các thanh ghi địa chỉ hoặc các thanh ghi đoạn của CPU là nơi chứa dữ liệu
Ví dụ: MOV AX BX: đưa giá trị ở BX và AX
- Định vị bộ nhớ: Phương pháp định vị bộ nhớ cho phép xác định địa chỉ offset (địa chỉ lệch) của ô nhớ chứa toán hạng, ô nhớ mặc định nằm trong đoạn dữ liệu
+ Định vị trực tiếp : Địa chỉ ô nhớ chứa dữ liệu nằm ngay trong lệnh
Địa chỉ offset = [giá trị cụ thể]
Trang 38Ví dụ: MOV AX, [1000h]: Đưa nội dung ô nhớ có địa chỉ
DS: 1000h vào AX
MOV AX ALFA: ALFA là tên tiến đã được khai báo
+ Định vị gián tiếp (thanh ghi)
Các thanh ghi địa chỉ BX, BP, SI, DI, SP là nơi chứa địa chỉ ô dữ liệu
Trang 39+ Định vị chỉ số :
Ví dụ: MOV AX, [SI + 1000h] ;
Trong đó [SI] = 10h lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1010h vào AX
Điều khác biệt giữa phương pháp định vị chỉ số so với phương pháp định vị cơ sở bắt đầu
từ hệ 32 bit là có thể viết (SI*bội số) (DI*bội số) Bội số là 1, 2, 4, 8
S ự khác nhau giữa định vị chỉ số và định vị cơ sở ?
Ví d ụ : 1 chuỗi dữ liệu được chứa trong các ô nhớ có địa chỉ A, A+1, A+2 Muốn chuyển
chu ỗi này tới vị trí B, B+1, B+2
Ph ương án đưa ra là : Mov B,A
Mov B+1, A+1 Mov B+2,A+2
Th ực hiện bằng phương pháp định vị gián tiếp : Dùng 2 thanh ghi sau mỗi lần thực
hi ện lệnh 2 thanh ghi lại tăng lên 1
M ột giải pháp khác đưa ra là sử dụng 1 thanh ghi chỉ số Khi này địa chỉ ô nhớ sẽ gồm 2
ph ần : Nội dung thanh ghi chỉ số và một hằng số (bằng tổng thanh ghi chỉ số cộng với hằng số)
V ới cách này chỉ cần dùng một thanh ghi cho vòng lặp sao chép bằng cách khởi động cho thanh
ghi ch ỉ số bằng 0 (SI=0) rồi tăng dần nội dung thanh ghi này lên 1 lượng bằng kích thước của
kh ối dữ liệu cần sao chép
- Định vị cơ sở chỉ số :
Ví dụ: MOV AX, [BX + SI] ;
Trang 40trong đó [BX] =1000h, [SI] =10h Lệnh thực hiện đưa nội dung ô nhớ có địa chỉ DS:1010h vào AX
Phương pháp định vị cơ sở chỉ số thường được dùng trong các thao tác với mảng dữ liệu hoặc với các cấu trúc dữ liệu tương đương
- Định vị đầy đủ :
Địa chỉ offset= [Thanh ghi cơ sở + Thanh ghi chỉ số + khoảng dịch]
Phương pháp định vị này thường được dùng trong các thao tác với mảng dữ liệu hai chiều hoặc với các cấu trúc dữ liệu phức tạp
1.5 Kỹ thuật đường ống và kỹ thuật xử lý song song mức lệnh
Đặt vấn đề
Việc thi hành một lệnh mã máy thường được chia thành 5 giai đoạn:
1. Nhập lệnh (FI Fetch the Instruction)
2 Giải mã lệnh (DI Decode the Instruction)
3 Tạo địa chỉ toán hạng (GOA Generate Operand Address)
4 Nhập toán hạng (FO Fetch Operands)
5 Thực hiện lệnh (EI Execute Instruction)
Với kỹ thuật xử lý lệnh thông thường, đơn vị xử lý trung tâm phải tuần tự thực hiện xong tất cả các giai đoạn thực hiện một lệnh, thường là sau 5 chu kỳ máy, rồi mới chuyển sang nhập và thực hiện lệnh tiếp theo Để tăng tốc độ xử lý lệnh mà không nhất thiết phải tăng