You are on page 1of 20

Nội dung học phần

Chương 1. Giới thiệu chung


Chương 2. Hệ thống máy tính
Chương 3. Số học và logic máy tính
KIẾN TRÚC MÁY TÍNH Chương 4. Kiến trúc tập lệnh
Computer Architecture Chương 5. Bộ xử lý
Chương 6. Bộ nhớ máy tính
Course ID: IT3030
Chương 7. Hệ thống vào-ra
Chương 8. Các kiến trúc song song

Nguyễn Kim Khánh


NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 2

Kiến trúc máy tính Nội dung của chương 5

5.1. Tổ chức của CPU


5.2. Thiết kế bộ xử lý theo kiến trúc MIPS
Chương 5 5.3. Kỹ thuật đường ống lệnh và song song mức
BỘ XỬ LÝ lệnh

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 3 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 4
5.1. Tổ chức của CPU Sơ đồ cấu trúc cơ bản của CPU
1. Cấu trúc cơ bản của CPU
§ Nhiệm vụ của CPU: Đơn vị
Đơn vị
Tập
§ Nhận lệnh (Fetch Instruction): CPU đọc lệnh từ bộ nhớ số học
điều khiển thanh ghi
và logic
§ Giải mã lệnh (Decode Instruction): xác định thao tác mà (CU) (RF)
(ALU)
lệnh yêu cầu
§ Nhận dữ liệu (Fetch Data): nhận dữ liệu từ bộ nhớ hoặc
bus bên trong
các cổng vào-ra
§ Xử lý dữ liệu (Process Data): thực hiện phép toán số Đơn vị nối ghép bus (BIU)
học hay phép toán logic với các dữ liệu
§ Ghi dữ liệu (Write Data): ghi dữ liệu ra bộ nhớ hay cổng
bus điều khiển bus dữ liệu bus địa chỉ
vào-ra

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 5 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 6

2. Đơn vị số học và logic Mô hình kết nối ALU


§ Chức năng: Thực hiện các phép toán số học và
phép toán logic: Dữ liệu từ Dữ liệu đến
các thanh ghi các thanh ghi
§ Số học: cộng, trừ, nhân, chia, đảo dấu
§ Logic: AND, OR, XOR, NOT, phép dịch bit Đơn vị
số học và logic
Các tín hiệu (ALU)
từ đơn vị
điều khiển

Thanh ghi cờ

Thanh ghi cờ: hiển thị trạng thái của kết quả phép toán

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 7 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 8
3. Đơn vị điều khiển Mô hình kết nối đơn vị điều khiển
§ Chức năng
§ Điều khiển nhận lệnh từ bộ nhớ đưa vào CPU
§ Tăng nội dung của PC để trỏ sang lệnh kế tiếp Thanh ghi lệnh
§ Giải mã lệnh đã được nhận để xác định thao tác mà lệnh
yêu cầu Các tín hiệu
Các cờ
§ Phát ra các tín hiệu điều khiển thực hiện lệnh điều khiển
bên trong CPU
§ Nhận các tín hiệu yêu cầu từ bus hệ thống và đáp ứng Đơn vị điều khiển
với các yêu cầu đó. Clock

Các tín hiệu Các tín hiệu


điều khiển từ điều khiển đến
bus hệ thống bus hệ thống
Bus điều khiển

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 9 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 10

Các tín hiệu đưa đến đơn vị điều khiển Các tín hiệu phát ra từ đơn vị điều khiển
§ Clock: tín hiệu nhịp từ mạch tạo dao động bên § Các tín hiệu điều khiển bên trong CPU:
ngoài § Điều khiển các thanh ghi
§ Lệnh máy từ thanh ghi lệnh đưa đến để giải mã § Điều khiển ALU
§ Các cờ từ thanh ghi cờ cho biết trạng thái của CPU § Các tín hiệu điều khiển bên ngoài CPU:
§ Các tín hiệu yêu cầu từ bus điều khiển § Điều khiển bộ nhớ
§ Điều khiển các mô-đun vào-ra

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 11 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 12
Các phương pháp thiết kế đơn vị điều khiển Đơn vị điều khiển vi chương trình
§ Đơn vị điều khiển vi chương trình n Bộ nhớ vi chương trình
(ROM) lưu trữ các vi
(Microprogrammed Control Unit) Thanh ghi lệnh

chương trình
§ Đơn vị điều khiển nối kết cứng (Hardwired Control
Các tín hiệu
(microprogram) điều khiển từ
bus hệ thống
Bộ giải mã

Unit) n Một vi chương trình bao Clock Mạch dãy Thanh ghi địa chỉ vi lệnh

gồm các vi lệnh Các cờ

(microinstruction)
Bộ nhớ
n Mỗi vi lệnh mã hoá cho vi chương trình

một vi thao tác Vi lệnh


(microoperation) tiếp
theo
Thanh ghi đệm vi lênh

n Để hoàn thành một lệnh


cần thực hiện một hoặc Bộ giải mã vi lệnh

một vài vi chương trình Tín hiệu điều


khiển bên trong
Tín hiệu điều
khiển đến bus hệ

n Tốc độ chậm CPU thống

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 13 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 14

Đơn vị điều khiển nối kết cứng 4. Hoạt động của chu trình lệnh

n Sử dụng mạch cứng Thanh ghi lệnh Chu trình lệnh


để giải mã và tạo
các tín hiệu điều § Nhận lệnh
Bộ giải mã
khiển thực hiện § Giải mã lệnh
lệnh T1 § Nhận toán hạng
Mạch
n Tốc độ nhanh Clock phân
T2
Đơn vị ..
. Các § Thực hiện lệnh
..
chia thời . điều khiển cờ
n Đơn vị điều khiển gian § Cất toán hạng
phức tạp Tn
§ Ngắt
C0 C1 ... C
m-1

