Đơn vị điều khiển CU Chức năng Điều khiển nhận lệnh từ bộ nhớ đưa vào thanh ghi lệnh Tăng nội dung của PC để trỏ sang lệnh kế tiếp Giải mã lệnh đã được nhận để xác định thao tác m
Trang 1Cấu trúc máy tính
Chương 3
BỘ XỬ LÝ TRUNG TÂM (CPU)
Trang 2Nội dung
3.1 Cấu trúc cơ bản của CPU
3.2 Tập lệnh
3.3 Hoạt động của CPU
3.4 Các kỹ thuật tiên tiến của bộ xử lý
3.5 Kiến trúc Intel
Trang 33.1 Cấu trúc cơ bản của CPU
CPU gồm 1 số bộ phận tách biệt :
Bộ điều khiển (Control Unit) lấy lệnh ra từ bộ nhớ và xác định kiểu lệnh.
Bộ luận lý và số học (ALU) thực hiện phép toán số học và logic
Các thanh ghi (Registers) : lưu kết quả tạm thời và các thông tin điều khiển CPU giao tiếp với các bộ phận khác trong máy tính thông qua các tuyến gọi là Bus
Tập các Thanh ghi (RF)
Đơn vị nối ghép bus (BIU)
Bus bên trong Chức năng : thực hiện chương trình lưu trong bộ nhớ chính bằng cách lấy lệnh ra - khảo sát
- thực hiện lần lượt các lệnh.
Trang 4Đơn vị điều khiển (CU)
Chức năng
Điều khiển nhận lệnh từ bộ nhớ đưa vào thanh ghi lệnh
Tăng nội dung của PC để trỏ sang lệnh kế tiếp
Giải mã lệnh đã được nhận để xác định thao tác mà lệnh yêu cầu
Phát ra các tín hiệu điều khiển thực hiện lệnh
Nhận các tín hiệu yêu cầu từ bus
hệ thống và đáp ứng với các yêu cầu đó.
Các tín hiệu điều khiển bên trong CPU
Các tín hiệu điều khiển đến bus hệ thống
Trang 5Đơn vị điều khiển (CU)
Clock: tín hiệu nhịp từ mạch tạo dao động bên ngoài.
Mã lệnh từ thanh ghi lệnh đưa đến để giải mã.
Các cờ từ thanh ghi cờ cho biết trạng thái của CPU.
Các tín hiệu yêu cầu từ bus điều khiển
Các tín hiệu điều khiển bên trong CPU:
Điều khiển các thanh ghi
Điều khiển ALU
Các tín hiệu điều khiển bên ngoài CPU:
Bus điều khiển
Các tín hiệu điều khiển bên trong CPU
Các tín hiệu điều khiển đến bus hệ thống
Trang 6Đơn vị số học và logic
Chức năng: Thực hiện các phép toán số học và phép toán logic
Số học: cộng, trừ, nhân, chia, tăng, giảm, đảo dấu
Logic: AND, OR, XOR, NOT, phép dịch bit
Đơn vị
số học và logic (ALU)
Trang 8Cổng AND
Dùng thực hiện hàm AND 2 hay nhiều biến
Cổng AND có số ngã vào tùy thuộc số biến và một ngã ra Ngã ra của cổng là hàm AND của các biến ngã vào
Nhận xét: Ngã ra cổng AND chỉ ở mức cao khi tất cả ngã
vào lên cao
Khi có một ngã vào = 0, ngã ra = 0 bất chấp các ngã vào còn lại.
Khi có một ngã vào =1, ngã ra = AND của các ngã vào còn lại.
Trang 9Cổng OR
Dùng để thực hiện hàm OR 2 hay nhiều biến
Cổng OR có số ngã vào tùy thuộc số biến và một ngã ra
Nhận xét: Ngã ra cổng OR chỉ ở mức thấp khi cả 2 ngã vào
xuống thấp
Khi có một ngã vào =1, ngã ra = 1 bất chấp ngã vào còn lại
Khi có một ngã vào =0, ngã ra = OR các ngã vào còn lại
Trang 10Cổng NAND
Là kết hợp của cổng AND và cổng NOT, thực hiện hàm Y = A.B
Ký hiệu của cổng NAND (Gồm AND và NOT, cổng NOT thu gọn lại một vòng tròn)
Tương tự như cổng AND, ở cổng NAND ta có thể dùng 1 ngã vào làm ngã kiểm soát Khi ngã kiểm soát = 1, cổng mở cho phép tín hiệu logic ở ngã vào còn lại qua cổng và bị đảo, khi ngã kiểm soát = 0, cổng đóng, ngã ra luôn bằng 1
Khi nối tất cả ngã vào của cổng NAND lại với nhau, nó hoạt động như một cổng đảo
Trang 13Tập thanh ghi
Chức năng và đặc điểm:
Chứa các thông tin tạm thời phục vụ cho hoạt động ở thời điểm hiện tại của CPU
Được coi là mức đầu tiên của hệ thống nhớ
Số lượng thanh ghi nhiều tăng hiệu năng của CPU
Có hai loại thanh ghi:
Các thanh ghi lập trình được
Các thanh ghi không lập trình được
Trang 14Phân loại thanh ghi
Thanh ghi tổng quát : chủ yếu dùng để lưu trữ dữ liệu trong quá trình thực thi CT, nhưng mỗi thanh ghi còn có 1
số chức năng riêng (AX, BX,
CX, DX)Thanh ghi điều khiển : các bit của nó qui định tác vụ của
các đơn vị chức năng của MT Thanh ghi trạng thái : lưu trữ
Trang 15Một số thanh ghi điển hình
Các thanh ghi địa chỉ
Bộ đếm chương trình PC (Program Counter)
Con trỏ dữ liệu DP (Data Pointer)
Con trỏ ngăn xếp SP (Stack Pointer)
Thanh ghi cơ sở và thanh ghi chỉ số (Base
Register & Index Register)
Các thanh ghi dữ liệu
Thanh ghi trạng thái
Trang 17Thanh ghi con trỏ dữ liệu
Chứa địa chỉ của ngăn nhớ
dữ liệu mà CPU muốn truy nhập
Thường có một số thanh ghi con trỏ dữ liệu
DP
Dữ liệu
Dữ liệu
Dữ liệu cần đọc/
ghi
Dữ liệu
Dữ liệu
Trang 18Ngăn xếp (Stack)
Ngăn xếp là vùng nhớ có cấu trúc LIFO (Last In - First Out)
Ngăn xếp thường dùng để phục
vụ cho chương trình con
Đáy ngăn xếp là một ngăn nhớ xác định
Đỉnh ngăn xếp là thông tin nằm ở
vị trí trên cùng trong ngăn xếp
Đỉnh ngăn xếp có thể bị thay đổi
Đỉnh ngăn xếp
Đáy Ngăn xếp
Trang 19Con trỏ ngăn xếp SP (Stack
Pointer)
Chứa địa chỉ của ngăn nhớ đỉnh ngăn xếp
Khi cất một thông tin vào ngăn xếp:
Nội dung của SP tự động giảm
Thông tin được cất vào ngăn nhớ được trỏ bởi SP
Khi lấy một thông tin ra khỏi ngăn xếp:
Thông tin được đọc từ ngăn nhớ được trỏ bởi SP
Nội dung của SP tự động tăng
Khi ngăn xếp rỗng, SP trỏ vào đáy
Đỉnh ngăn xếp
Đáy Ngăn xếp
SP
Trang 20Thanh ghi cơ sở và thanh ghi chỉ số
Thanh ghi cơ sở: chứa địa chỉ của ngăn nhớ cơ sở (địa chỉ cơ sở)
Thanh ghi chỉ số: chứa độ lệch địa chỉ giữa ngăn nhớ mà CPU cần truy nhập so với ngăn nhớ
Thanh ghi chỉ số
Trang 21Các thanh ghi dữ liệu
Chứa các dữ liệu tạm thời hoặc các kết quả trung gian
Cần có nhiều thanh ghi dữ liệu
Các thanh ghi số nguyên: 8, 16, 32, 64 bit
Các thanh ghi số dấu phẩy động
Thanh ghi AX (Accumulator register) : thanh ghi tích luỹ, dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit AH và AL AX ngoài chức năng lưu trữ dữ liệu, nó còn được CPU dùng trong phép toán số học như nhân, chia Thanh ghi AH là nửa cao của thanh ghi AX Thanh ghi AL là nửa thấp của thanh ghi AX
Thí dụ nếu AX=1234h thì AH=12h AL=34h
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Trang 22Các thanh ghi dữ liệu
Thanh ghi BX (Base register) : dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit BH và BL BX lưu giữ địa chỉ của 1 thủ tục hay biến, nó cũng được dùng thực hiện các phép dời chuyển
số học và dữ liệu.
Thanh ghi DX (Data register) : dài 16 bit nhưng nó cũng có thể chia làm 2 thanh ghi 8 bit DH và DL Thanh ghi DX : có vai trò đặc biệt trong phép nhân và phép chia ngoài chức năng lưu trữ
dữ liệu
CX (Counter register) : thanh ghi này dùng làm bộ đếm trong các vòng lặp Các lệnh tự động lặp lại và sau mỗi lần lặp giá trị
Trang 23Thanh ghi trạng thái(thanh ghi cờ)
Thanh ghi cờ là thanh ghi 16 bit nằm trong EU (Excution Unit) Tuy nhiên chỉ có 9 trong 16 bit được dùng còn lại 7 bit không dùng
Chứa các thông tin trạng thái của CPU
Các cờ phép toán: báo hiệu trạng thái của kết quả phép toán
Các cờ điều khiển: biểu thị trạng thái điều khiển của CPU
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
O: OverFlow flag D : Direction flag I : Interrupt flag
T : Trap flag S : Sign flag Z : Zero flag
A : Auxiliary flag P : Parity flag C : Carry flag
Trang 24Thanh ghi trạng thái(thanh ghi cờ)
Cờ ZF: được thiết lập lên 1 khi kết quả của phép toán bằng 0.
Cờ SF (cờ dấu): được thiết lập lên 1 khi kết quả phép toán nhỏ hơn 0
Cờ CF (cờ nhớ): được thiết lập lên 1 nếu phép toán có nhớ ra ngoài bit cao nhất cờ báo tràn với số không dấu.
Trang 25Thanh ghi trạng thái(thanh ghi cờ)
Cờ OF (cờ tràn): OF=1 khi kết quả bị tràn số (vượt qua khả năng lưu trữ), OF=0 kết quả không bị tràn
Cờ DF: xác định hướng theo chiều tăng/ giảm trong
Trang 26Các thanh ghi Segment
CPU có 4 thanh ghi segment dài 16 bit, các thanh ghi này không thể chia làm 2 thanh ghi 8 bit như 4 thanh ghi
AX,BX,CX và DX.
Các thanh ghi đoạn được sử dụng như là địa chỉ cơ sở của các lệnh trong chương trình, stack và dữ liệu
4 thanh ghi đoạn : CS (Code Segment), DS (Data Segment) ,
SS (Stack Segment) và ES (Extra Segment)
CS : chứa địa chỉ bắt đầu của code trong chương trình
DS : chứa địa chỉ của các biến khai báo trong chương trình
SS : chứa địa chỉ của bộ nhớ Stack dùng trong chương trình
ES : chứa địa chỉ cơ sở bổ sung cho các biến bộ nhớ
Trang 27Thanh ghi 32 bit
dài 32, 64 bit Ta ghi thêm E đứng trước tên các thanh ghi 16 bit
Trang 28Thanh ghi đoạn và sự hình thành địa chỉ
8086 sử dụng 20 bit để đánh địa chỉ bộ nhớ quản lý trên 1MB bộ nhớ Nhưng 8086 lại không có thanh ghi nào 20 bit, tất cả là 16 bit do
đó 1 thanh ghi chỉ có thể đánh địa chỉ tối đa là 64 KB bộ nhớ
Như vậy phải kết hợp 2 thanh ghi mới địa chỉ hoá toàn bộ bộ nhớ
8086 sử 1 trong các thanh ghi dùng chung và 1 trong các thanh ghi đoạn (CS,DS,SS,ES) để tạo thành 1 địa chỉ 20 bit
Địa chỉ 20 bit của bộ nhớ 1MB không thể chứa đủ trong các thanh ghi 16 bit của CPU 8086 bộ nhớ 1MB được chia ra thành các đoạn (segment) 64KB.
Địa chỉ trong các đọan 64KB chỉ có 16 bit nên CPU 8086 dễ dàng xử lý bằng các thanh ghi của nó
PHÂN ĐOẠN BỘ NHỚ : là cách dùng các thanh ghi 16 bit để
Trang 29Địa chỉ vật lý & địa chỉ luận lý
Địa chỉ 20 bits được gọi là địa chỉ vật lý
Địa chỉ vật lý dùng trong thiết kế các mạch giải mã địa chỉ cho bộ nhớ và xuất nhập
Còn trong lập trình , địa chỉ vật lý không thể dùng được mà nó được thay thế bằng địa chỉ luận lý (logic).
Trang 30Địa chỉ luận lý
Địa chỉ của 1 ô nhớ được xác định bởi 2
phần: Segment : offset
Offset: địa chỉ trong đoạn (độ dời)
Mỗi địa chỉ thành phần là 1 số 16 bit và được viết theo cách sau : Segment : offset
VD : B001 : 1235
Trang 31Sự hình thành địa chỉ
địa chỉ
tổng 1 địa chỉ cơ sở và 1 địa chỉ offset
địa chỉ offset nằm trong 1 thanh ghi chỉ số hay thanh ghi con trỏ
chỉ vật lý
Trang 32Cách tính địa chỉ vật lý từ địa chỉ luận lý
Địa chỉ vật lý = (segment*10h) + offset
VD : tính địa chỉ vật lý tương ứng địa chỉ luận lý B001:1235
Địa chỉ vật lý = B0010h + 1235h = B1245h
Trang 33 Do offset dài 16 bit nên chiều dài tối đa của mỗi đọan là 64K.
Mỗi ô nhớ chỉ có địa chỉ vật lý nhưng có thể có nhiều địa chỉ luận lý
VD : 1234:1234
1334:0234 1304:0534 Đều có chung địa chỉ vật lý 13574 ??
Trang 34Sự chồng chất các đoạn
64KB0000
FFFF
offset
Ô nhớ có địa chỉ segment:
offset
Trang 35Sự chồng chất các đoạn
Khi offset tăng 1 đơn vị thì địa chỉ vật lý tăng 1 địa chỉ hoặc là tăng 1 byte Như vậy có thể xem đơn vị của offset là byte
Khi giữ nguyên phần offset chỉ tăng phần segment Khi segment tăng 1 đơn vị thì địa chỉ vật lý tăng 10h địa chỉ hoặc là tăng 16 bytes
VD : ô nhớ có địa chỉ 0002Ah sẽ có địa chỉ logic
trong segment 0000 là 0000:002A
Trong segment 0001 là 0001:001A
Trong segment 0002 là 0002:000A
Trang 36Sự chồng chất các đoạn
Nếu vùng bộ nhớ nào càng có nhiều segment chồng chập lên nhau thì các ô nhớ trong đó càng có nhiều địa chỉ luận lý
Một ô nhớ có ít nhất 1 địa chỉ luận lý và nhiều nhất là 65536/16 = 4096 địa chỉ luận lý
Trang 373.2 Tập lệnh
Giới thiệu chung về tập lệnh
Mỗi bộ xử lý có một tập lệnh xác định
Tập lệnh thường có hàng chục đến hàng trăm lệnh
Mỗi lệnh là một chuỗi số nhị phân mà bộ xử
lý hiểu được để thực hiện một thao tác xác định
Các lệnh được mô tả bằng các ký hiệu gợi nhớ chính là các lệnh của hợp ngữ
Trang 38 Toán hạng nguồn: dữ liệu vào của thao tác
Toán hạng đích: dữ liệu ra của thao tác
Mã thao tác Địa chỉ của các toán hạng
Trang 39Số lượng địa chỉ toán hạng trong lệnh
Ba địa chỉ toán hạng:
2 toán hạng nguồn, 1 toán hạng đích
c = a + b
Từ lệnh dài vì phải mã hoá địa chỉ cho cả ba toán hạng
Được sử dụng trên các bộ xử lý tiên tiến
Hai địa chỉ toán hạng:
Một toán hạng vừa là toán hạng nguồn vừa là toán hạng đích; toán hạng còn lại là toán hạng nguồn
Trang 40Số lượng địa chỉ toán hạng trong
lệnh
Một địa chỉ toán hạng:
Một toán hạng được chỉ ra trong lệnh
Một toán hạng là ngầm định thường là thanh ghi (thanh chứa –accumulator)
Được sử dụng trên các máy ở các thế hệ trước
Trang 41Đánh giá về số địa chỉ toán hạng
Nhiều địa chỉ toán hạng
Chương trình có nhiều lệnh hơn
Nhận lệnh và thực hiện lệnh nhanh hơn
Trang 42Các lệnh chuyển dữ liệu
SET Chuyển các bit 1 vào toán hạng đích
xếp
POP Lấy nội dung đỉnh ngăn xếp đưa đến toán
Trang 43Các lệnh số học
ADD Cộng hai toán hạng
SUBTRACT Trừ hai toán hạng
MULTIPLY Nhân hai toán hạng
DIVIDE Chia hai toán hạng
ABSOLUTE Lấy trị tuyệt đối toán hạng
NEGATE Đổi dấu toán hạng (lấy bù 2)
INCREMENT Tăng toán hạng thêm 1
DECREMENT Giảm toán hạng đi 1
COMPARE Trừ hai toán hạng để lập cờ
Trang 44Các lệnh logic
AND Thực hiện phép AND hai toán hạng
OR Thực hiện phép OR hai toán hạng
XOR Thực hiện phép XOR hai toán hạng
NOT Đảo bit của toán hạng (lấy bù 1)
TEST Thực hiện phép AND hai toán hạng để lập cờ
SHIFT Dịch trái (phải) toán hạng
ROTATE Quay trái (phải) toán hạng
Trang 46Các lệnh chuyển điều khiển
JUMP (BRANCH) Lệnh nhảy không điều kiện:
nạp vào PC một địa chỉ xác định
JUMP CONDITIONAL Lệnh nhảy có điều kiện:
điều kiện đúng nạp vào PC một địa chỉ xác định
điều kiện sai không làm gì cả
CALL Lệnh gọi chương trình con:
Cất nội dung của PC (địa chỉ trở về) ra một vị trí xác định (thường ở Stack)
Nạp vào PC địa chỉ của lệnh đầu tiên của chương trình con
RETURN Lệnh trở về từ chương trình con:
Khôi phục địa chỉ trở về trả lại cho PC để trở về chương trình
Trang 47Các lệnh điều khiển hệ thống
HALT Dừng thực hiện chương trình
WAIT Tạm dừng thực hiện chương trình, lặp kiểm tra điều kiện cho đến khi thoả mãn thì tiếp tục thực hiện
NO OPERATION Không thực hiện gì cả
LOCK Cấm không cho xin chuyển nhượng bus
UNLOCK Cho phép xin chuyển nhượng bus
Trang 483.3 Hoạt động của CPU
Trang 49Nhận lệnh
CPU đưa địa chỉ của lệnh cần nhận từ bộ đếm chương trình PC ra bus địa chỉ
CPU phát tín hiệu điều khiển đọc bộ nhớ
Lệnh từ bộ nhớ được đặt lên bus dữ liệu và được CPU
copy vào thanh ghi lệnh IR
CPU tăng nội dung PC để trỏ sang lệnh kế tiếp
Trang 51Nhận dữ liệu
CPU đưa địa chỉ của toán hạng ra bus địa chỉ
CPU phát tín hiệu điều khiển đọc
Toán hạng được đọc vào CPU
Tương tự như nhận lệnh
Trang 52Nhận dữ liệu gián tiếp
CPU đưa địa chỉ ra bus địa chỉ
CPU phát tín hiệu điều khiển đọc
Nội dung ngăn nhớ được đọc vào CPU, đó
chính là địa chỉ của toán hạng
Địa chỉ này được CPU phát ra bus địa chỉ để tìm ra toán hạng
CPU phát tín hiệu điều khiển đọc
Toán hạng được đọc vào CPU
Trang 55 Nội dung của bộ đếm chương trình PC (địa chỉ trở về sau khi ngắt) được đưa ra bus dữ liệu
CPU đưa địa chỉ (thường được lấy từ con trỏ
ngăn xếp SP) ra bus địa chỉ
CPU phát tín hiệu điều khiển ghi bộ nhớ
Địa chỉ trở về trên bus dữ liệu được ghi ra vị trí xác định (ở ngăn xếp)
Địa chỉ lệnh đầu tiên của chương trình con
điều khiển ngắt được nạp vào PC
Trang 56Đường ống lệnh (Instruction
Pipelining)
Chia chu trình lệnh thành các công đoạn và cho phép thực hiện gối lên nhau (như dây chuyền lắp ráp)
Chẳng hạn có 6 công đoạn:
Nhận lệnh (Fetch Instruction - FI )
Giải mã lệnh (Decode Instruction - DI )
Tính địa chỉ toán hạng (Calculate Operand Address - CO )
Nhận toán hạng (Fetch Operands - FO )
Thực hiện lệnh (Execute Instruction - EI )
Trang 57Biểu đồ thời gian của đường ống lệnh
Trang 59Các kiến trúc song song mức
lệnh
Siêu đường ống (Superpipeline &
Hyperpipeline)
Siêu vô hướng (Superscalar)
VLIW (Very Long Instruction Word)
Trang 60Superpipeline
Trang 62CISC và RISC
CISC Complex Instruction Set Computer:
Máy tính với tập lệnh phức tạp
Các bộ xử lý truyền thống: x86, 680x0RISC Reduced Instruction Set Computer:
Máy tính với tập lệnh thu gọn
SunSPARC, Power PC,
Trang 63Các đặc trưng của RISC
Hỗ trợ các thao tác của ngôn ngữ bậc cao
Đều được thiết kế kiểu pipeline lệnh