You are on page 1of 16

Họ và tên: Hồ Yến Nhi

MSSV: 21520380
GV hướng dẫn: Thân Thế Tùng

Báo cáo Lab06


Phần 3:
add $t1, $t2, $t3

addi $t1, $t1, 5


sub $t1, $t2, $3

lw $t1,4($t2)
sw $t1,8($t2)

j label
label:
slt $t1, $t2, $t3

Phần 4:
1. Code
Chạy từng bước các lệnh:
addi $t0, $0, 6

- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh addi vào Control, truyền địa chỉ của
các thanh ghi $t0, $0 vào Registers, truyền số tức thời 6 vào Sign – Extend.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $t0) đưa vào Registers.
- Registers đọc giá trị của $0 đưa vào khối ALU, đưa thanh ghi đích $t0 vào
Data Memory.
- Bộ Mux nhận giá trị của $0 đưa vào khối ALU. Đồng thời, Sign – Extend
đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu điều khiển
Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực hiện phép
cộng. Sau đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép cộng vào thanh ghi đích $t0 nhờ
khối Registers.

sw $t0, array

- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sw vào Control, truyền địa chỉ của
thanh ghi $t0 và thanh ghi lưu mảng array vào Registers, truyền số tức thời 0
(chỉ số của phần tử trong mảng * 4) vào Sign – Extend.
- Registers đọc giá trị của $t0 đưa vào khối ALU.
- Sign – Extend đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu
điều khiển Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực
hiện lệnh store. Sau đó, kết quả được đưa vào bộ nhớ Data Memory.
addi $t1, $0, 5

- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh addi vào Control, truyền địa chỉ của
các thanh ghi $t1, $0 vào Registers, truyền số tức thời 5 vào Sign – Extend.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $t1) đưa vào Registers.
- Registers đọc giá trị của $0 đưa vào khối ALU, đưa thanh ghi đích $t1 vào
Data Memory.
- Bộ Mux nhận giá trị của $0 đưa vào khối ALU. Đồng thời, Sign – Extend
đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu điều khiển
Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực hiện phép
cộng. Sau đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép cộng vào thanh ghi đích $t1 nhờ
khối Registers.
sw $t1, array + 4

- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sw vào Control, truyền địa chỉ của
thanh ghi $t1 và thanh ghi lưu mảng array vào Registers, truyền số tức thời 4
(chỉ số của phần tử trong mảng * 4) vào Sign – Extend.
- Registers đọc giá trị của $t1 đưa vào khối ALU.
- Sign – Extend đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu
điều khiển Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực
hiện lệnh store. Sau đó, kết quả được đưa vào bộ nhớ Data Memory.
sub $t2, $t0, $t1
- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sub vào Control, truyền địa chỉ của
các thanh ghi $t0, $t2, $t1 vào Registers.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $t2) đưa vào Registers.
- Registers đọc giá trị của $t0 đưa vào khối ALU, đọc giá trị của $t1 đưa vào
bộ Mux và Data Memory.
- Bộ Mux nhận giá trị của $t1 đưa vào khối ALU để thực hiện phép trừ. Sau
đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép trừ vào thanh ghi đích $t0 nhờ
khối Registers.
sw $t2, array + 8
- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sw vào Control, truyền địa chỉ của
thanh ghi $t2 và thanh ghi lưu mảng array vào Registers, truyền số tức thời 8
(chỉ số của phần tử trong mảng * 4) vào Sign – Extend.
- Registers đọc giá trị của $t2 đưa vào khối ALU.
- Sign – Extend đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu
điều khiển Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực
hiện lệnh store. Sau đó, kết quả được đưa vào bộ nhớ Data Memory.
add $t3, $t0, $t1
- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh add vào Control, truyền địa chỉ của
các thanh ghi $t3, $t0, $t1 vào Registers.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $t3) đưa vào Registers.
- Registers đọc giá trị của $t0 đưa vào khối ALU, đọc giá trị của $t1 đưa vào
bộ Mux và Data Memory.
- Bộ Mux nhận giá trị của $t1 đưa vào khối ALU để thực hiện phép cộng. Sau
đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép cộng vào thanh ghi đích $t3 nhờ
khối Registers.
sw $t3, array + 12
- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sw vào Control, truyền địa chỉ của
thanh ghi $t3 và thanh ghi lưu mảng array vào Registers, truyền số tức thời
12 (chỉ số của phần tử trong mảng * 4) vào Sign – Extend.
- Registers đọc giá trị của $t3 đưa vào khối ALU.
- Sign – Extend đưa số tức thời về 32bit và truyền vào Mux, dựa vào tín hiệu
điều khiển Control, Mux đưa giá trị số tức thời vào ALU và tiến hành thực
hiện lệnh store. Sau đó, kết quả được đưa vào bộ nhớ Data Memory.