Các tín hiệu điều khiển

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 15 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 16
Giản đồ trạng thái chu trình lệnh Tính địa chỉ của lệnh
§ PC chứa địa chỉ của lệnh sẽ được nhận vào
§ Với MIPS:
Nhận lệnh Nhận Cất
toán hạng toán hạng
§ Tuần tự: PC = PC + 4
Nhiều Nhiều § Rẽ nhánh (đk đúng): PC = PC + imm x 4
toán toán
hạng hạng § Chú ý: PC đã được tăng thêm 4 từ trước đó

Tính Giải mã Tính Tính ngắt § Nhảy: PC = PC31-28: (26bit địa chỉ) : 00
địa chỉ Thao tác Kiểm tra
thao tác địa chỉ địa chỉ Ngắt
của lệnh dữ liệu ngắt
lệnh toán hạng toán hạng

Không
Lệnh hoàn thành, Quay lại với dữ liệu ngắt
nhận lệnh tiếp theo String hoặc Vector

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 17 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 18

Nhận lệnh Sơ đồ mô tả quá trình nhậ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
§ CPU phát tín hiệu điều khiển đọc bộ nhớ PC

§ Lệnh từ bộ nhớ được đặt lên bus dữ liệu và được


CPU copy vào thanh ghi lệnh IR Đơn vị
Bộ nhớ
điều khiển
§ CPU tăng nội dung PC để trỏ sang lệnh kế tiếp

IR

PC: Bộ đếm chương trình Bus Bus Bus


IR: Thanh ghi lệnh địa dữ điều
chỉ liệu khiển

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 19 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 20
Giải mã lệnh Tính địa chỉ toán hạng
§ Lệnh từ thanh ghi lệnh IR được đưa đến đơn vị § Với MIPS: lệnh lw/ lh/ lb
điều khiển lw rt, imm(rs) #(rt) = mem[(rs)+imm]
§ Đơn vị điều khiển tiến hành giải mã lệnh để xác
định thao tác phải thực hiện
Địa chỉ toán hạng = (rs) + imm
§ Giải mã lệnh xảy ra bên trong CPU

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 21 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 22

Nhận dữ liệu từ bộ nhớ Sơ đồ mô tả nhận dữ liệu từ bộ nhớ


§ 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 CPU
MAR
§ Toán hạng được đọc vào CPU
§ Tương tự như nhận lệnh
Đơn vị
Bộ nhớ
điều khiển

MBR

MAR: Thanh ghi địa chỉ bộ nhớ Bus Bus Bus


MBR: Thanh ghi đệm bộ nhớ địa dữ điều
chỉ liệu khiển

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 23 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 24
Thực hiện lệnh Tính địa chỉ toán hạng
§ Có nhiều dạng tuỳ thuộc vào lệnh § Với MIPS: lệnh sw/ sh/ sb
§ Có thể là: sw rt, imm(rs) # mem[(rs)+imm]= rt
§ Đọc/Ghi bộ nhớ
§ Vào/Ra Địa chỉ toán hạng = (rs) + imm
§ Chuyển giữa các thanh ghi
§ Phép toán số học/logic
§ Chuyển điều khiển (rẽ nhánh)
§ ...

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 25 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 26

Ghi toán hạng Sơ đồ mô tả quá trình ghi toán hạng


§ CPU đưa địa chỉ ra bus địa chỉ
§ CPU đưa dữ liệu cần ghi ra bus dữ liệu CPU

§ CPU phát tín hiệu điều khiển ghi MAR

§ Dữ liệu trên bus dữ liệu được copy đến vị trí xác


định Đơn vị
điều khiển
Bộ nhớ

MBR

MAR: Thanh ghi địa chỉ bộ nhớ Bus Bus Bus


MBR: Thanh ghi đệm bộ nhớ địa dữ điều
chỉ liệu khiển

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 27 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 28
Ngắt Sơ đồ mô tả chu trình ngắt
§ 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
SP MAR
§ CPU đưa địa chỉ (thường được lấy từ con trỏ ngăn
xếp SP) ra bus địa chỉ PC

Đơn vị
§ CPU phát tín hiệu điều khiển ghi bộ nhớ điều khiển
Bộ nhớ

§ Địa chỉ trở về trên bus dữ liệu được ghi ra vị trí xác
định (ở ngăn xếp) MBR

§ Đị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 MAR: Thanh ghi địa chỉ bộ nhớ
MBR: Thanh ghi đệm bộ nhớ
Bus Bus Bus
địa dữ điều
PC: Bộ đếm chương trình
chỉ liệu khiển
SP: Con trỏ ngăn xếp

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 29 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 30

5.2. Thiết kế bộ xử lý theo kiến trúc MIPS Tổng quan quá trình thực hiện các lệnh
§ Chỉ thực hiện với một số lệnh cơ bản của MIPS, § Hai bước đầu tiên với mỗi lệnh:
nhưng chỉ ra hầu hết các khía cạnh: § Đưa địa chỉ từ bộ đếm chương trình PC đến bộ nhớ
§ Các lệnh tham chiếu bộ nhớ: lw, sw lệnh, tìm và nhận lệnh từ bộ nhớ này
§ Các lệnh số học/logic: add, sub, and, or, slt § Sử dụng các số hiệu thanh ghi trong lệnh để chọn và
§ Các lệnh chuyển điều khiển: beq, j đọc một hoặc hai thanh ghi:
§ Lệnh lw: đọc 1 thanh ghi
§ Các lệnh khác (không kể lệnh jump): đọc 2 thanh ghi

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 31 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 32
Tổng quan quá trình thực hiện các lệnh (tiếp) Tổng quan quá trình thực hiện các lệnh (tiếp)

