Tải bản đầy đủ (.docx) (53 trang)

Kiến Trúc Máy Tính PHÂN TÍCH KIẾN TRÚC VÀ NGUYÊN LÝ LÀM VIỆC CỦA BỘ VI XỬ LÝ 64 BIT CỦA INTEL

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

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
_________________________________________________

BÀI TẬP LỚN MƠN HỌC

KIẾN TRÚC MÁY TÍNH
ĐỀ TÀI: PHÂN TÍCH KIẾN TRÚC VÀ NGUYÊN LÝ LÀM VIỆC
CỦA BỘ VI XỬ LÝ 64 BIT CỦA INTEL
- - - - - - - - - - - - - - - - - - - -

Giáo viên : Ths Nguyễn Tuấn Tú
Nhóm số :
Lớp :

Hà Nội, 2019


TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

_________________________________________________

BÀI TIỂU ḶN MƠN HỌC

KIẾN TRÚC MÁY TÍNH
ĐỀ TÀI: PHÂN TÍCH KIẾN TRÚC VÀ NGUYÊN LÝ LÀM VIỆC CỦA
VI XỬ LÝ 64 BIT CỦA INTEL
- - - - - - - - - - - - - - - - - - - Giáo viên : Ths Nguyễn Tuấn Tú
Sinh viên thực hiện:
1.


2.
3.
4.

A
B
C
D

Lớp : ĐH yh – Kxx

Hà Nội, 2019

1

BỘ


Mục Lục
LỜI NÓI ĐẦU............................................................................................................4
Chương 1: TỔNG QUAN VỀ BỘ VXL CỦA INTEL.................................................5
1.1. Khái niệm......................................................................................................5
Hình 1.1: Cấu trúc CPU...........................................................................................5

1.2. Lịch sử ra đời của bộ VXL............................................................................6
Hình 1.2: Ảnh một vi xử lý........................................................................................6

1.3. Cấu trúc phần cứng của bộ VXL...................................................................9
Hình 1.3: Cấu trúc phần cứng của một vi xử lý......................................................10
1.3.1.


Đơn vị xử lý trung tâm CPU.....................................................................................11
Hình 1. 4: Đơn vị xử lý trung tâm CPU..................................................................11

1.3.2.

Bộ nhớ......................................................................................................................12

1.3.3.

Cổng vào/ra song song............................................................................................12

1.3.4.

Cổng vào/ra nối tiếp................................................................................................12

1.3.5.

Bộ đếm/Bộ định thời.................................................................................................13

1.4. Nguyên lý hoạt động của bộ VXL................................................................14
1.5. Lập trình cho một VXL................................................................................19
Chương 2: BỘ VI XỬ LÝ 64 BIT CỦA INTEL VÀ CÁC THẾ HỆ VXL..................22
2.1. Tổng quan về bộ vi xử lý 64 bit của Intel....................................................22
Hình 2.1: Vi xử lý của Intel.....................................................................................22

2.2.
2.3.
2.4.
2.5.


Kiến trúc bộ vi xử lý 64 bit..........................................................................24
64 Bit dữ liệu mơ hình.................................................................................26
64 Bit điều hành hệ thống thời gian............................................................28
Kiến trúc Itanium (Merced) : 2001.............................................................30
Hình 2.2: Bộ vi xử lý Itanium..................................................................................30

2.6.
2.7.
2.8.
2.9.

Kiến trúc Intanium 2: 2002- 2010...............................................................31
Itanium 9300 (Tkwila):2010.......................................................................33
P4 Prescott (năm 2004)...............................................................................33
Pentium D (năm 2005)................................................................................34
2


Hình 2.4: Kiến trúc Pentium D 2005......................................................................34

2.10.
2.11.

Pentium Extreme Edition (năm 2005)......................................................35
Intel Core 2 Duo.......................................................................................35
Hình 2.5: Kiến trúc Intel Core ™ Dou...................................................................35

Chương 3: NGUYÊN LÝ LÀM VIỆC CỦA BỘ VI XỬ LÝ 64 BIT CỦA INTEL......37
3.1. Sơ đồ khối....................................................................................................37

Hình 3. 1: Sơ đồ khối của bộ vi xử lý......................................................................37

3.2. Nguyên lý làm việc của bộ nhớ Cache L1...................................................37
Hình 3. 2: Bộ nhớ cache L1....................................................................................38

3.3. Cách tổ chức và nguyên lý làm việc bộ nhớ Cache L2...............................39
Hình 3. 3: Cách bản đồ hóa trực tiếp cách làm việc của cache L2........................40

3.4. Tổ chức cache nhớ L3.................................................................................42
3.5. Độ rộng Bus dữ liệu và Bus địa chỉ (Data Bus và Add Bus).......................42
Hình 3. 4: . Minh họa CPU có 12 đường truyền dữ liệu gọi là Data Bus..............43

3.6. Tốc độ sử lý và tốc độ Bus của CPU...........................................................43
Hình 3. 5: Minh họa về tốc độ xử lý (speed CPU) và tốc độ Bus (FBS) của CPU. 43

3.7. Nguyên lý làm việc của các thanh ghi.........................................................44
3.8. Khối xử lý trung tâm ALU...........................................................................45
Hình 3. 6: Bộ tính toan ALU...................................................................................46

3.9. Quy trình xử lý thơng tin.............................................................................46
Hình 3. 7: Quy trình xử lý thơng tin........................................................................47

3.10.

Con trỏ ngăn xếp SP(Stack).....................................................................47
Hình 3. 8: Con trỏ ngăn xếp SP..............................................................................48

3.11.

Khối điều khiển CU..................................................................................49

Hình 3. 9: Khối Điều khiển CU...............................................................................49

3


LỜI NĨI ĐẦU
Tập đồn Intel (Integrated Electronics) thành lập vào ngày 18/7/1968, lúc đó
là tập đồn hợp nhất về thiết bị điện tử, sản xuất ờ Santa Clara, (California, USA)
bởi nhà hoá học kiêm vật lý học Gordon E.Moore và Robert Noyce, sau khi họ đã
rời khỏi công ty Fairchild Semiconductor.
Intel sản xuất các sản phẩm như chip vi xử lý cho máy tính, ví dụ như bo
mạch chủ, ổ nhớ flash, card mạng và các thiết bị máy tính khác. Intel Corporation
là công ty sản xuất thiết bị chất bán dẫn lớn nhất thế giới, và là nhà phát minh ra
chuỗi vi mạch xử lý thế hệ x86 mà bộ xử lý tìm thấy ở các máy tính cá nhân.
Là công ty lớn trong lĩnh vực công nghệ, Intel từng nỗ lực phát triển con chip
Itanium để tiến vào lĩnh vực bộ xử lý 64 bit từ nhiều thập niên trở về trước. Chip
Itanium, CPU 64-bit đầu tiên của Intel, từng một thời được kỳ vọng thay thế vi xử
lý x86 đã chính thức suy tàn.
Để góp một phần nho nhỏ giúp mọi người hiểu sâu hơn về bộ vi xử lí 64 bit
của intel, nhóm 7 xin được trình bày sơ lược về bộ vi xử lí intel và sâu hơn là bộ bộ
VXL intel 64 bit. Tài liệu gồm 2 chương:
Chương 1: Trình bày tổng quan về bộ VXL của intel. Giúp mọi người hiểu
về khái niệm, lịch sử ra đời của bộ VXL, cấu trúc phần cứng, nguyên lý hoạt động
và lập trình cho một VXL
Chương 2: Người đọc sẽ hiểu rõ hơn về BỘ VXL 64 Bit của intel gồm tổng
quan, kiến trúc của bộ VXL 64 bit và một vài các thế hệ VXL của intel khác.
Chương 3: Nguyên lý làm việc của bộ VXL 64 Bit Intel.
Bài tập được hoàn thành nhờ sự cộng tác của các thành viên nhóm 7, sự
tham khảo tài liệu từ Internet cùng tài liệu và sự hướng dẫn của thầy Nguyễn Tuấn
Tú – Giảng viên, Thạc sĩ trường Đại học Công nghiệp Hà Nội. Bài viết này của