2. Code
Chạy từng bước các lệnh:
bne $s3, $s4, else

- $pc truyền địa chỉ vào Instruction Memory.


- Instruction Memory truyền opcode của lệnh bne vào Control, truyền địa chỉ
của các thanh ghi $s3, $s4 vào Registers, truyền địa chỉ lệnh kế tiếp vào
Sign - Extend.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi rt để lưu giá trị
(chọn thanh ghi $s4) đưa vào Registers.
- Registers đọc giá trị của $s3 đưa vào khối ALU, đọc giá trị địa chỉ của lệnh
sau khi rẽ nhánh.
- ALU thực hiện phép trừ để xác định cờ Zero, nếu 2 giá trị thanh ghi $s3, $s4
bằng nhau thì cờ Zero = 1, ngược lại cờ Zero = 0.
- Sau đó, giá trị trong cờ Zero đi đến khối logic AND, kết quả từ khối AND
tiếp tục đi đến Mux để xác định PC sẽ cộng thêm bao nhiêu để nhảy đến
lệnh nào.

* Nếu $s3 khác $s4:


add $s0, $s1, $s2

- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh add vào Control, truyền địa chỉ của
các thanh ghi $s1, $s0, $s2 vào Registers.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $s0) đưa vào Registers.
- Registers đọc giá trị của $s1 đưa vào khối ALU, đọc giá trị của $s2 đưa vào
bộ Mux và Data Memory.
- Bộ Mux nhận giá trị của $s2 đưa vào khối ALU để thực hiện phép cộng. Sau
đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép cộng vào thanh ghi đích $s0 nhờ
khối Registers.

j exit

- $pc truyền địa chỉ vào Instruction Memory.


- Instruction Memory truyền opcode của lệnh j vào Control, truyền địa chỉ của
lệnh cần nhảy vào Shift Left 2.
- Tiếp tục đi qua Mux để xác định PC sẽ cộng thêm bao nhiêu để nhảy đến
lệnh nào.

* Nếu $s3 = $s4:


Nhảy đến else:
sub $s0, $s1, $s2
- $pc truyền địa chỉ vào Instruction Memory và cộng thêm 4 (truyền địa chỉ
của lệnh tiếp theo vào PC để thực hiện tiếp chương trình).
- Instruction Memory truyền opcode lệnh sub vào Control, truyền địa chỉ của
các thanh ghi $s1, $s0, $s2 vào Registers.
- Theo sự điều khiển của Control, Mux sẽ chọn thanh ghi đích để lưu giá trị
(chọn thanh ghi $s0) đưa vào Registers.
- Registers đọc giá trị của $s1 đưa vào khối ALU, đọc giá trị của $s2 đưa vào
bộ Mux và Data Memory.
- Bộ Mux nhận giá trị của $s2 đưa vào khối ALU để thực hiện phép trừ. Sau
đó, kết quả được đưa vào bộ Mux tiếp theo.
- Bộ Mux nhận giá trị đó để ghi giá trị phép trừ vào thanh ghi đích $s0 nhờ
khối Registers.

You might also like