§ Các bước tiếp theo tùy thuộc vào loại lệnh: § Thay đổi nội dung bộ đếm chương trình PC:
§ Sử dụng ALU hoặc bộ cộng Add để: § Với các lệnh rẽ nhánh (branch), tùy thuộc vào kết quả
§ Tính kết quả phép toán với các lệnh số học/logic so sánh:
§ So sánh các toán hạng với lệnh branch § Điều kiện thỏa mãn: PC ß địa chỉ đích (địa chỉ của lệnh cần rẽ
§ Tính địa chỉ đích với các lệnh branch tới)
§ Tính địa chỉ ngăn nhớ dữ liệu với lệnh load/store § Điều kiện không thỏa mãn: PC ß PC + 4 (địa chỉ của lệnh kế

§ Truy cập bộ nhớ dữ liệu với lệnh load/store tiếp)


§ Lệnh lw: đọc dữ liệu từ bộ nhớ § Với các lệnh còn lại (không kể các lệnh jump)
§ Lệnh sw: ghi dữ liệu ra bộ nhớ § PC ß PC + 4 (địa chỉ của lệnh kế tiếp)
§ Ghi dữ liệu đến thanh ghi đích:
§ Các lệnh số học/logic: kết quả phép toán
§ Lệnh lw: dữ liệu được đọc từ bộ nhớ dữ liệu

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 33 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 34

Sơ đồ khái quát của bộ xử lý MIPS Sử dụng bộ chọn kênh (MUX)

n Không thể nối trực


tiếp tại các vị trí được
đánh dấu
n Sử dụng MUX

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 35 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 36
Bộ xử lý với các đường điều khiển chính 1. Thiết kế Datapath
§ Datapath: gồm các thành phần để xử lý dữ liệu và
địa chỉ
§ Tập thanh ghi, ALUs, MUX’s, bộ nhớ, …
§ Sẽ xây dựng tăng dần Datapath cho MIPS

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 37 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 38

rocessor
252
Các thành phần để thực hiện nhận lệnh Thực hiện phần nhận lệnh
252Chapter 4 The Processor
Chapter 4 The Processor

n
Instruction Instruction
address address

Instruction PC Instruction Add SumInstruction PCAdd Sum Add Sum


PC

on Instruction Instruction
memory memory

a. Instruction memory b. Program counter c. Adder


mory
n Bộb.đếm
Program
chương
a. Instruction
counter
trình
memoryc. Adder
PC:b. Program counter c. Adder
FIGURE 4.5 Two state elements are needed to store and access instructions, and an
FIGURE 4.5 Two state elements are needed to store and access instructions, and an
and an the next instruction address. The state elements are the instruction
o compute the nextninstruction Thanh ghi 32-bit chứa địa chỉ của lệnh hiện tại
state elements are needed to store and access
adder is needed to compute
address.
adder
memory
The statecounter.
elements
is needed to compute
instructions,
the next
and
Theare
instruction
thethe
program address.
counter.
instruction
The state elements
The instruction memory need are the instruction
only provide read access because the
memory and the program datapath does instruction memory need
not write instructions. Sinceonly provide read
the instruction accessonly
memory because
reads, the
we treat it as combinational Increment by 4
ogram counter. The instruction datapath
memorydoes neednotonly
writeprovide readSince
access because thememory
n Địa chỉ khởi động = 0xBFC0 0000
ite instructions. Since the instruction memory
logic: the output only
instructions.
at anyreads, weects
timecontrol
refl treat
the it as
the instruction
combinational
contents of the location
only
specifi ed
reads,
by the
we treat
address
it as combinational
logic: the output at any time reflects the contents of the location specified by the address input, and no read
input, and no read
signal is needed. (We will need to write the instruction memory when we load the program; this is
for next
ny time reflects the contents of the location
control signalspecifi ed by(We
is needed. the
notaddress
will
hardneed input,
andand
to write
to add, no
theignore
we read
instruction memory when
it for simplicity.) we loadcounter
The program the program; thisregister
is a 32-bit is that is written at the
instruction
ed. (We will need Bộ nhớ lệnh (Instruction memory):
nto write the instruction
end of every
we ignore it for simplicity.) The program
memory
not hard to add, and we
clockiscycle
counter
when
ignoreweitoffor
end
andadd
a 32-bit thus
load
itsdoes
register
theclock
not
twothat
program;
simplicity.)
every
need
Theand
cycle this
program
a write
is inputs
32-bit written and
is does
thus
atcontrol
counter
the thesignal.
place
is a 32-bit
not need
sum onThits
e adder
register
a write controlthat is written
signal. at the
The adder
is an ALU wired to always
output.
is an ALU wired to always
32-bit
addcontrol
its two 32-bit
signal.inputs and place theALU
sum wired
on its output. register
cle and thus does not need a write
n Chứa các lệnh của chương trình
uts and place the sum on its output.
The adder is an to always