chúng em cịn nhiều thiếu sót mong được nhận them phản ánh và góp ý thêm từ
thầy và quý bạn đọc.
Nhóm sinh viên thực hiện!
4


Chương 1:

1.1.

TỔNG QUAN VỀ BỘ VXL CỦA INTEL

Khái niệm

CPU viết tắt của chữ Central Processing Unit (tiếng Anh), tạm dịch là đơn vị
xử lí trung tâm. CPU có thể được xem như não bộ, một trong những phần tử cốt lõi
nhất của máy vi tính. Nhiệm vụ chính của CPU là xử lý các chương trình vi tính và
dữ kiện.
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. CPU là một mạch xử lý dữ liệu theo chương trình được
thiết lập trước. Nó là một mạch tích hợp phức tạp gồm hàng triệu transistor.

Hình 1.1: Cấu trúc CPU

“Vi xử lý” là thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng các
cơng nghệ vi điện tử, cơng nghệ tích hợp và khả năng xử lý theo chương trình vào
các lĩnh vực khác nhau.
Vào những giai đoạn đầu trong quá trình phát triển của công nghệ vi xử lý,
các chip (hay các vi xử lý) được chế tạo chỉ tích hợp những phần cứng thiết yếu

như CPU cùng các mạch giao tiếp giữa CPU và các phần cứng khác. Trong giai
5


đoạn này, các phần cứng khác (kể cả bộ nhớ) thường khơng được tích hợp trên chip
mà phải ghép nối thêm bên ngoài. Các phần cứng này được gọi là các ngoại vi
(Peripherals). Về sau, nhờ sự phát triển vượt bậc của cơng nghệ tích hợp, các ngoại
vi cũng được tích hợp vào bên trong IC và người ta gọi các vi xử lý đã được tích
hợp thêm các ngoại vi là các “vi điều khiển”. Việc tích hợp thêm các ngoại vi vào
trong cùng một IC với CPU tạo ra nhiều lợi ích như làm giảm thiểu các ghép nối
bên ngoài, giảm thiểu số lượng linh kiện điện tử phụ, giảm chi phí cho thiết kế hệ
thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất và tính linh hoạt.

1.2.

Lịch sử ra đời của bộ VXL

Bộ vi xử lý là một trong những thành tựu khoa học kỹ thuật vĩ đại trong thế
kỷ XX của nhân loại. Nó được sảnxuất dựa trên cơng nghệ mạch tích hợp và thành
phần cơ bản trong bộ vi xử lý là transistor (hay bóng bán dẫn) nên lịch sử của nó
gắn liền với lịch sử ra đời của transistor và sự phát triển của cơng nghệ mạch tích
hợp.

Hình 1.2: Ảnh một vi xử lý

Vùng Santa Clara ở miền Nam vịnh San Francisco (bang Canifornia, Mỹ)
trồng rất nhiều mận, trước kia được gọi là thung lũng mận khô. Từ thâp niên 60,
những vườn mận ngày càng ít đi và SantaClata đã được đổi tên là Silicon Valley
(thung lũng Silicon). Hiện nay, transistor, mạch tích hợp, bộ vi xử lý của Silicon
Vallley đã xuất hiện trên toàn thế giới. Tập đoàn điện thoại AT & T (American

Telephone &Telegraph) đã đầu tư xây dựng một số phịng thí nghiệm tại Marray
Hill (bang NewJersey). Các phịng thí nghiệm này tập trung một đội ngũ các nhà
6


khoa học giỏi, chú trọng ngiên cứu, cải tiến những sản phẩm do tập đoàn AT & T
sản xuất.Vào ngày 23 tháng 12 năm 1947, ba nhà khoa học Wiliam Shockley, John
Pardeen,Walter Brattian đã mời giám đốc các trung tâm nghiên cứu đến để giới
thiệu mộtbộ khuếch đại rất lạ. Ba nhà khoa học này đang nghiên cứu về các chất
bán dẫn - những tinh thể có một đặc điểm vật lý rất quan trọng: chỉ cho dịng điện
lưu thơng theo một chiều duy nhất. Đây là một loại vật liệu lý tưởng để biến dòng
điện xoay chiều thành dòng điện một chiều. Từ loại vật liệu này, họ sẽ chế tạo bộ
chuyển mạch cho các tổng đài điện thoại của AT & T. Cịn bộ khuếch đại khác,
trong đó có một mẩu germanium nhỏ đựng trên ba chân bằng thép, gọi là
transistor.Transistor nhỏ hơn đèn chân không 50 lần, tiết kiệm năng lượng hơn,
không cần nhiều linh liện (do đó ít hỏng hóc) và gần như khơng nóng lên. Ba nhà
khoa học trên đã nhận được giải Nobel vật lý năm 1956.
Nhưng nhà khoa học WiliamShockley lại khơng nhìn thấy tương lai tươi
sáng nơi tập đoàn AT & T. Năm1955, Shockley đã bỏ AT & T đến thành lập phố
nhỏ Palo Alto ở miền Nam SanFranasco để thành lập Shockley Semiconductors,
chiêu tập rất nhiều nhà khoa học nổi tiếng thời ấy. Nhưng dưới quyền chỉ đạo của
Shockley, các nhà khoa học trẻ rất khó phát triển. Năm 1957, cuộc xung đột bùng
nổ: tám nhà khoa học(đứng đầu là Bob Noyce 27 tuổi - tiến sĩ khoa học thuộc viện
công nghệ Massachusetts) quyết định “ly khaí, thành lập một bộ phận nghiên cứu
chất bán dẫn trong tập đoàn Fairchild Camera and Instrument ở MountainWiew.
Theo quan điểm của họ, người chính được khâm phục chính là nhà vật lý học người
Anh Dummer. Ngay từ năm 1952, Dummer đã dự định chế tạo một mơ hình các
linh kiện điện tử, bao gồm nhiều lớp vật lý cách điện, dẫn xuất, điều chỉnh và
khuyếch đại âm thanh tốt. Cũng trong thập niên 50, một nhà nghiên cứu tên là Jack
Kilby làm việc cho Texas Instrument ở Dalas đã bỏ việc đến California.Năm 1958,

Jack Kilby giới thiệu một mẫu Silicium nhỏ mang nhiều transistor, nhưng nhà khoa
học Bob Noyce đã chế tạo một loại sản phẩm tương tự, được gọi làmạch tích hợp
(IC - Integrated Circuit). Sản phẩm này bao gồm nhiều transistor trên mặt phẳng
cực nhỏ (vài mm2), có thể lưu trữ thơng tin, thay đổi dữ liệu, thực hiện được các
phép tính đại số: đó là “con rệp”.

7


