Thanh ghi tích luỹ Accumulator: Trong CPU có một hay nhiều thanh ghi được dùng để chứa dữ liệu, các dữ liệu này được đọc từ bộ nhớ vào.. A DC IR Nội dung của PC lúc khởi động chương trìn
Trang 1Chương VI:
CÁC MẠCH VI XỬ LÝ - TỔ CHỨC CPU
1 Giới thiệu các thanh ghi:
Một bộ phận then chốt trong CPU chính là các thanh ghi (Register)
Thanh ghi là một dạng bộ nhớ có tốc độ đọc - ghi cực nhanh, dung lượng hạn chế và nằm trong CPU Giống như các đơn vị nhớ, thanh ghi bao gồm các đơn vị nhớ nhị phân và được đánh địa chỉ để dễ dàng truy xuất chúng
Thông thường, tuỳ theo chức năng của chúng mà người ta đặt tên cho chúng,
vì vậy chúng có nhiều tên gọi khác nhau
1.1 Thanh ghi tích luỹ (Accumulator):
Trong CPU có một hay nhiều thanh ghi được dùng để chứa dữ liệu, các dữ liệu này được đọc từ bộ nhớ vào Các thanh ghi có chức năng này được gọi là thanh ghi tích luỹ Thanh ghi tích luỹ lưu trữ dữ liệu tạm thời trong khi tính toán Trong hầu hết máy tính, thanh ghi tích luỹ thường giữ một trong những toán hạng của các phép tính số học, luận lý
Ngoài ra, thanh ghi tích luỹ còn được dùng trong các phép toán dịch chuyển bit và các lệnh khác
Thanh ghi tích luỹ 8 bit
1.2 Thanh ghi đếm dữ liệu (Data Counter):
Trong CPU có một hay nhiều thanh ghi đếm dữ liệu, nó chứa địa chỉ của dữ liệu cần đọc hay ghi Kích thước của thanh ghi này tuỳ thuộc vào độ lớn của bộ nhớ
Ví dụ:
Thanh ghi 8 bit có thể định vị 28 (=256) ô nhớ
Thanh ghi 16 bit có thể định vị 216 (=65536) ô nhớ
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 <- Bit
Thanh ghi đếm dữ liệu 16 bit
1.3 Thanh ghi lệnh (Instruction Register):
Thanh ghi này được dùng để lưu trữ lệnh đã được đọc từ bộ nhớ vào Thông thường loại thanh ghi này có chiều dài 8 bit Dùng lưu trữ lệnh cho đến khi lệnh
Trang 2được giải mã Độ dài bit của nó chính là độ dài bit của lệnh cơ bản cho máy tính Một số máy tính có hai thanh ghi lệnh, do đó nó có thể lấy một lệnh đồng thời cất một lệnh trong khi thực hiện lệnh trước đó và sự xử lý này được gọi là
xử lý đường ống (pipe - line)
1.4 Mạch đếm chương trình (PC – Program Count):
Mạch đếm chương trình là thanh ghi chứa địa chỉ của mã lệnh Dựa trên địa chỉ này CPU đọc lệnh từ bộ nhớ và chứa vào Thanh ghi lệnh
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 <- Bit
2 Cách sử dụng các Thanh ghi:
Khi khởi động, địa chỉ đầu tiên được đưa vào Mạch đếm chương trình
Ví dụ: Giả sử ta có lệnh đầu tiên nằm trong bộ nhớ tại địa chỉ 0400, do đó nội
dung của mạch đếm chương trình (PC) là 0400
địa chỉ
bộ nhớ
lệnh 1
Vùng nhớ chương trình
0409
0A32
Vùng nhớ dữ liệu
Trang 3A DC IR
Nội dung của PC lúc khởi động chương trình
Kế tiếp CPU nạp nội dung ô nhớ có địa chỉ chứa trong PC vào Thanh ghi lệnh (IR) đồng thời tăng PC lên 1
A DC
Nạp mã lệnh vào IR và tăng PC lên 1
CPU giải mã lệnh (9C) và thi hành lệnh đưa 2 byte kế tiếp vào DC Qui trình như sau:
o Căn cứ vào địa chỉ ghi ở PC, CPU nạp nội dung ô nhớ tương ứng vào byte cao của DC và tăng PC lên 1
A
Nạp byte cao vào DC
o Với địa chỉ trong PC tìm tiếp byte tương ứng và nạp nọi dung vào byte thấp của DC đồng thời tăng nội dung của PC lên 1
A
Nạp byte thấp vào DC
o Lệnh được thi hành xong Chú ý nội dung của ô nhớ 0401 và 0402 cũng được nạp vào DC dù đây là 2 vùng nhớ nằm trong vùng nhớ chương trình
và được định vị bởi PC Như vậy, dữ liệu mà được xử lý ngay trong lệnh, loại dữ liệu này gọi là “trực kiện” hoặc dữ liệu lấy ngay (immediate data) Với địa chỉ trong PC, CPU nạp lệnh kế vào IR
Trang 4Nạp lệnh kế vào IR Lệnh 40 nạp ô nhớ có địa chỉ trong DC vào A
Lưu ý rằng nội dung DC và PC không tăng PC không tăng vì 7A không phải là
dữ liệu hay lệnh trực kiện mà nó được tìm từ vùng nhớ dữ liệu DC không tăng vì
dữ liệu cần xử lý kế tiếp không nhất thiết phải nằm ở vùng nhớ kế tiếp
Lệnh 3 giống như lệnh 1:
a) Nạp mã lệnh vào IR
b) Tìm lệnh 0A trong địa chỉ 0405 và nạp vào byte cao của DC
c) Tìm lệnh 31 trong địa chỉ 0406 và nạp vào byte thấp của DC
Lệnh 4 có mã 80 lấy nội dung vùng nhớ có địa chỉ chứa trong DC cộng vào A Qui trình được thực hiện như sau:
a) Nạp lệnh vào IR
Trang 57A A
b) Thực hiện lệnh 80
Lệnh 5 có mã 60 lưu nội dung của A vào vùng nhớ định bởi DC Qui trình như sau:
a) Tìm lệnh (Nạp lệnh vào IR):
b) Thực hiện lệnh:
0A30 7A 0A31 A9 0A32
3 Mạch tính toán (ALU – Arithmetic & Logical Unit):
Mạch này được gọi là Mạch tính toán số học và luận lý Các chức năng chính của nó là:
Thực hiện phép cộng nhị phân
Thực hiện các phép tính luận lý (đại số bool)
Làm bù số
Dịch chuyển các bit trong dữ liệu
4 Thanh ghi địa chỉ bộ nhớ (MAR – Memory Address Register):
Thanh ghi này dùng để giữ địa chỉ của dữ kiện trong bộ nhớ Địa chỉ này có thể là một phần của lệnh hay do chương trình cung cấp Lệnh nạp thanh ghi tích luỹ (A) từ bộ nhớ có địa chỉ giả sử là 300 thì sẽ nạp A và nội dung của ô nhớ có địa chỉ 300 (do lệnh nào vào MAR giá trị 300) Nội dung của A sẽ tăng lên 1 và cất lại ô nhớ 300 Như vậy, CPU có thể truy xuất đến ô nhớ 300 một số lần mà không cần chỉ ra địa chỉ của nó (ở đây là 300) trong lệnh (vì đã chứa sẵn trong MAR)
Trang 6Ngoài ra còn có thể dùng ô nhớ kế tiếp (có địa chỉ là 301) bằng cách đơn giản là cộng vào MAR
5 Mạch điều kiểm (CU – Control Unit):
Mạch điều kiểm có nhiệm vụ chủ yếu là giải mã lệnh đang chứa trong IR và phát tín hiệu truyền dữ liệu vào ALU đồng thời nó ra lệnh cho ALU thực hiện
Hoạt động của Mạch điều kiểm
6 Các cờ trạng thái:
CPU có một dãy các cổng luận lý để ghi nhận kết quả thực hiện của ALU Các cổng này hợp lại thành thanh ghi trạng thái, mỗi cổng (1 bit) được gọi là một cờ trạng thái Trong thanh ghi này có các cờ sau:
6.1 Cờ gởi (Carry Flag):
Dùng để ghi bit nhớ khi thực hiện phép tính trên một hay nhiều byte hay word
Ví dụ: Giả sử ta có phép cộng sau:
Byte cao Byte thấp
Thanh ghi đệm
Thanh ghi trạng thái Mạch dịch chuyển Mạch bù Mạch cộng và Bool
Đường truyền
dữ liệu
A DC IR PC
Thanh ghi đệm
Trang 76.2 Cờ Zero (Zero Flag):
Cờ này có giá trị 1 khi kết quả thực hiện là 0 và có trị 0 khi kết quả có trị 1
6.3 Cờ dấu (Sign Flag):
Cờ này ghi nhận bit dấu của số nhị phân có dấu hoặc cho biết kết quả của phép tính là âm hay dương
6.4 Cờ tràn (Overflow Flag):
Cờ này có trị 1 khi xảy ra hiện tượng tràn Hiện tượng này chỉ xảy ra khi có giá trị gởi ở bit cao
Ví dụ: Thực hiện các phép công sau:
0010 0011 0101 1011 1100 1011 1011 1100 + 0001 1101 1011 1001 1101 1000 1100 0111
0100 0001 0001 0101 1010 0100 1000 0011
Không tràn do không nhớ ở bit cao Đối với số nhị phân có dấu, hiện tượng tràn xảy ra khi bit nhớ tại bit dấu (Cp) và bit kế tiếp (Cs = bit kế bit dấu) khác nhau
Ví dụ: Thực hiện các phép tính sau:
Cộng 2 số 2 và 2:
4 0000 0100 Cp=0, Cs=0 không tràn
Cộng hai số -0C và +09:
-0C 1111 0100 +09 0000 1001 -03 1111 1101 Cp=0, Cs=0 không tràn
Cộng hai số -75 và +79:
-75 1000 1011 +79 0111 1001
4 0000 0100 Cp=1, Cs=1 không tràn
Cộng hai số -28 và +59:
-28 1101 1000 +59 0101 1001 +31 0011 0001 Cp=1, Cs=1 không tràn
Trang 8 Cộng hai số -45 và +67:
-45 0100 0101 +67 0110 0111 -54 1010 1100 Cp=0, Cs=1 tràn
Cộng hai số -6E và +5C:
-6E 1001 0010 +5C 1010 0100 +36 0011 0110 Cp=1, Cs=0 tràn
Kết luận: Hiện tượng tràn xảy ra khi Cờ tràn = Cs Cp
( Dấu thể hiện phép XOR)
6.5 Cờ Chẵn - lẻ (Parity Flag):
Cờ này bậc lên 1 khi có sự truyền dữ liệu bị sai tính chẵn lẻ
6.6 Cờ cho phép ngắt quãng (Interrupt Enable Flag):
Cờ này có trị 1 nếu cho phép ngắt quãng và trị 0 nếu không cho phép ngắt Bên cạnh đó, CPU cũng có thể tự động cấm ngắt quãng trong khi khởi động hay trong chương trình phục vụ, người lập trình cũng có thể ngắt quãng trong các vòng lặp hay các phép tính nhiều “từ” (word) Một máy tính có thể
có nhiều cờ loại này nếu có nhiều ngõ vào yêu cầu ngắt quãng
7 Qui trình thực hiện lệnh:
7.1 Thời gian thực hiện lệnh:
Các tác vụ trong CPU được điều khiển bởi đồng hồ thạch anh có chu kỳ trong khoảng vài chục đến vài trăm nano giây (=109 s) Đồng hồ này phát tín hiệu sống vuông có ký hiệu là Ф
Tín hiệu đồng hồ Ф Tuỳ theo nhu cầu mà các dạng tín hiệu này được thiết kế đơn giản hay phức tạp
Ví dụ: Hai dạng tín hiệu khác nhau của đồng hồ Ф
Dạng tín hiệu Ф1
Trang 9Dạng tín hiệu Ф2
7.2 Chu kỳ lệnh:
Thông thường, mỗi lệnh được thi hành thông qua 2 giai đoạn: Tìm lệnh và thực hiện lệnh
Tìm lệnh:
CPU xuất nội dung của PC cùng với tín hiệu yêu cầu đọc nội dung ô nhớ
có địa chỉ chứa trong PC Sau khi đọc xong, CPU lưu nội dung vào IR và tăng PC lên 1
Thực hiện lệnh:
CU căn cứ vào IR tạo ra một loạt các thao tác để thi hành lệnh Tương ứng với hai giai đoạn trên là hai chu kỳ đồng hồ Ф và tạo thành một chu kỳ lệnh
8 Cấu trúc của CPU 8086/8088:
Bộ xử lý thường thực hiện chương trình bằng cách lập các bước sau:
Lấy lệnh từ bộ nhớ
Đọc toán hạng
Thực hiện lệnh
Ghi kết quả (nếu có yêu cầu)
Cấu trúc CPU 8086/8088 cho phép thực hiện các bước trên bằng cách phân chia vùng thực hiện trong CPU bởi các bộ phận: Bộ thực hiện lệnh (EU – Execution Unit) để thực hiện lệnh, bộ giao tiếp (BIU – Bus Interface Unit) để lấy lệnh, đọc toán hạng và ghi kết quả Hai bộ này có thể làm việc độc lập với nhau và trong hầu hết các trường hợp có sự trùng lấp giữa thời gian thực hiện và lấy lệnh Kết quả là thời gian lấy lệnh coi như không có vì bộ thực hiện lệnh đã được lấy sẵn bởi bộ giao tiếp BIU
i) Bộ thực hiện lệnh (EU):
Bộ ALU 16 bit trong EU duy trì trạng thái và cờ điều khiển CPU, đồng thời cũng kiểm soát các thanh ghi đa dụng và toán hạng lệnh Tất cả thanh
Chu kỳ lệnh
Trang 10ghi và đường truyền dữ liệu trong EU thường là 16 bit để được truyền nhanh
ii) Bộ giao tiếp (BIU):
Bộ giao tiếp của CPU 8086/8088 tương tự nhau về mặt chức năng nhưng có số đường giao tiếp ngoài khác nhau tuỳ theo cấu trúc và đặc tính Bus của chúng
Bộ giao tiếp thực hiện tất cả các tác vụ về bus cho EU, dữ kiện được truyền giữa CPU và bộ nhớ hay thiết bị I/O khi có yêu cầu từ EU Mặt khác, trong khi EU đang thực hiện lệnh thì BIU sẽ tìm và lấy lệnh từ trong bộ nhớ vào CPU
iii) Các Thanh ghi đa dụng:
Thanh ghi đa dụng bao gồm 8 thanh và chia thành 2 nhóm:
Nhóm thanh ghi dữ kiện (4 thanh)
Nhóm thanh ghi chỉ số đếm (4 thanh)
iv) Thanh ghi đếm lệnh (Instruction Pointer):
Thanh ghi này chứa độ dời (offset) của lệnh kế tiếp đối với địa chỉ đầu của phân đoạn hiện hành
v) Thanh ghi phân đoạn ô nhớ (Segment Register):
Bộ nhớ 1Mb của CPU được chia thành các phân đoạn luận lý Mỗi phân đoạn có thể lên đến 64Kb và CPU có thể cùng một lúc truy xuất đến 4 phân đoạn khác nhau
9 Tín hiệu của CPU:
Trong quá trình thực hiện lệnh, CPU phát ra các tín hiệu cần thiết như mô tả bên dưới Giả sử CPU là chip có 40 chân như hình vẽ
-> Đồng hồ Ф 4
Hình CPU chip 40 chân Trong chu kỳ tìm lệnh, tác vụ thực sự trong chu kỳ này là đọc bộ nhớ Như vậy cần biết địa chỉ của vùng nhớ và phải đọc dữ liệu (hay mã lệnh) vào Giả sử
Trang 11bộ nhớ có kích thước 64K Do đó, CPU cần có 16 chân địa chỉ và để đọc phải có tín hiệu yêu cầu đọc
D7 R
A13
A14
A15
Quá trình tìm lệnh
Kế tiếp là chu kỳ thực hiên lệnh Như hình CPU chip 40 chân ta có 4 loại lệnh:
Nạp địa chỉ ô nhớ vào DC (lệnh 1 và 3)
Tìm nội dung ô nhớ có địa chỉ chứa trong DC và nập vào A (lệnh 2)
Tìm nội dung ô nhớ có địa chỉ chứa trong DC cộng với nội dung của A và chứa kết quả vào A (lệnh 4)
Lưu nội dung của A vào ô nhớ có địa chỉ chứa trong DC (lệnh 5)
Với 4 loại lệnh này ta khảo sát các chu kỳ lệnh và tín hiệu điều khiển
Trước tiên là lệnh đơn giản nhất Lệnh A0 (lệnh 2) yêu cầu tìm dữ liệu trong bộ nhớ, việc tìm tương tự như tìm lệnh do đó lệnh đọc bộ nhớ như sau:
Tìm lệnh Tìm dữ liệu
Quá trình Đọc bộ nhớ
địa chỉ
D0 – D7 READ
A0 –A15
Dữ liệu
READ
Địa chỉ lệnh Địa chỉ dữ liệu
A0 – A15
D0 – D7
READ
Ф
Trang 12Lệnh đọc bộ nhớ có 2 chu kỳ đó là tìm lệnh và tìm dữ liệu Điểm khác biệt của hai chu kỳ này là:
Trong chu kỳ tìm lệnh, A0 – A15 là nộI dung của PC còn trong chu kỳ tìm
dữ liệu là nộI dung của DC
Trong chu kỳ tìm lệnh, dữ liệu được nhập vào IR, riêng trong chu kỳ tìm dữ liệu, dữ liệu được lưu vào A
Lệnh kế tiếp là lệnh cộng (lệnh 4) có tác dụng có tác dụng là tìm nội dung trong bộ nhớ và cộng vào thanh ghi Việc tìm nội dung bộ nhớ chính là lệnh đọc (lệnh 2) Do đó, các tín hiệu trong hai lệnh là như nhau, điều khác biệt là ở kết quả là lệnh đọc lưu dữ liệu đọc được vào A, còn lệnh cộng thì cộng dữ liệu đọc được vào A
Lệnh 5 lưu nội dung của A vào bộ nhớ có địa chỉ trong DC chính là lệnh viết bộ nhớ Khi đó CPU cần có tín hiệu Write và ở mức cao thay vì Read
A0 D4 Dữ liệu
D7
Địa chỉ
A13 A14 A15
READ
WRITE
Tìm lệnh Tìm dữ liệu
Địa chỉ lệnh Địa chỉ dữ liệu
A0 – A15
D0 – D7
READ
Ф
Trang 13Cuối cùng là lệnh 1 tác dụng nạp địa chỉ bộ nhớ váo DC và chiếm 3 ô nhớ: 1 ô nhớ là mã lệnh, 2 ô nhớ là địa chỉ Lệnh nạp DC này tương đương với 2 lệnh đọc
bộ nhớ với điểm khác biệt như sau:
Lệnh 9C yêu cầu 2 lần đọc bộ nhớ thay vì 1 lần như lệnh 80
Địa chỉ dữ liệu cần đọc chứa trong PC trong khhi lệnh đọc bộ nhớ lấy địa chỉ từ DC
Dữ liệu đọc được lưu vào nữa byte cao và nữa byte thấp của DC còn đối với lệnh đọc bộ nhớ thì dữ liệu chứa trong A
ALU
PC
ALU
Đối với CPU thông minh chỉ cần 3 chu kỳ để thực hiện lệnh nạp DC
Ф A0-A15
Tìm lệnh Tìm địa chỉ đầu Tìm địa chỉ sau Lệnh nạp DC có 3 chu kỳ
Mặt khác, để đơn giản hoá CPU, nội dung của PC chỉ xuất ở chu kỳ đầu (tương
tự DC chỉ xuất ở chu kỳ sau) do đó, lệnh nạp DC thường chiếm 6 chu kỳ (xem hình vẽ trang sau)
Địa chỉ lệnh Địa chỉ lệnh 1 Địa chỉ lệnh 2
Trang 14Tìm Lệnh Tìm địa chỉ đầu Tìm địa chỉ sau
Lệnh nạp DC có 6 chu kỳ
10 Qui trình giải mã của Control Unit:
Hoạt động của CPU thật ra thực ra bao gồm việc kích hoạt các phần tử luận lý của nó bằng các tín hiệu luận lý Ví dụ như mạch bù có nhiệm vụ làm bù 8 thanh chốt từ một tín hiệu phát ra từ CU Dĩ nhiên ta không cần làm bù 8 thanh chốt của mạch bù mà thực ra muốn làm bù một từ là A ta chuyển nội dung của từ A vào mạch bù Sau khi làm bù xong chuyển giá trị lại cho A Việc làm bù này được thông qua 5 bước sau:
Chuyển nội dung từ A vào đường truyền dữ liệu
Chuyển nội dung từ đường truyền dữ liệu vào mạch bù
Kích hoạt mạch bù
Chuyển nội dung từ mạch bù ra dường truyền dữ liệu
Chuyển nội dung từ đường truyền dữ liệu ra từ A
Mỗi bước trên được gọi là vi lệnh (micro instruction) được phát động từ một tín hiệu của CU
Bằng cách đưa ra một loạt điều khiển, CU thực hiện một dãy vi lệnh tạo thành một vĩ lệnh (macro instruction), đó chính là một lệnh của CPU
Để làm bù một từ A, CU phải có 5 mã nhị phân tương ứng 5 tín hiệu, dãy 5 mã nhị phân này được gọi là vi trình
Hay Vi trình gồm một dãy các số nhị phân chứa trong CU
Và Vĩ trình chính là chương trình dưới dạng ngôn ngữ máy được chứa trong ROM hay RAM Mỗi mã lệnh của vĩ trình thực hiện một vi trình
Dữ liệu Dữ liệu
DC PC ALU
Đường truyền
dữ liệu
Dữ liệu CU Vĩ trình CU
Vi trình
Trang 15Ví dụ các tín hiệu của CU
C0, C1 C0 = 0, C1 = 0 Không chuyển dữ liệu vào ra đường truyền dữ liệu / thanh ghi địa chỉ
C0 = 0, C1 = 1 Chuyển dữ liệu vào đường truyền dữ liệu hay thanh ghi địa chỉ
C0 = 1, C1 = 0 Chuyển dữ liệu ra khỏi đường truyền dữ liệu hay thanh ghi địa chỉ C1 = 1, C0 = 1 Lấy vi lệnh trong CU
C2, C3 Khi C0 = 1, C1= 0 hoặc C0= 0, C1= 1 thì tín hiệu này được giải mã để chọn dòng dữ liệu C4, C5
C6, C7, C8 8 tín hiệu này xác định các tác vụ trong ALU
WRITE Nối trực tiếp vào 2 bit dữ liệu của CU
READ
C, O, S, Z 4 bit trạng thái nối trực tiếp vào 4 bit dữ li ệu của CU
Ví dụ về qui trình tìm lệnh:
Mã vi lệnh
Lệnh