n Khiwhich
có địa chỉ lệnh
were introduced
từwere
which PCisintroduced
in Chapter
instruction
đưa
add
đến
2. Recall
thì lệnh
in Chapter
that a typical
$t1,$t2,$t3,
được
2. Recall thatđọc
instance
which
raaninstance
a typical
of such
reads $t2 and $t3
of such an
and writes $t1.
instruction is add $t1,$t2,$t3, which reads $t2 and registers andare
writes
n Bộ 2.cộng fiele(Add): được sử
file. Adụng fităng nộiin$t3
dung PC thêm 4 can be
The processor’s 32 general-purpose $t1.
stored in a structure called a
roduced in Chapter Recall that a typical instance of such an
registerTh processor’s
A state 32register
general-purpose registers
register le isare stored
a collection ofa registers
structure incalled
which aany register
ddregister
$t1,$t2,$t3, which
element reads
that $t2
consists and $t3 and writesby $t1.
r’selement để trỏ
file A state
32 general-purpose
that consists a set tới
register
of registers
read
lệnh
file.
are
of registers
or written stored
that kếincontains
A register
tiếp
read
fileoriswritten
a collection
a structure
by specifying thenumber
the
specifying
called
register
of registers
state
of
the number
a ofregister
the
in whichofany
the computer.
the register in
In Th
in the file. addition,
e register
thebefile. The register file
can
wefiwill
le need an ALU to
egister file
of a set of registers that can contains
is aNKK-CA2021.1.0
collection beofread and written
registers
the in which
register any
operate
state of register
IT3030-Kiến
on
thethe can
trúc
values
computer. máybetính from the registers.
readIn addition, we will need an ALU to 39 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 40
by supplying a register
bycan be read andthe
specifying written
number of the
operate
number to beon register in the fi le.
R-formatTh e register
instructions
the values read from the registers.
accessed. fi le have three register operands, so we will need to read two
by supplying a register
ister state of the computer.R-format In addition, wedata
instructionswill words
haveneed from
three the register
anregister
ALU to file and
operands, so write
we willone datatoword
need readinto
two the register file for
Thực hiện lệnh số học/logic kiểu R 310 Các thành phần thực hiện lệnh kiểu R
Chapter 4 The Processor

5 Read ALU operation


4
register 1
op rs rt rd shamt funct Read
Register 5 Read data 1
31:26 25:21 20:16 15:11 10:6 5:0 numbers register 2 Zero
Data ALU ALU
5 Registers
Write result
register
§ bits 31:26: mã thao tác (opcode) Read
data 2
Write
Data
Data
§ 000000 với các lệnh kiểu R
RegWrite
§ bits 25:21: số hiệu thanh ghi nguồn thứ nhất rs
n Tập thanh ghi (Registers): có 32 thanh ghi b.32-bit,
a. Registers ALU
mỗi thanh ghi
§ bits 20:16: số hiệu thanh ghi nguồn thứ hai rt đượcregister
xác file
định bởi số hiệu 5-bit
FIGURE 4.7 The two elements needed to implement R-format ALU operations are the
and the ALU. The register file contains all the registers and has two read ports and one write

§ bits 15:11: số hiệu thanh ghi đích rd n Read register 1, Read register 2: các đầu vào đểAppendix
port. The design of multiported register files is discussed in Section C.8 of
chọnC.các thanh ghi cần đọc
The register file
always outputs the contents of the registers corresponding to the Read register inputs on the outputs; no
n Write register: đầu vào để chọn thanh ghi cần ghi
other control inputs are needed. In contrast, a register write must be explicitly indicated by asserting the
§ bits 10:6: số bit được dịch với các lệnh dịch bit write control signal. Remember that writes are edge-triggered, so that all the write inputs (i.e., the value to
n Read data 1, Read data 2: hai đầu ra dữ liệu đọc từ thanh ghi (32-bit)
be written, the register number, and the write control signal) must be valid at the clock edge. Since writes to
the register file are edge-triggered, our design can legally read and write the same register within a clock cycle:
§ 00000 với các lệnh khác n Write
the read Data:
will get theđầu vào dữ
value written liệu clock
in an earlier ghicycle,
vàowhilethanh
the valueghi (32-bit)
written will be available to a read in
a subsequent clock cycle. The inputs carrying the register number to the register file are all 5 bits wide, whereas
§ bits 5:0: mã hàm để xác định phép toán (function code) n RegWrite:
the lines carrying tín hiệu điều khiển ghi dữ liệu vào thanh
data values are 32 bits wide. The operation to be performed
the ALU operation signal, which will be 4 bits wide, using the ALU designed in
by ghi
the ALU is controlled with
Appendix C. We will
n ALU use
đểthethực hiện các phép toán số học/logic
Zero detection output of the ALU shortly to implement branches. The overflow output will not be
needed until Section 4.9, when we discuss exceptions; we omit it until then.

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 41 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 42

sign-extend To increase In addition, we will need a unit to sign-extend the 16-bit offset field in the
the size of a data item by instruction to a 32-bit signed value, and a data memory unit to read from or write
replicating the high-order to. The data memory must be written on store instructions; hence, data memory
sign bit of the original has read and write control signals, an address input, and an input for the data to be
data item in the high-
written into memory. Figure 4.8 shows these two elements.
Mô tả thực hiện lệnh số học/logic kiểu R Thực hiện các lệnh lw/sw
order bits of the larger,
destination data item. The beq instruction has three operands, two registers that are compared
for equality, and a 16-bit offset used to compute the branch target address
branch target address relative to the branch instruction address. Its form is beq $t1,$t2,offset. To
§ Hai số hiệu thanh ghi rs và rt đưa đến hai đầu vào Read The address specified in
a branch, which becomes
implement this instruction, we must compute the branch target address by adding
the sign-extended offset field of the instruction to the PC. There are two details
the new program counter op rs of branchrtinstructions imm
register 1, Read register 2 để chọn hai thanh ghi nguồn (PC) if the branch is
in the definition (see Chapter 2) to which we must pay
taken. In the MIPS attention:
§ Số hiệu thanh ghi rd đưa đến đầu vào Write register để architecture the branch
31:26 25:21 20:16 15:0
■The instruction set architecture specifies that the base for the branch address
target is given by the
chọn thanh ghi đích sum of the offset field of §
calculation is the address of the instruction following the branch. Since we
bits 31:26 là mã thao tác
compute PC + 4 (the address of the next instruction) in the instruction fetch
the instruction and the
§ Hai dữ liệu từ hai thanh ghi nguồn được đọc ra 2 đầu ra address of the instruction
following the branch.
§ 100011
datapath, (35) vớitolệnh
it is easy
target address.
lw value as the base for computing the branch
use this