Sản phẩm mới của Bob Noyce đã làm cho thế giới điện tử bàng hoàng. Cho
đến thời gian ấy, máy tính bao gồm hàng nghìn transistor được liên kết với nhau
bằng dây điện. Như thế, muốn lắp ráp, phải cần nhiều giờ lao động hơn, mà máy
tính vẫn có thể hỏng hóc vì nhiệt và chấn động âm thanh. Trong khi đó, “con rệp”
lại khơng dùng dây điện,chi tiết transistor nhỏ lên khối lượng thiết giảm. Lúc đó,
chỉ có một trở ngại duy nhất: mạch tích hợp đầu tiên bao gồm hàng chục transistor
đắt tiền (giá hàng nghìn đơla), rất khó bán trên thị trường.
Những người cứu sống mạch tích hợp lại chính là nhà du hành vũ trụ Yuri
Gararin và tổng thống Mỹ John Kennedy.Tổng thống Mỹ là người đã tuyên bố đưa
con người lên mặt trăng. Kế hoạch thám hiểm mặt trăng bắt đầu và như thế, phải
trang bị cho tàu khơng gian những máy tính cực nhỏ, tối tân chống nhiệt và thay
đổi của khí hậu. Mạch tích hợp đãthoả mãn được những yêu cầu trên. Dù mạch tích
hợp đắt tiền nhưng cơ quan hàng khơng vũ trụ Mỹ và lầu 5 góc vẫn duyệt chi kinh
phí. Còn “con rệp” được sản xuất hàng loạt lên giá thành ngày càng hạ. Ở
Mountain Wiew, tám nhà khoa học trẻ của tập đoàn Fairchild ngày càng giàu sụ.Dù
vậy, năm 1968, hai nhà khoa học Gordon Moore và Bob Noyce quyết định
nghỉviệc, thành lập công ty Intel (IntegratedElectronics). Theo quan điểmcủa họ,
tính sáng tạo của kỹ sư điện tử phát triển rất mạnh khi họ cịn trẻ. Do đó, họ chỉ
tuyển dụng các nhà khoahọc trẻ, phần lớn dưới 30 tuổi. Người thứ 12 gia nhập Intel
tên là Marcian TedHoff, sinh tại Rochester (bang New York), tiến sĩ thuộc trường
đại học Standford. Mới 31 tuổi nhưng Hoff đã có rất nhiều bằng sáng chế.

Đến năm 1969 đã có 200 người làm việc cho Intel. Các văn phòng tại
Moutain View trở nên quá chật hẹp, nên Intel dời địa điểm nghiên cứu đến Silicon
Valley. Cùng thời gian ấy, công ty Busicomcủa Nhật Bản dự định liên kết với Intel
sản xuất mạch in của một loại máy tính mới. Bob Noyce chỉ định Hoff làm việc với
các kỹ sư Nhật.
Buổi làm việc của hai bên chỉ kéo dài một ngày. Đêm hôm ấy, Hoff đi nghỉ ở
Tahiti và suy nghĩ rằng,theo dự án của Busicom, máy tính sẽ rất đắt tiền và rất phức
tạp. Thế là vài ngày sau, Hoff đề xuất với Busicom phương pháp sản xuất máy tính
bằng cách tậphợp các mạch tích hợp có những chức năng cơ bản của máy tính. Trên
một diện tích có mỗi cạnh 0,5 cm là 2000 transistor mang nhiều chức năng: bộ
8


phần xử lýtrung tâm, mạch bộ nhớ ROM (Read Only Memory) chứa chương trình
cho sẵn để tínhtốn, một bộ nhớ RAM (Random Access Memory) - bộ nhớ có thể
đọc, xố và viết thông tin, chứa dữ liệu cho người sử dụng nạp vào để xử lý. Đây
quả là sáng kiến thiên tài: một máy điện toán trên một “con rệp” duy nhất. Chỉ cịn
thiếu màn hình và bàn phím. Sau này, Hoff đã gọi sản phẩm mới ấy là bộvi xử lý.
Hợp đồng giữa Ted Hoff và Busicom được kí kết, dành độc quyền khai thác cho
Busicom. Hai kỹ sư điện tử khác tên là Mazor và Frederico Faggin cùng tham gia
xây dựng dự án bộ vi xử ký. Vào tháng 1 năm 1971, bộ vi xử lí đầu tiên được ra
đời, mang số hiệu 4004. Tháng 11 năm 1971, tạp chí Tin tức điện tử cơng bố chính
thức sản phẩm 4004. Trong thời gian ấy, Intel mua lại bản quyền bộ vi xử lí của
Busicom.
Sau này, Ted Hoff phát biểu:”Khi làm việc về dự án bộ vi xử lí, tơi chỉ nghĩ
đến việc sáng chế một máy tính chữ chưa ý thức được sức phát triển của sản phẩm
ấy trong tương lai”. Riêng đối với Bob Noyce, ông đã nảy ra ý tưởng sẽ ứng dụng
bộ vi xử lí vào mộtvài lĩnh vực hoạt động có tính chất phổ cập dễ sinh lợi. Còn
Gordon Moore đãphát biểu trong thập niên 60 câu nói nổi tiếng sau này được gọi là
định luật Moore: “Cứ sau 18 tháng, tốc độ và sức mạnh của bộ tích hợp lại được

tăng gấp đơi”. Năm 1971, bộ vi xử lí 4004 có 2300 transistor. Năm 1993, bộ vi xử
lí Pentium của Intel có 3,1triệu transistor. Tháng 8 năm 1999, Pentium III của Intel
có 21 triệutransistor chạy ở tốc độ 600 MHz. Tháng 3 năm 2000 tốc độ của bộ vi
xử lí đạttới mức kỉ lục: 1 GHz !
Nhưng chưa dừng lại ở đó, gần đây nhất là Pentium IV “kinh hoàng” với tốc
độ 2 GHz được Intel giớithiệu vào tháng 8/2001.
Hiện nay ba nhà khoa học đoạt giải Nobel: Wiliam Shockley, John Pardeen,
Walter Brattain đã qua đời. John Pardeen còn đoạt giải Nobel vật lý vào năm 1972
(lần thứ 2). Bob Noyce cũng đã qua đời vào năm 1990. Còn Gordon Moore và Ted
Hoff vẫn tiếp tục chỉ đạo Intel ở Silicon Valley, xây dựng Intel trở thành tập đoàn
sản xuất bộ vi xử lí hàng đầu thế giới.
1.3.

Cấu trúc phần cứng của bộ VXL
Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau:
9


-

Đơn vị xử lý trung tâm CPU (Central Processing Unit)
Các bộ nhớ (Memories)
Các cổng vào/ra song song (Parallel I/O Ports)
Các cổng vào/ra nối tiếp (Serial I/O Ports)
Các bộ đếm/bộ định thời (Timers)

Ngoài ra với mỗi loại vi điều khiển cụ thể cịn có thể có thêm một số phần
cứng khác như bộ biến đổi tương tự- số ADC, bộ biến đổi số- tương tự DAC, các
mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…
Bộ não của mỗi vi xử lý chính là CPU, các phần cứng khác chỉ là các cơ

quan chấp hành dưới quyền của CPU. Mỗi cơ quan này đều có một cơ chế hoạt
động nhất định mà CPU phải tuân theo khi giao tiếp với chúng. Để có thể giao tiếp
và điều khiển các cơ quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu
cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data) và tín hiệu điều khiển
(Control). Về mặt vật lý thì các tín hiệu này là các đường nhỏ dẫn điện nối từ CPU
đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau. Tập hợp các đường
tín hiệu có cùng chức năng gọi là các bus. Như vậy ta có các bus địa chỉ, bus dữ
liệu và bus điều khiển. Có thể mô tả sơ bộ cấu trúc phần cứng của một vi xử lý theo
hình sau:

Hình 1.3: Cấu trúc phần cứng của một vi xử lý

10


Sau đây là mô tả sơ bộ về các phần cứng bên trong một vi xử lý:

1.3.1.

Đơn vị xử lý trung tâm CPU

CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh ghi,
các khối lôgic và các mạch giao tiếp. Chức năng của CPU là tiến hành các thao tác
tính tốn xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện
một nhiệm vụ nào đó do người lập trình đưa ra thơng qua các lệnh (Instructions).

Hình 1. 4: Đơn vị xử lý trung tâm CPU

- Bộ giải mã lệnh: có nhiệm vụ nhận dạng câu lệnh và điều khiển các mạch
khác theo lệnh đã giải mã. Việc giải mã đươpcj thực hiện nhờ có tập lệnh

“instruction set”. Mỗi họ vi điều khiển thường có các tập lệnh khác nhau.
- Arithmetical Logical Unit (ALU): Thực thi tất cả các thao tác tính tốn số
học và logic.
- Thanh ghi tích lũy (Accumulator) : là một thanh ghi SFR liên quan mật
thiết với hoạt động của ALU, lưu trữ tất cả các dữ liệu cho q trình tính
tốn và lưu giá trị kết quả để chuẩn bị cho các tính tốn tiếp theo. Một
trong các thanh ghi SFR khác được gọi là thanh ghi trạng thái (Status
Register) cho biết trạng thái của các giá trị lưu trong thanh ghi tích lũy.

11


1.3.2.

Bộ nhớ

Nhìn chung có hai loại bộ nhớ là bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ
nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một
nhiệm vụ nào đó. Thơng thường thì bộ nhớ chương trình là các loại bộ nhớ “khơng
bay hơi” (non- volatile), nghĩa là không bị mất nội dung chứa bên trong khi ngừng
cung cấp nguồn ni. Có thể kể ra một số bộ nhớ thuộc loại này như: ROM,
PROM, EPROM, EEPROM, Flash. Bộ nhớ dữ liệu là bộ nhớ dùng để chứa dữ liệu
(bao gồm các tham số, các biến tạm thời…). Tuỳ thuộc loại dữ liệu mà bộ nhớ loại
này có thể là loại “khơng bay hơi” hoặc “bay hơi” (mất dữ liệu khi cắt nguồn nuôi).
Loại “bay hơi” thường thấy là các bộ nhớ SRAM.
1.3.3.

Cổng vào/ra song song

Đây là các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp

với thế giới bên ngoài IC. Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị
điện áp tại chân cổng. Các giá trị điện áp đưa ra hay đọc vào chỉ có thể được biểu
diễn bởi một trong hai giá trị lôgic (0 hoặc 1).
Trong kỹ thuật vi xử lý, người ta thường dùng quy ước lôgic dương: giá trị
lôgic 0 ứng với mức điện áp thấp xấp xỉ 0VDC, giá trị lôgic 1 ứng với mức điện áp
cao xấp xỉ +5VDC. Tùy loại vi xử lý mà “khoảng xấp xỉ” đó là khác nhau nhưng
nhìn chung là tương thích với mức lơgic TTL. Mỗi cổng vào/ra song song thường
gồm 08 đường vào/ra khác nhau và gọi là các cổng 08 bit. Các đường tín hiệu
vào/ra của các cổng và thuộc cùng một cổng là độc lập với nhau. Điều đó có nghĩa
là ta có thể đưa ra hay đọc vào các giá trị lôgic khác nhau đối với từng chân cổng
(từng đường tín hiệu vào/ra). Một điều cần chú ý nữa đối với các cổng vào/ra đó là
chúng có thể được tích hợp thêm (nói đúng hơn là kiêm thêm) các chức năng đặc
biệt liên quan đến các ngoại vi khác.
1.3.4.

Cổng vào/ra nối tiếp

Khác với cổng song song, với cổng nối tiếp các bit dữ liệu được truyền lần
lượt trên cùng một đường tín hiệu thay vì truyền cùng một lúc trên các đường tín
hiệu khác nhau. Thơng thường thì việc truyền dữ liệu bằng cổng nối tiếp phải tuân
theo một cơ chế, một giao thức hay một nguyên tắc nhất định. Có thể kể ra một số
12


giao thức như SPI, I2C, SCI… Cổng nối tiếp có 02 kiểu truyền dữ liệu chính: Truyền đồng bộ (synchronous): thiết bị truyền và thiết bị nhận đều dùng chung một
xung nhịp (clock). - Truyền dị bộ (asynchronous): thiết bị truyền và thiết bị nhận
sử dụng hai nguồn xung nhịp riêng. Tuy nhiên hai nguồn xung nhịp này không
được khác nhau quá nhiều.
Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp và nó có
vaitrị xác định giá trị của bit dữ liệu (hay nói đúng hơn là xác định thời điểm đọc

mức lôgic trên đường truyền dữ liệu).
Cổng nối tiếp có thể có một trong các tính năng sau: Đơn cơng: thiết bị chỉ
có thể hoặc truyền hoặc nhận dữ liệu. Bán song công: thiết bị có thể truyền và nhận
dữ liệu nhưng tại một thời điểm chỉ có thể làm một trong hai việc đó. Song cơng:
thiết bị có thể truyền và nhận dữ liệu đồng thời.
1.3.5.