101011 (43) với lệnh sw


Read data 1 và Read data 2 , rồi đưa đến đầu vào của ALU §

§ bits 25:21: số hiệu thanh ghi cơ sở rs


§ ALU operation (4-bit): tín hiệu điều khiển chọn phép toán ở
§ bits 20:16: số hiệu thanh ghi rt
ALU § thanh ghi đích với lệnh lw
§ ALU thực hiện phép toán tương ứng, kết quả phép toán ở § thanh ghi nguồn với lệnh sw
đầu ra ALU result được đưa về đầu vào Write Data của tập § bits 15:0: hằng số imm có giá trị trong dải [-215 , +215 – 1]
thanh ghi để ghi vào thanh ghi đích § Địa chỉ từ nhớ dữ liệu = nội dung thanh ghi rs + imm
§ RegWrite: tín hiệu điều khiển ghi dữ liệu vào thanh ghi đích § lw rt, imm(rs) #(rt) = mem[(rs)+SignExtImm]
§ sw rt, imm(rs) #mem[(rs)+SignExtImm] = (rt)

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 43 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 44
Các thành phần thực hiện các lệnh lw/sw Thực hiện lệnh lw
Chapter 4 The Processor
§ Số hiệu thanh ghi rs đưa đến đầu vào Read register 1 để
Tập thanh ghi Bộ số học/logic
chọn thanh ghi cơ sở rs, nội dung rs được đưa ra đầu ra
5 Read
register 1 Read
4
ALU operation
Read Data 1, rồi chuyển đến ALU
5 data 1
Register
numbers
Read
register 2 Zero § Hằng số imm 16-bit đưa đến bộ Sign-extend để mở rộng
Data ALU ALU
5 Write
register
Registers
result thành 32-bit, rồi chuyển đến ALU
Read

Data
Write
Data
data 2
§ ALU cộng hai giá trị trên đưa ra ALU result chính là địa chỉ
4.3 Building a Datapath 311
RegWrite của dữ liệu cần đọc từ bộ nhớ dữ liệu; địa chỉ này được đưa
a. Registers Bộ nhớ dữ liệu
b. ALU Bộ mở rộng số có dấu từ 16- đến đầu vào Address của bộ nhớ dữ liệu
bit à 32-bit
FIGURE 4.7 The two elements needed to implement R-format ALU MemWrite
operations are the
register file and the ALU. The register file contains all the registers and has two read ports and one write
§ Số hiệu thanh ghi rt đưa đến đầu vào Write Register để
port. The design of multiported register files is discussed in Section C.8 of Appendix C. The register file
always outputs the contents of the registers corresponding to the Read register inputs Read
Address
on the outputs; no chọn thanh ghi đích
other control inputs are needed. In contrast, a register write must be explicitly indicated data
by asserting the
write control signal. Remember that writes are edge-triggered, so that all the write inputs (i.e., the value to
be written, the register number, and the write control signal) must be valid at the clock edge. Since writes to
16
Sign-
32 § Dữ liệu 32-bit ở bộ nhớ dữ liệu, tại vị trí địa chỉ đã được
Data
the register file are edge-triggered, our design can legally read and write the same register within a clock cycle:
the read will get the value written in an earlier clock cycle, while the value written will be available to a read in
extend tính, được đọc ra ở đầu ra Read data của bộ nhớ dữ liệu
Write memory
nhờ tín hiệu điều khiển MemRead, rồi đưa về đầu vào
a subsequent clock cycle. The inputs carrying the register number to the register file are all 5 bits wide, whereas
data
the lines carrying data values are 32 bits wide. The operation to be performed by the ALU is controlled with
the ALU operation signal, which will be 4 bits wide, using the ALU designed in Appendix C. We will
use the Zero detection output of the ALU shortly to implement branches. The overflow output will not be
needed until Section 4.9, when we discuss exceptions; we omit it until then.
Write Data của tập thanh ghi để ghi vào thanh ghi đích rt
MemRead
NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 45 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 46
a. Data memory unit b. Sign extension unit
increase In addition, we will need a unit to sign-extend the 16-bit offset field in the
item by FIGURE
instruction to a 32-bit signed 4.8
value, andThe
a datatwo unitsunit
memory needed
to readto implement
from or write loads and stores, in addition to the
igh-order to. The data memory must register file and
be written ALUinstructions;
on store of Figure 4.7, hence,aredata
thememory
data memory unit and the sign extension unit.
iginal has read and write control
high-
Thesignals,
memory an address
unit is ainput, and an input
state element with for the for
inputs datathe
to address
be and the write data, and a single output for
larger,
written into memory. Figure 4.8 shows
the read result. these
Theretwoare elements.
separate read and write controls, although only one of these may be asserted on

Thực hiện lệnh sw Thực hiện lệnh Branch (beq, bne)


item. The beq instructionany hasgiven
three operands,
clock. The memorytwo registers
unit needs that are signal,
a read compared
since, unlike the register file, reading the value of an
for equality, and a 16-bit offset
invalid usedcan
address tocause
compute the branch
problems, as we willtarget
see inaddress
Chapter 5. The sign extension unit has a 16-bit input that
ddress relative to the branch instruction address.
is sign-extended Itsa form
into beq appearing
32-bitisresult $t1,$t2,offset . To (see Chapter 2). We assume the data memory is
on the output
cified in implement this instruction, we must compute theStandard
branch target address
chipsbyactually
addinghave a write enable signal that is used for writes.
becomes
m counter
the § Số hiệu thanh ghi rs đưa đến đầu vào Read register 1 để
edge-triggered
sign-extended offsetAlthough
field of the
for writes.
the instruction
write enabletois the
notPC.
memory
There are two
edge-triggered, ourdetails
edge-triggered design could easily be adapted to work
in the definition of branch
with instructions
real memory(see Chapter 2) to C.8
which of we must pay C for further discussion of how real memory imm
ch is
attention:chọn thanh ghi cơ sở rs, nội dung rs được đưa ra đầu ra
chips. See Section Appendix 4 or 5 rs rt
PS chips work.
branch
y the Read Data 1, rồi chuyển đến ALU
■ The instruction set architecture specifies that the base for the branch address
calculation is the address of the instruction following the branch. Since we
31:26 25:21 20:16 15:0
t field of
nd the
struction
Hằng số imm 16-bit đưa đến bộ Sign-extend để mở rộng
§ compute PC + 4 (the address
■ The ofarchitecture also in
the next instruction) states that thefetch
the instruction
datapath, it is easy to use this value as the base for computing the branch
offset field is shifted left 2 bits so that it § bits 31:26 mã thao tác
is a word offset; this shift increases the effective range of the offset field by a
anch.
thành 32-bit,factor
target address.
rồi chuyển
of 4. đến ALU § 000100 (4) với lệnh beq
§ ALU cộngTohai dealgiá
withtrịthetrên đưa ra ALU
latter complication, we result
will needchính là địa
to shift the offsetchỉ
field by 2. branch taken A branch § 000101 (5) với lệnh bne
where the branch
của vị trí the
ở bộAs well as computing the branch target address, we must also determine whether
nhớ dữ liệu; địa chỉ này được đưa đến đầu § bits
condition is satisfied and 25:21 số hiệu thanh ghi nguồn rs
next instruction is the instruction that follows sequentially or the instruction
vào Addressat thecủa
branchbộtarget
nhớaddress.
dữ liệu When the condition is true (i.e., the operands are § bits 20:16 số hiệu thanh ghi nguồn rt
the program counter (PC)
becomes the branch target.
equal), the branch target address becomes the new PC, and we say that the branch
§ Số hiệu thanh
is taken.ghi rt đưa
If the operandsđếnaređầu vào Read
not equal, registerPC
the incremented 2 should
để replace the All unconditional bits 15:0 hằng số imm có giá trị trong
§ branches dải [-215 , +215 – 1]
are taken branches.
chọn thanh ghi dữ liệu nguồn rt, nội dung rt được đưa rawe say that the
current PC (just as for any other normal instruction); in this case, § So sánh nội dung hai thanh ghi rs và rt:
branch is not taken. branch not taken or
đầu ra ReadThus, datathe2branch datapath must do two operations: compute the branch target (untaken branch) § Nếu điều kiện đúng: rẽ nhánh đến nhãn đích
A branch where the
§ Dữ liệu 32-bit
address này sẽ được
and compare the đưa
registerđến đầu (Branches
contents. vào Write also data củainstruction
affect the
branch condition is false
§ PC ß (PC +4) + hằng số x 4
fetch portion of the datapath, as we will deal with shortly.) Figure 4.9 shows the
bộ nhớ dữ liệu và được ghi segment
vào vị that
trí nhớ § Nếu điều kiện sai: chuyển sang thực hiện lệnh kế tiếp
handlescó địa chỉTođã đượcthe branch and the program counter
structure of the datapath branches. compute (PC) becomes the address
§ PC ß PC + 4
tính, nhờ tín hiệu điều khiển MemWrite
target address, the branch datapath includes a sign extension unit, from Figure 4.8 of the instruction that
NKK-CA2021.1.0
and an adder. To perform the compare, we need to use the register file shown
IT3030-Kiến trúc máy tính 47
in sequentially follows the
NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 48
Figure 4.7a to supply the two register operands (although we will not need to write branch.
into the register file). In addition, the comparison can be done using the ALU we
Các thành phần thực hiện lệnh Branch Thực hiện lệnh Branch (beq, bne)
§ Nhờ các số hiệu thanh ghi rs và rt, hai toán hạng nguồn
được đọc ra đưa đến ALU
Just
re-routes § ALU trừ hai toán hạng và thiết lập giá trị ở đầu ra “Zero”
wires § Hiệu = 0 à đầu ra Zero = 1
§ Hiệu <> 0 à đầu ra Zero = 0
§ Đầu ra Zero này được đưa đến mạch logic điều khiển rẽ nhánh

§ Bộ cộng Add tính địa chỉ đích rẽ nhánh


§ Hằng số imm 16-bit được mở rộng theo kiểu có dấu thành 32-bit,
rồi dịch trái 2 bit
§ Cộng với PC (PC đã được tăng 4)
à Địa chỉ đích = (PC+4) + (hằng số đã mở rộng 32-bit, dịch trái 2 bit)
§ Điều kiện đúng: PC ß địa chỉ đích rẽ nhánh (rẽ nhánh xảy
Sign-bit wire ra)
replicated
§ Điều kiện sai: PC ß PC+4 (chuyển sang lệnh kế tiếp)
NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 49 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 50

Hợp các thành phần cho các lệnh Datapath cho các lệnh R-Type/Load/Store
§ Datapath cho các lệnh thực hiện trong 1 chu kỳ
§ Mỗi phần tử của datapath chỉ có thể làm một chức năng
trong mỗi chu kỳ
§ Do đó, cần tách rời bộ nhớ lệnh và bộ nhớ dữ liệu
§ Sử dụng các bộ chọn kênh để chọn dữ liệu nguồn
cho các lệnh khác nhau