Bộ đếm/Bộ định thời

Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm
các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ
đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01
đơn vị (trong chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại: Xung nhịp bên trong IC.
Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh
kiện phụ bên ngồi nối với IC. Ta có thể ví đó là “nhịp tim” để toàn bộ các phần
cứng bên trong vi xử lý (bao gồm cả CPU và các ngoại vi) có thể hoạt động được.
Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ định thời
(timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để đếm thời
gian một cách khá chính xác. Xung nhịp bên ngồi IC. Đó là các tín hiệu lơgic thay
đổi liên tục giữa 02 mức 0- 1 và không nhất thiết phải là đều đặn. Trong trường hợp
này người ta gọi là các bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là
đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe
ra/vào kho bãi…
Một khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó
được hiểu là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và
13


quay trở về giá trị 0. Với bộ đếm 8 bit, giá trị tối đa là 255 và là 65535 với bộ đếm

16 bit.
Ngồi các phần cứng nêu trên cịn phải kể đến một khối lôgic khác là khối
giao tiếp bus. Khối này có chức năng ghép nối giữa các bus bên trong chip và các
chân đưa ra ngoài chip. Mục đích của việc đưa các tín hiệu địa chỉ, dữ liệu và điều
khiển ra ngoài là nhằm mở rộng khả năng phối ghép thêm của vi xử lý với các
ngoại vi khác (chủ yếu là các bộ nhớ ngoài) ngồi các ngoại vi được tích hợp trên
IC. Thơng thường thì số lượng các đường tín hiệu là giữ ngun khi đưa ra ngoài
chip, tuy nhiên trong một số trường hợp số lượng các đường tín hiệu có thể nhỏ
hơn số lượng thực bên trong (ví dụ như trường hợp của vi xử lý 8088, bus dữ liệu
bên trong là 16 bit nhưng đưa ra ngồi chỉ có 8 bit). Khi đưa ra ngồi, các tín hiệu
địa chỉ và dữ liệu có thể được ghép với nhau (cùng sử dụng chung một số chân nào
đó) hoặc được tách riêng (tín hiệu địa chỉ dùng một số chân, tín hiệu dữ liệu dùng
một số chân khác). Người ta thường “dồn kênh” (multiplex), tức là ghép chức năng,
giữa bus địa chỉ và bus dữ liệu để giảm thiểu số chân cần thiết. Trong trường hợp
này, tín hiệu địa chỉ sẽ xuất hiện trước, sau đó là tín hiệu dữ liệu trên cùng một tập
hợp các đường tín hiệu. Để tách được 2 loại tín hiệu đó thì nhà sản xuất cung cấp
cho người sử dụng một đường tín hiệu điều khiển có tên là tín hiệu chốt địa chỉ
(thường ký hiệu là ALE). Tín hiệu này sẽ tích cực khi tín hiệu địa chỉ xuất hiện và
khơng tích cực khi tín hiệu dữ liệu xuất hiện trên bus. Các IC thích hợp với việc
tách tín hiệu địa chỉ và dữ liệu là các IC thuộc họ 74xx373/374 hoặc 74xx573/574.

1.4.

Nguyên lý hoạt động của bộ VXL

Trước hết, nói qua về một khái niệm rất hay được nhắc tới trong kỹ thuật vi
xử lý – “khơng gian địa chỉ”. Nó được hiểu là số lượng địa chỉ mà CPU có thể phân
biệt được. Trong một bộ nhớ có rất nhiều ơ nhớ và CPU thường phải truy nhập (ghi
hoặc đọc) đến từng ô nhớ cụ thể, do đó CPU tất nhiên phải phân biệt được các ô
nhớ riêng rẽ với nhau. Mỗi ô nhớ cần phải có một địa chỉ gắn với nó. Địa chỉ này

chỉ dành riêng cho ơ nhớ đó, khơng trùng với địa chỉ của một ô nhớ nào khác, khi
truy nhập tới địa chỉ đó tức là truy nhập đến ơ nhớ đó. Ngồi ơ nhớ, trong vi xử lý
cịn có một số phần cứng khác cũng cần có một địa chỉ dành riêng cho nó như các
14


thanh ghi điều khiển, các thanh ghi dữ liệu… Thường thì hầu như tất cả những
phần cứng cần được truy nhập hay tác động đến đều phải được gắn với một hay
nhiều địa chỉ. Lấy ví dụ, để có thể giao tiếp và điều khiển một bộ đếm
(timer/counter), CPU cần phải tác động đến các thanh ghi quy định chế độ hoạt
động, thanh ghi chứa số đếm của bộ đếm đó. Các thanh ghi này đều có địa chỉ gán
riêng cho chúng và nhờ các địa chỉ đó mà CPU có thể ghi/đọc giá trị của các thanh
ghi, qua đó tác động lên bộ đếm.
Vi xử lý hoạt động theo một số nguyên tắc cơ bản sau:
- Các thao tác tính tốn xử lý sẽ được vi xử lý, hay nói đúng hơn là CPU,
thực hiện theo các chỉ dẫn (chính là các lệnh) đặt trong bộ nhớ chương trình.
Đương nhiên trong bộ nhớ chương trình khơng có những chỉ dẫn kiểu như
“hãy đưa điện áp +5VDC ra chân cổng A!” hay “dừng cái bộ đếm đó lại, đừng cho
nó đếm thêm một xung nhịp nào nữa!” hay “hãy tạm thời chờ ở đây cho đến khi
nào điện áp tại chân B có giá trị lơgic bằng 0!”.
Đó là ngơn ngữ của con người, các vi xử lý không nghe được và đương
nhiên khơng hiểu được những câu đó, chúng chỉ có thể nhận biết được hai và chỉ
hai giá trị lôgic trái ngược nhau mà thôi. Hai giá trị lơgic trái ngược nhau có thể là
đen- trắng, khơng- có, cao- thấp… Điều đó khơng quan trọng, cái quan trọng là về
mặt vật lý (điện học), nhờ một cơ chế nào đó mà khi đọc nội dung của bộ nhớ hay
đọc giá trị lôgic của một cổng vào ra, vi xử lý có thể phân biệt được khi nào giá trị
đọc được là giá trị lôgic thứ nhất và khi nào thì khơng phải thế. Theo truyền thống
người ta quy định chung rằng các giá trị lơgic đó là 0 và 1. Biểu thị các giá trị lơgic
đó theo quy ước lôgic dương là điện áp cao (xấp xỉ +5VDC) cho giá trị 1 và điện áp
thấp (xấp xỉ 0VDC) cho giá trị 0.

Như vậy, thay vì nói với vi xử lý rằng “hãy đưa ra giá trị lôgic 1 tại chân
cổng A!”, người ta mã hố câu nói đó thành một chuỗi các bit lơgic 0- 1 (ví dụ
00001010 chẳng hạn) rồi đặt trong bộ nhớ chương trình của IC. CPU khi cấp nguồn
nuôi sẽ đọc và tất nhiên nó hiểu cái chuỗi 0- 1 đó có nghĩa là gì và nó sẽ thực hiện
theo ý nghĩa của lệnh nó dịch ra từ chuỗi 0- 1 đó. Vậy tại sao nó hiểu được? Xin trả

15


lời là bạn lại lan man rồi đấy! Nó hiểu được đơn giản vì người ta chế tạo ra đã như
thế rồi. Hãy biết chấp nhận như vậy vào lúc này!
- Việc thực hiện các lệnh sẽ diễn ra tuần tự (lệnh ở địa chỉ thấp hơn được
thực hiện trước) bắt đầu từ địa chỉ reset. Địa chỉ reset là địa chỉ của bộ nhớ chương
trình mà tại đó, sau khi được cấp nguồn nuôi, CPU sẽ bắt đầu đọc và thực hiện theo
chỉ dẫn được mã hóa đặt tại đó. Mỗi loại vi xử lý có một địa chỉ reset riêng (thường
là từ 0000H) do nhà sản xuất quy định. - Các lệnh được thực hiện tuần tự là nhờ có
thanh ghi “bộ đếm chương trình”(PC). Thanh ghi này chứa địa chỉ của ô nhớ chứa
mã của lệnh tiếp theo sẽ được thực hiện. Khi CPU tìm nạp được mã của lệnh n,
thanh ghi PC sẽ tự độngtăng lên 1 đơn vị để trỏ vào ô nhớ chứa mã của lệnh (n+1).
- CPU thực hiện một lệnh theo các bước nhỏ. Thường thì các bước đó bao
gồm: tìm nạp mã lệnh (fetch- tức là truy cập bộ nhớ chương trình, đọc lấy giá trị tại
ơ nhớ có địa chỉ trỏ bởi thanh ghi PC, lưu vào một thanh ghi chuyên dùng chứa mã
lệnh trong CPU), giải mã lệnh (decode- giải mã giá trị đã lấy được và đang đặt
trong thanh ghi chứa mã lệnh trong CPU), cuối cùng là thực hiện lệnh (executethực hiện chỉ dẫn được giải mã ra từ mã lệnh đọc được). Những vi xử lý đầu tiên
được thiết kế với phương thức thực hiện lệnh một cách thuần “tuần tự”, nghĩa là
thực hiện tuần tự 3 bước đối với lệnh thứ n rồi mới thực hiện 3 bước tiếp theo của
lệnh thứ (n+1).
Sau này, các vi xử lý được thiết kế với CPU được module hóa thành từng
phần riêng biệt có hoạt động khá độc lập với nhau, do đó mà cấu trúc xử lý đường
ống (pipeline) ra đời. Với cấu trúc này, các bước nhỏ trong việc thực hiện các lệnh

sẽ được gối lên nhau, trong khi một phần cứng của CPU thực hiện bước 3 (thực
hiện
lệnh) của lệnh n thì một phần cứng khác của CPU thực hiện việc giải mã lệnh
tiếp theo (lệnh thứ n+1), và đồng thời một phần cứng khác nữa trong CPU tìm nạp
mã của lệnh thứ (n+2).
Với cấu trúc xử lý đường ống, tốc độ xử lý của CPU đã được nâng cao rõ rệt
và tất cả những vi xử lý ngày nay đều được thiết kế với CPU theo cấu trúc xử lý
này.
16


- Ngăn xếp(Stack): Là một đoạn bộ nhớ (thường đặt trong RAM) dùng để
chứa địa chỉ trở về của trong các trường hợp chương trình con hoặc chương trình
phục vụ ngắt được gọi. Ngồi ra ngăn xếp cịn dùng để lưu các dữ liệu tạm thời.
Ngăn xếp hoạt động theo cơ chế “vào sau ra trước” (LIFO- Last In First Out).
Thanh ghi con trỏ ngăn xếp (SP- Stack Pointer) là thanh ghi có nội dung là địa chỉ
của ơ nhớ trên cùng của ngăn xếp. Giá trị của SP được tăng giảm một cách tự động.
Ngăn xếp là phần cứng vơ cùng quan trọng trong vi xử lý, nó tham gia vào các thao
tác rẽ nhánh (trừ thao tác nhảy) của chương trình. Người lập trình phải hết sức cẩn
thận khi gán giá trị khởi tạo cho SP để tránh sự cố tràn ngăn xếp hoặc ngăn xếp
trùng với các vùng nhớ lưu dữ liệu khác. Khi xảy ra một trong các sự cố trên, sẽ
khơng có cách nào kiểm sốt được hoạt động của vi xử lý và có thể gây thiệt hại
lớn đối với hệ thống. Giống như một trị chơi, khi bạn tham gia và vì một lý do nào
đó phạm vào một trong hai lỗi đó, tất cả những gì bạn sẽ nhận được trên màn hình
là dịng chữ “GAME OVER”!
- Vậy thế nào là địa chỉ trở về? Như đã nói ở trên, vi xử lý thực hiện các
lệnh một cách tuần tự: lệnh 1, lệnh 2,…, lệnh n, lệnh n+1…Tuy nhiên đơi khi nó
gặp phải một lệnh gọi chương trình con và do đó phải chuyển sang thực hiện
chương trình con đó. Đoạn mã lệnh của chương trình con thường nằm ở một nơi
khác trong bộ nhớ chương trình, tức là có địa chỉ khơng liên tiếp với lệnh gọi

chương trình con. Nhắc lại rằng thanh ghi PC lúc này đang chứa địa chỉ của lệnh
tiếp sau lệnh gọi chương trình con. CPU chỉ biết thực hiện những gì có tại địa chỉ
chứa trong PC, do vậy mà PC cần phải được nạp giá trị mới là địa chỉ của mã lệnh
đầu tiên của chương trình con. Việc nạp giá trị mới cho PC được thực hiện một
cách tự động khi bạn gọi một chương trình con, ngồi ra địa chỉ của lệnh tiếp sau
lệnh gọi chương trình con trong chương trình chính cũng được tự động lưu lại để
sau khi thực hiện xong chương trình con, CPU sẽ có thể quay lại thực hiện tiếp
chương trình chính một cách đúng chỗ, tuần tự như khơng có chuyện gì xảy ra. Nơi
lưu giữ một cách tự động địa chỉ trở về (địa chỉ của lệnh tiếp sau lệnh gọi chương
trình con) ấy chính là ngăn xếp. Người ta thực hiện việc chia chương trình chính
thành các chương trình con (là các đoạn chương trình thực hiện một nhiệm vụ cụ
thể) để dễ dàng cho việc lập trình và dị lỗi. Bạn sẽ dần có được kỹ năng chia nhỏ

17


chương trình chính thành các chương trình con một cách hợp lý trong quá trình lập
trình cho vi xử lý.
- Ngăn xếp cũng có vai trị tương tự như đối với ngắt. Vậy ngắt là gì? Đó là
những u cầu do các ngoại vi (là các phần cứng tích hợp trên IC hoặc các tác động
từ bên ngoài) gửi tới CPU nhằm đòi hỏi những đáp ứng nhất định. Mục đích của
việc thiết kế cơ chế ngắt trong vi xử lý là nhằm tiết kiệm thời gian cho CPU. Trong
hầu hết các trường hợp, vi xử lý cần phải thực hiện nhiều nhiệm vụ trong thời gian
rất ngắn và liên tục. Để có thể đáp ứng kịp thời với các sự kiện cần xử lý, CPU có
thể tiến hành thăm dò polling) liên tục các sự kiện để xem khi nào chúng xảy ra thì
xử lý, đáp ứng lại. Tuy nhiên nếu làm vậy thì lãng phí rất nhiều thời gian của CPU
trong khi cịn có rất nhiều nhiệm vụ khác đang chờ được thực hiện, ngồi ra CPU
khơng thể thăm dò nhiều sự kiện cùng một lúc được. Người ta tạo ra ngắt để CPU
khơng phải thăm dị liên tục một hay nhiều sự kiện đó. Bằng cách ghép các sự kiện
cần đáp ứng với các cơ chế ngắt khác nhau, khi một sự kiện nào đó xảy ra, phần

cứng phụ trách ngắt tích hợp trên CPU sẽ tự động báo cho CPU biết rằng sự kiện
đã xảy ra. CPU sẽ dừng công việc đang làm lại (nhưng phải thực hiện xong lệnh
đang được thực hiện, dù mới chỉ ở giai đoạn tìm nạp mã lệnh), và chuyển sang đáp
ứng bằng cách thực hiện chương trình phục vụ ngắt tương ứng. Đáp ứng xong, tức
là xử lý xong sự kiện gây ra ngắt, CPU sẽ tiếp tục quay lại làm tiếp công việc đang
dang dở (đương nhiên là nhờ hoạt động của ngăn xếp). Nói đến ngắt khơng thể
khơng nói đến mức ưu tiên của các loại ngắt khác nhau. Có 02 loại mức ưu tiên
ngắt cơ bản là ưu tiên giữa các ngắt xảy ra đồng thời (ngắt A và ngắt B xảy ra đồng
thời cùng một lúc) và ưu tiên giữa các ngắt xảy ra khác thời điểm (đang thực hiện
chương trình phục vụ ngắt A thì lại xảy ra ngắt B). Trong cả hai trường hợp, ngắt có
mức ưu tiên cao hơn sẽ ln được phục vụ ngay lập tức. Tùy loại vi xử lý mà mức
ưu tiên có thể thay đổi được linh hoạt hoặc cố định. - Khác với chương trình con,
thời điểm thực hiện chương trình phục vụ ngắt trong hầu hết các trường hợp là nằm
ngồi sự kiểm sốt của người lập trình do ngắt có thể xảy ra bất kỳ thời điểm nào,
khi CPU đang thực hiện bất kỳ một lệnh nào trong chương trình chính. Vì thế cơ
chế hoạt động một cách tự động của ngăn xếp là không thể thiếu trong một vi xử lý.
Cũng vì thế mà cần phải xem xét kỹ lưỡng việc sử dụng các tài ngun (thanh ghi,
ơ nhớ, biến, thậm chí là các ngoại vi) của các chương trình phục vụ ngắt để tránh
18


tranh chấp với chương trình chính. Thơng thường thì khi vào đầu chương trình
phục vụ ngắt, người ta lưu lại những tài nguyên dùng chung đó trước khi thay đổi
chúng. Kết thúc chương trình phục vụ ngắt, các tài nguyên sẽ được khôi phục lại
giá trị của chúng trước khi trở về chương trình chính. Thực hiện các thao tác lưu trữ
và khôi phục này đương nhiên liên quan đến ngăn xếp, chỉ có điều khơng phải thực
hiện một cách tự động bởi CPU mà phải do người lập trình chủ động thực hiện
bằng các lệnh. Người lập trình phải quyết định cất những gì và lấy ra những gì!
Cũng phải chú ý đến cơ chế hoạt động “vào sau ra trước” của ngăn xếp và cất đi
bao nhiêu thì phải lấy ra bấy nhiêu. Nếu không bạn sẽ phạm phải một lỗi tương tự

như tràn ngăn xếp và chỉ có Chúa mới biết được chuyện gì sẽ xảy ra khi địa chỉ trở
về không được nạp đúng vào thanh ghi PC.
Một trong những tài nguyên hay bị thay đổi khi thực hiện chương trình phục
vụ ngắt là các cờ trạng thái của CPU. Đó là các bit thể hiện trạng thái hiện thời của
CPU và của kết quả thực hiện các lệnh. Các cờ này thường được ghép với nhau
thành một thanh ghi và được gọi là thanh ghi trạng thái.

1.5.

Lập trình cho một VXL

Sau khi thiết kế xong phần cứng, bạn phải tiến hành lập trình cho vi xử lý để
hồn thiện sản phẩm của mình. Vi xử lý có thể được lập trình bằng ngơn ngữ bậc
cao hay ngôn ngữ bậc thấp. Ngôn ngữ bậc thấp là ngôn ngữ được thiết kế riêng cho
từng loại vi xử lý và thường được gọi là hợp ngữ (Assembly). Ngôn ngữ bậc cao là
các ngôn ngữ gần với ngôn ngữ của con người và giống nhau cho nhiều loại vi xử
lý. Mỗi loại ngơn ngữ đều có ưu và nhược điểm riêng. Với những người mới bắt
đầu nghiên cứu về kỹ thuật vi xử lý, theo kinh nghiệm của riêng bản thân, tôi cho
rằng nên bắt đầu với ngôn ngữ bậc thấp. Có một số điểm đáng lưu ý khi bạn lập
trình cho một vi xử lý. Đó là: - Trước tiên bạn phải hiểu rõ được các chế độ địa chỉ
của vi xử lý đó. Chế độ địa chỉ chính là cách chỉ ra tốn hạng nằm ở đâu. Tốn hạng
là các tham số, các hằng số, các ơ nhớ, các thanh ghi, các bit, các cờ…hay nói
chung là các đối tượng tham gia vào việc thực hiện lệnh. Thơng thường thì một
tốn hạng (ví dụ như một thanh ghi) có thể được trỏ đến bằng một vài chế độ địa
chỉ khác nhau. Mỗi chế độ địa chỉ có thế mạnh riêng của nó và tùy từng trường hợp
19


mà ta nên chọn chế độ thích hợp khi lập trình. - Sau đó bạn phải nắm bắt được tập
lệnh (Instruction Set) của vi xử lý đó. Tập lệnh là tất cả những lệnh mà vi xử lý có

thể hiểu được, có thể thực hiện được. Mỗi lệnh đều được mã hóa (hay được quy
ước) bởi một chuỗi các bit 0 và 1. Các vi xử lý khác nhau thì có tập lệnh khác nhau
do nhà sản xuất chip cung cấp.
Trước khi bắt đầu viết các lệnh cụ thể, bạn nên viết lưu đồ thuật toán thực
hiện các nhiệm vụ cụ thể. Lưu đồ thuật toán là sơ đồ diễn giải trình tự thực hiện các
nhiệm vụ một cách lơgic và liền mạch. Viết lưu đồ thuật toán ngay cả cho các
chương trình hết sức đơn giản là một thói quen rất tốt ngay cả khi bạn đã là một cao
thủ trong lập trình vi xử lý. Chỉ cần mất chút thời gian thực hiện cơng việc này, bạn
sẽ có được cái nhìn vừa bao quát vừa chi tiết đối với chương trình mình định viết,
nhờ đó mà bạn lập trình nhanh hơn, hiệu quả hơn và dễ dàng phát hiện ra lỗi về
thuật tốn xử lý nếu chương trình chạy không như ý muốn. Đối với bản thân tôi mà
nói, tơi cho rằng viết các dịng lệnh cho một vi xử lý khơng phải là khó, ngược lại
nó rất dễ, cái khó là bạn phải biết được mình phải viết những gì hay nói đúng hơn
là phải tìm ra một lưu đồ thuật tốn đúng đắn. Khi đã tìm ra con đường đi đúng và
hiệu quả, tất cả những gì cịn lại phải làm là thể hiện các thao tác xử lý đó bằng
cách lệnh của vi xử lý - một công việc mà bất cứ ai nắm rõ tập lệnh của vi xử lý đó
đều có thể làm tốt. Khi lưu đồ thuật toán bạn lập ra là đúng, nếu sau khi lập trình
mà vi xử lý hoạt động khơng như mong muốn thì lỗi chỉ có thể là do bạn chưa thể
hiện bằng các ḍng lệnh một cách đúng đắn những gì đã lập ra mà thơi. Dần dần,
kinh nghiệm tích lũy được sẽ chỉ cho bạn cách thể hiện đúng một lưu đồ bất kỳ
thậm chí ngay ở lần đầu tiên và theo như cách chúng tơi vẫn nói đùa trong chun
mơn, trình độ lập trình của bạn đã đạt đến cấp độ “plug and play”!
Chương trình sẽ được viết trong một file mã nguồn (thường có đi là ASM).
- Phần mềm trên máy tính có tên là “Trình biên dịch” (Compiler) sẽ dịch file mã
nguồn sang một file có đi là OBJ. File này chứa thơng tin cần thiết để có thể
chuyển đổi sang file có đi HEX hay file có đi BIN (là các file chứa mã chương
trình đã được chuyển sang dạng Hexa hay Binary) để có thể nạp vào trong bộ nhớ
chương trình của vi xử lý.

20



Trong khi lập trình, hãy đặc biệt lưu ý đến các tình huống rẽ nhánh của
chương trình. Các tình huống đó bao gồm các lệnh nhảy vơ điều kiện, các lệnh
nhảy có điều kiện, các lệnh gọi chương trình con, các tình huống xảy ra ngắt và
đương nhiên phải chú ý đến các phần cứng liên quan như ngăn xếp hay các cờ trạng
thái. - Với mỗi loại vi xử lý/vi điều khiển lại có nhiều hãng cung cấp các phần
mềm trên máy tính dùng để soạn thảo và biên dịch. Các phần mềm này có các từ
khóa khác nhau mà người lập trình phải tuân thủ khi sử dụng. Từ khóa là các ký
hiệu được thể hiện bằng các ký tự, được viết trong file mã nguồn nhưng nó không
phải là lệnh của vi xử lý, đương nhiên không được dịch ra mã máy, đó chỉ là các chỉ
dẫn cho phần mềm trên máy tính thực hiện biên dịch các file mã nguồn sang mã
máy một cách chính xác.

21


Chương 2: BỘ VI XỬ LÝ 64 BIT CỦA INTEL VÀ CÁC THẾ HỆ VXL
2.1.

Tổng quan về bộ vi xử lý 64 bit của Intel

Hầu hết các CPU được thiết kế để các nội dung của một sổ đăng ký số
nguyên duy nhất có thể lưu trữ các địa chỉ (địa điểm) của datum bất kỳ trong bộ
nhớ ảo của máy tính . Vì vậy, tổng số địa chỉ trong bộ nhớ ảo - tổng số tiền của dữ
liệu máy tính có thể giữ khu vực làm việc của nó - được xác định bởi chiều rộng
của các đăng ký. Bắt đầu từ những năm 1960 với IBM System/360 (mà là một
ngoại lệ, ở chỗ nó sử dụng thứ tự thấp 24 bit của một từ cho các địa chỉ, kết quả
trong 16 MB [16 × 1024 2 byte] kích thước khơng gian địa chỉ), sau đó ( giữa nhiều
người khác) tháng mười hai VAXmáy tính mini trong năm 1970, và sau đó với Intel

80386 vào giữa những năm 1980, một sự đồng thuận trên thực tế phát triển là 32 bit
là một kích thước đăng ký thuận tiện. A 32- bit địa chỉ đăng ký có nghĩa là 2 32 địa
chỉ, hoặc 4 GB bộ nhớ RAM , có thể được tham chiếu. Đồng thời những kiến trúc
này đã được nghĩ ra, 4 GB bộ nhớ là vượt xa số lượng tiêu biểu (4 MB) trong cài
đặt này được coi là đủ "khoảng không" để giải quyết. 4,29 tỷ địa chỉ đã được coi là
một kích thước thích hợp để làm việc với một lý do quan trọng khác: 4,29 tỷ số
nguyên là đủ để giao tài liệu tham khảo duy nhất cho hầu hết các thực thể trong các
ứng dụng như cơ sở dữ liệu .

Hình 2.1: Vi xử lý của Intel

Một số siêu máy tính kiến trúc của những năm 1970 và 1980 sử dụng sổ đăng
ký lên đến 64 bit rộng. Trong giữa những năm 1980, Intel i860 phát triển đã bắt đầu
lên đến đỉnh điểm (quá muộn phát hành năm 1989 cho Windows NT). Tuy nhiên,
32 bit vẫn là chỉ tiêu cho đến đầu những năm 1990, khi giảm liên tục trong chi phí
22


của bộ nhớ để cài đặt với số lượng tiếp cận RAM 4 GB, và việc sử dụng không
gian bộ nhớ ảo trên 4 GB trần đã trở thành mong muốn xử lý một số loại của các
vấn đề. Trong phản ứng, MIPS và DEC phát triển kiến trúc bộ vi xử lý 64- bit, ban
đầu cho máy trạm và máy chủ máy cao cấp . Đến giữa những năm 1990, hệ thống
máy tính HAL , Sun Microsystems , IBM , Silicon Graphics , và Hewlett
Packard đã phát triển kiến trúc 64- bit cho máy trạm và hệ thống máy chủ. Một
ngoại lệ đáng chú ý xu hướng này là máy tính lớn của IBM, mà sau đó được sử
dụng 32- bit dữ liệu và kích cỡ địa chỉ 31- bit, các máy tính lớn của IBM đã khơng
bao gồm bộ vi xử lý 64- bit cho đến năm 2000. Trong những năm 1990, bộ vi xử lý
64- bit một số chi phí thấp đã được sử dụng trong ngành điện tử tiêu dùng và các
ứng dụng nhúng. Đáng chú ý, Nintendo 64 vàPlayStation 2 có bộ vi xử lý 64- bit
trước khi giới thiệu của họ trong máy tính cá nhân. Máy in cao cấp và thiết bị

mạng, cũng như máy tính cơng nghiệp, cũng được sử dụng bộ vi xử lý 64- bit,
chẳng hạn như các thiết bị hiệu ứng lượng tử R5000 . Tính tốn 64- bit bắt đầu trơi
dạt xuống máy tính để bàn máy tính cá nhân từ năm 2003 trở đi, khi một số mơ
hình trong các dịng Macintosh của Applechuyển sang bộ xử lý PowerPC 970 (gọi
là "G5" của Apple), và AMD đã phát hành 64- bit đầu tiên của nó x86 64 bộ vi xử
lý.Các vi xử lý Pentium thuộc thế hệ thứ vi xử lý 32- bit, tức là chúng có độ rộng
bus dữ liệu ngồi là 32- bit tạo mơi trường phát triển phầm mềm 32- bit.Đến nay
mơi trường tính toán 64- bit đang trở thành xu thế thay thế dần mơi trường tính tốn
32- bit.Từ năm 2000 một thế hệ vi xử lý mới có cấu trúc 64- bit đã ra đời nhằm đáp
ứng nhu cầu này.Đó là các vi xử lý IA- 64 và EM- 64T của INTEL.Hãng AMD
cũng có các vi xử lý 64- bit như Opteron và Arthlon 64 dựa trên kiến trúc x8664.Các bộ xử lý này có các tệp lớn hơn, hệ điều hành quản lý dung lượng bộ nhớ và
đĩa cứng lớn hơn, nhờ đó phần mềm có thể chạy nhanh hơn so với môi trường 32bit.Cấu trúc vi xử lý IA- 64 ( INTEL Architecture) là một ví dụ được thiết kế với bú
địa chỉ 64- bit, cho phép định địa chỉ khơng gian bộ nhớ tuyến tính lên đến 16
exabyte ( 264 =16x260 byte).Bus dữ liệu rộng 64- bit cho phép truy xuất 8 byte một
nhịp đồng hồ.Bộ tính dấu chấm động cũng có độ chính xác rất cao.Như truyền
thống, vi xử lý IA- 64 cũng có tập lệnh tương thích với các vi xử lý thế hệ trước.Nó
cũng tiếp thu và phát triển các khả năng như dự đoán rã nhánh, suy đốn, tiên đốn
IA- 64 có nhiều đến 128 thanh ghi đa năng 64- bit dùng cho các phép tính số
23


ngun và phép tính cịn một tệp các thanh ghi 64- bit khác như thanh ghi 82 bit
cho các phép tính dấu chấm dộng.Ngồi ra thanh ghi ứng dụng các cấu trúc IA- 32
và IA- 64,vv…
Vi xử lý IA- 64 vẫn cho phép các mã lệnh của vi xử lý 32- bit ch”ạy trên nền
hê điều hành 64 bit mới.Do đó nó có 2 mơi trường hệ điều hành cơ bản:
- Môi trường làm IA- 32, dùng cho các hệ điều hành thế hệ trước như
Windows 98, NT…
- Môi trường IA- 64, dùng cho các hệ điều hành mới 64bit.
Với các đặc điểm như trên, IA- 64 có thể hoạt động trong các chế độ:

- Chế độ thực 32bit trong môi trường 64 bit ( do hệ điều hành quyết định).
- Chế độ bảo vệ 32 bit trong môi trường 64 bit ( do hệ điều hành quyết định).
- Chế độ ảo 32 bit trong môi trường 64 bit ( do hệ điều hành quyết định).
- Các ứng dụng 64 bit trên hệ điều hành 64 bit.
Tuy các bộ vi xử lý 64 bit đã thực hiện trên thị trường một thời gian nhưng
việc chấp nhận chúng diễn ra khác chaamk chủ yếu do thiếu phần mềm chạy trên
nền 64 bit dể cả hệ điều hành.Tuy nhiên nền tảng 64- bit đang có được lực đẩy nhờ
cố gắng kết hợp của cả các công ty phần cứng , phần mềm.Hãng Microsoft cũng đã
cho ra mắt phiên bản 64- bit của Windows gọi là Windows XP Professional x64
Edition và Windows Server 2003 x64 Edition với ưu điểm so với Windows 32- bit
về tốc độ xử lý và khả năng quản lý bộ nhớ lớn hơn.
2.2.

Kiến trúc bộ vi xử lý 64 bit

Kiến trúc bộ vi xử lý 64- bit mà bộ vi xử lý hiện đang được sản xuất (tính đến
tháng 1 năm 2011 ) bao gồm:

24


×