• ALUSrc: tín hiệu điều khiển chọn toán hạng đưa đến ALU:
• Lệnh kiểu R: toán hạng từ thanh ghi nguồn thứ hai
• Lệnh lw/sw: Hằng số imm 16-bit được mở rộng thành 32-bit (tính địa chỉ)
• MemtoReg: tín hiệu điều khiển chọn dữ liệu đưa về thanh ghi đích:
• Lệnh kiểu R: lấy kết quả từ ALU result
• Lệnh lw: dữ liệu đọc (Read data) từ bộ nhớ dữ liệu
NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 51 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 52
Datapath đơn giản cho các lệnh R/lw/sw/branch 2. Thiết kế Control Unit
§ Đơn vị điều khiển có hai phần:
§ Bộ điều khiển ALU
§ Bộ điều khiển chính

• PCSrc: tín hiệu điều khiển chọn giá trị cập nhật PC
• Không rẽ nhánh: PC ß PC+4
• Rẽ nhánh: PC ß (PC+4) + (hằng số imm đã mở rộng thành 32-bit << 2)
NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 53 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 54

Thiết kế bộ điều khiển ALU Tín hiệu điều khiển ALU


§ ALU được sử dụng để: § Bộ điều khiển ALU sử dụng mạch logic tổ hợp:
§ Load/Store: F = add (xác định địa chỉ bộ nhớ dữ liệu) § Đầu vào: 2-bit ALUOp được tạo ra từ opcode của lệnh
§ Branch: F = subtract (so sánh) và 6-bit của function code
§ Các lệnh số học/logic : F phụ thuộc vào funct code § Đầu ra: các tín hiệu điều khiển ALU (ALU control) gồm 4
bit

ALU control lines Function Opcode ALUOp Operation funct ALU function ALU control
lw 00 load word XXXXXX add 0010
0000 AND
sw 00 store word XXXXXX add 0010
0001 OR beq 01 branch equal XXXXXX subtract 0110
0010 add R-type 10 add 100000 add 0010

0110 subtract subtract 100010 subtract 0110


AND 100100 AND 0000
0111 set-on-less-than
OR 100101 OR 0001
1100 NOR set-on-less-than 101010 set-on-less-than 0111

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 55 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 56
Thiết kế bộ điều khiển chính Datapath và Control Unit
§ Các tín hiệu điều khiển được tạo ra từ lệnh

R-type 0 rs rt rd shamt funct


31:26 25:21 20:16 15:11 10:6 5:0

lw/sw 35 or 43 rs rt imm
31:26 25:21 20:16 15:0

beq 4 rs rt imm
31:26 25:21 20:16 15:0

opcode always read, write for sign-extend


read except R-type and and add
for load load

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 57 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 58

Các tín hiệu điều khiển Các tín hiệu điều khiển (tiếp)

Tên tín hiệu Hiệu ứng khi tín hiệu = 0 Hiệu ứng khi tín hiệu = 1
RegDst Số hiệu thanh ghi đích là các bit Số hiệu thanh ghi đích là các bit 15:11 (rd) Tên tín hiệu Hiệu ứng khi tín hiệu = 0 Hiệu ứng khi tín hiệu = 1
20:16 (rt) MemRead Không làm gì cả Nội dung ngăn nhớ dữ liệu, được xác định
Branch Không có lệnh rẽ nhánh beq Có lệnh rẽ nhánh beq bởi địa chỉ do ALU tính, được đưa ra đầu
(Branch =1) & (Zero=1): rẽ nhánh xảy ra ra Read data của bộ nhớ dữ liệu
(Branch =1) & (Zero=0): rẽ nhánh không
xảy ra MemWrite Không làm gì cả Dữ liệu trên đầu vào Write Data của bộ
RegWrite Không làm gì cả Ghi dữ liệu trên đầu vào Write Data ở tập nhớ dữ liệu được ghi vào ngăn nhớ có địa
chỉ do ALU tính
thanh ghi đến thanh ghi đích
MemtoReg Giá trị được đưa đến đầu vào Giá trị được đưa đến đầu vào Write data
ALUSrc Toán hạng thứ hai của ALU lấy Toán hạng thứ hai của ALU là giá trị 16 bit
Write data của tập thanh ghi là của tập thanh ghi là từ bộ nhớ dữ liệu
từ thanh ghi nguồn thứ hai thấp của lệnh (bits 15:0) được mở rộng có từ ALU result
(Read data 2) dấu thành 32-bit
PCSrc PC ß PC+4 PC ß địa chỉ đích

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 59 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 60
Thực hiện lệnh số học/logic kiểu R Thực hiện lệnh Load

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 61 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 62

Thực hiện lệnh beq Thực hiện lệnh Jump

2 address
31:26 25:0

§ Bits 31:26 là mã thao tác = 000010


§ Bits 25:0: phần địa chỉ
§ PC nhận giá trị sau:
§ Địa chỉ đích = PC31…28 : (address << 2)
§ 4 bit bên trái là của PC cũ
§ 26-bit của lệnh jump (bits 25:0)
§ 2 bit cuối là 00
§ Cần thêm tín hiệu điều khiển được giải mã từ opcode

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 63 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 64
Datapath thêm cho lệnh jump 5.3. Kỹ thuật đường ống lệnh và song song mức lệnh
§ Kỹ thuật đườ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)
§ Bộ xử lý MIPS có 5 công đoạn:
1. IF: Instruction fetch from memory – Nhận lệnh từ bộ nhớ
2. ID: Instruction decode & register read – Giải mã lệnh và đọc thanh
ghi
3. EX: Execute operation or calculate address – Thực hiện thao tác
hoặc tính toán địa chỉ
4. MEM: Access memory operand – Truy nhập toán hạng bộ nhớ
5. WB: Write result back to register – Ghi kết quả trả về thanh ghi

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 65 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 66

Biểu đồ thời gian của đường ống lệnh Các mối trở ngại (Hazard) của đường ống lệnh

§ Hazard: Tình huống ngăn cản bắt đầu của lệnh tiếp
1 2 3 4 5 6 7 8 9 10 11 12 t

IF ID EX MEM WB
theo ở chu kỳ tiếp theo
lệnh 1
IF ID EX MEM WB § Hazard cấu trúc: do tài nguyên được yêu cầu đang bận
lệnh 2

lệnh 3
IF ID EX MEM WB § Hazard dữ liệu: cần phải đợi để lệnh trước hoàn thành
lệnh 4
IF ID EX MEM WB việc đọc/ghi dữ liệu
lệnh 5
IF ID EX MEM WB
§ Hazard điều khiển: do rẽ nhánh gây ra
IF ID EX MEM WB
lệnh 6
IF ID EX MEM WB
lệnh 7
IF ID EX MEM WB
lệnh 8

Thời gian thực hiện 1 công đoạn = T


Thời gian thực hiện tuần tự 8 lệnh: 8 x 5T = 40T
Thời gian thực hiện đường ống 8 lệnh: (1 x 5T) + [ (8-1) x T ] = 12T

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 67 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 68
Hazard cấu trúc Hazard dữ liệu
§ Xung đột khi sử dụng tài nguyên § Lệnh phụ thuộc vào việc hoàn thành truy cập dữ
§ Trong đường ống của MIPS với một bộ nhớ dùng liệu của lệnh trước đó
chung add $s0, $t0, $t1
§ Lệnh Load/store yêu cầu truy cập dữ liệu sub $t2, $s0, $t3
§ Nhận lệnh cần trì hoãn cho chu kỳ đó
§ Bởi vậy, datapath kiểu đường ống yêu cầu bộ nhớ
lệnh và bộ nhớ dữ liệu tách rời (hoặc cache
lệnh/cache dữ liệu tách rời)

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 69 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 70

Forwarding (gửi vượt trước) Hazard dữ liệu với lệnh load


§ Sử dụng kết quả ngay sau khi nó được tính § Không phải luôn luôn có thể tránh trì hoãn bằng
§ Không đợi đến khi kết quả được lưu đến thanh ghi cách forwarding
§ Yêu cầu có đường kết nối thêm trong datapath § Nếu giá trị chưa được tính khi cần thiết
§ Không thể chuyển ngược thời gian
§ Cần chèn bước trì hoãn (stall hay bubble)

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 71 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 72
Lập lịch mã để tránh trì hoãn Hazard điều khiển
§ Thay đổi trình tự mã để tránh sử dụng kết quả load § Rẽ nhánh xác định luồng điều khiển
ở lệnh tiếp theo § Nhận lệnh tiếp theo phụ thuộc vào kết quả rẽ nhánh
§ Đường ống không thể luôn nhận đúng lệnh
§ Mã C: § Vẫn đang làm ở công đoạn giải mã lệnh (ID) của lệnh rẽ nhánh
a = b + e; c = b + f; § Với đường ống của MIPS
§ Cần so sánh thanh ghi và tính địa chỉ đích sớm trong
lw $t1, 0($t0) lw $t1, 0($t0) đường ống
lw $t2, 4($t0) lw $t2, 4($t0) § Thêm phần cứng để thực hiện việc đó trong công đoạn
add $t3, $t1, $t2 lw $t4, 8($t0) ID
stall
sw $t3, 12($t0) add $t3, $t1, $t2
lw $t4, 8($t0) sw $t3, 12($t0)
stall add $t5, $t1, $t4 add $t5, $t1, $t4
sw $t5, 16($t0) sw $t5, 16($t0)
13 cycles 11 cycles

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 73 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 74

Trì hoãn khi rẽ nhánh Dự đoán rẽ nhánh


§ Đợi cho đến khi kết quả rẽ nhánh đã được xác § Những đường ống dài hơn không thể sớm xác
định trước khi nhận lệnh tiếp theo định dễ dàng kết quả rẽ nhánh
§ Cách trì hoãn không đáp ứng được
§ Dự đoán kết quả rẽ nhánh
§ Chỉ trì hoãn khi dự đoán là sai
§ Với MIPS
§ Có thể dự đoán rẽ nhánh không xẩy ra
§ Nhận lệnh ngay sau lệnh rẽ nhánh (không làm trễ)

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 75 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 76
MIPS với dự đoán rẽ nhánh không xẩy ra Đặc điểm của đường ống
§ Kỹ thuật đường ống cải thiện hiệu năng bằng cách
tăng số lệnh thực hiện
§ Thực hiện nhiều lệnh đồng thời
Prediction
correct § Mỗi lệnh có cùng thời gian thực hiện
§ Các dạng hazard:
§ Cấu trúc, dữ liệu, điều khiển
§ Thiết kế tập lệnh ảnh hưởng đến độ phức tạp của
việc thực hiện đường ống
Prediction
incorrect

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 77 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 78

Tăng cường khả năng song song mức lệnh Kiến trúc máy tính
n Tăng số công đoạn của đường ống
Lệnh 1

Lệnh 2

Lệnh 3

Lệnh 4

Lệnh 5

Lệnh 6
Hết chương 5
n Siêu vô hướng (Superscalar)
Lệnh 1

Lệnh 2

Lệnh 3

Lệnh 4

Lệnh 5

Lệnh 6

NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 79 NKK-CA2021.1.0 IT3030-Kiến trúc máy tính 80

You might also like