










Preview text:
lOMoAR cPSD| 59285474
BÁO CÁO THỰC HÀNH LAB 5
MÔN KIẾN TRÚC MÁY TINH MSSV: 23520253
Họ và Tên: Ngô Hữu Đạt 3. Phần 3
1. Chạy và quan sát quá trình xử lý các lệnh sau thông qua datapath trên MARS. • add $t1,$t2,$t3.
- PC: Chứa địa chỉ của lệnh “add $t1, $t2,$t3”.
- Instruction Memory: Lấy lệnh “add $t1, $t2, $t3” dựa trên địa chỉ từ
PC. - Control Unit: Giải mã lệnhvà thiết lập các tín hiệu điều khiển
tương ứng cho các thành phần khác.
- Bank of Register: Đọc giá trịtừ các thanh ghi $t2 và $t3.
- ALU: Thực hiện phép cộng hai giá trị từ $t2 và $t3.
- ALU Control: Xác định phép toán cộng cho ALU.
- Bank of Register: Ghi kết quả của phép cộng vào thanh ghi $t1.
- PC: Tăng lên để trỏ đến lệnh kế tiếp. • addi $t1,$t1,5 lOMoAR cPSD| 59285474
- PC: Chứa địa chỉ của lệnh “addi $t1, $t1,5”.
- Instruction Memory: Lấy lệnh “addi $t1, $t1, 5” dựa trên địa chỉ từ PC.
- Control Unit: Giải mã lệnhvà thiết lập các tín hiệu điều khiển tương ứng.
- Bank of Register: Đọc giá trị từ thanh ghi $t1.
- Sign Extend: Mở rộng giá trị tức thời 5 thành 32-bit.
- ALU: Thực hiện phép cộng giữa giá trị của $t1 và giá trị tức thời 5.
- ALU Control: Xác định phép toán cộng cho ALU.
- Bank of Register: Ghi kết quả của phép cộng vào thanh ghi $t1.
- PC: Tăng lên để trỏ đến lệnh kế tiếp• sub $t1,$t2,$3
- PC: Chứa địa chỉ của lệnh “sub $t1, $t2, $t3”. lOMoAR cPSD| 59285474
- Instruction Memory: Lấy lệnh “sub $t1, $t2, $t3” dựa trên địa chỉ từ
PC.- Control Unit: Giải mã lệnh và thiết lập các tín hiệu điều khiển tương ứng.
- Bank of Register: Đọc giá trị từ các thanh ghi $t2 và $t3.
- ALU: Thực hiện phép trừ giữa giá trị của $t2 và giá trị của thanh ghi $t3.
- ALU Control: Xác định phép toán trừ cho ALU.
- Bank of Register: Ghi kết quả của phép trừ vào thanh ghi $t1. - PC:
Tăng lên để trỏ đến lệnh kế tiếp. • lw $t1,4($t2) ; # $t2 = 0x10010000
- PC: Chứa địa chỉ của lệnh “lw $t1, 4($t2)”.
- Instruction Memory: Lấy lệnh “lw $t1, 4($t2)” dựa trên địa chỉ từ PC.
- Control Unit: Giải mã lệnh và thiết lập các tín hiệu điều khiển tương ứng.
- Bank of Register: Đọc giá trị từ thanh ghi $t2.
- Sign Extend: Mở rộng giá trị tức thời 4 thành 32-bit.
- ALU: Thực hiện phép cộng giữa giá trị của $t2 và giá trị tức thời 4 để
tính địa chỉ hiệuquả.
- ALU Control: Xác định phép toán cộng cho ALU.
- Data Memory: Đọc giá trị từbộ nhớ tại địa chỉ hiệu quả.
- Bank of Register: Ghi giá trịđọc được vào thanh ghi $t1. - PC: Tăng lên
để trỏ đến lệnh kế tiếp.
• sw $t1,8($t2); #$t2 = 0x10010020 lOMoAR cPSD| 59285474
- PC: Chứa địa chỉ của lệnh “sw $t1, 8($t2)”.
- Instruction Memory: Lấy lệnh “sw $t1, 8($t2)” dựa trên địa chỉ từ PC.-
Control Unit: Giải mã lệnh và thiết lập các tín hiệu điều khiển tương ứng.
- Bank of Register: Đọc giá trị từ các thanh ghi $t1 và $t2.
- Sign Extend: Mở rộng giá trị tức thời 8 thành 32-bit.
- ALU: Thực hiện phép cộng giữa giá trị của $t2 và giá trị tức thời 8 để
tính địa chỉ hiệu quả.
- ALU Control: Xác định phép toán cộng cho ALU.
- Data Memory: Ghi giá trị của $t1 vào bộ nhớ tại địa chỉ hiệu quả.
- PC: Tăng lên để trỏ đến lệnhkế tiếp. • J label Label: exit lOMoAR cPSD| 59285474 -
PC: Chứa địa chỉ của lệnh “j label”. -
Instruction Memory: Lấylệnh “j label” dựa trên địa chỉ từ PC. -
Control Unit: Giải mã lệnh và thiết lập các tín hiệu điều khiển tương ứng. -
Shift Left: Dịch trái giá trị26-bit của địa chỉ mục tiêu để tạo thành địa chỉ 28-bit. -
PC: Cập nhật PC với địa chỉ nhảy (jump address). • slt $t1,$t2,$t3 -
PC: Chứa địa chỉ của lệnh “slt $t1, $t2, $t3”. -
Instruction Memory: Lấy lệnh “slt $t1, $t2, $t3” dựa trên địa chỉ từ
PC. - Control Unit: Giải mã lệnh và thiết lập các tín hiệu điều khiển tương ứng. -
Bank of Register: Đọc giá trị từ các thanh ghi $t2 và $t3. -
ALU: Thực hiện phép so sánh giữa giá trị của $t2 và$t3. lOMoAR cPSD| 59285474 -
ALU Control: Xác định phép toán so sánh cho ALU. -
Bank of Register: Ghi kếtquả của phép so sánh vàothanh ghi $t1 (1
nếu $t2 < $t3,ngược lại 0). -
PC: Tăng lên để trỏ đến lệnhkế tiếp. 4. Phần 4
1. Chuyển chương trình sau sang MIPS: int a,b,c,d; a=6; b=5; c=a-b; d=a+b;
• Xác định các lệnh tương ứng là loại lệnh nào (R-type, I-Type, J-Type)? Giải thích? -
addi $t1, $zero, 6 và addi $t2, $zero, 5: Là lệnh I-type vì cả 2 lệnh
đều tải 1 giá trị tức thời (immidiate value). -
sw $t1, a; sw $t2, b; sw $t3, c; sw $t4, d: Đây cũng là các lệnh I-
Type vì chúng thực hiện việc lưu giá trị từ thanh ghi vào bộ nhớ. Chúng
sử dụng một immediate value (địa chỉ của biến a và b) và một thanh ghi nguồn. -
lw $t1, a và lw $t2, b : Tương tự như sw, đây cũng là các lệnh I-
Type vì chúng thực hiện việc tải giá trị từ bộ nhớ vào thanh ghi. Chúng
cũng sử dụng một immediate value (địa chỉ của biến avà b) và một thanh ghi đích. -
sub $t3, $t1, $t2 và add $t4, $t1, $t2: Đây là các lệnh R-Type vì
chúng thực hiện các phép toán trên các thanh ghi. Cụ thể, phép trừ và
phép cộng giữa hai thanh ghi, và lưu kết quả vào một thanh ghi khác. lOMoAR cPSD| 59285474
• Kết nối chương trình với MIPS X-Ray trong MARS. Chạy từng bước
các lệnh và ở mỗi lệnh giải thích quá trình thực thi lệnh đó trên datapath trong MARS. 1. li $t0, 6
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhli $t0, 6.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Immediate: Giá trị 6 được sign-extended thành 32-bit.
- Register Bank: Ghi giá trị 6 vào thanh ghi $t0.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 2. sw $t0, a
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhsw $t0, a.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ thanh ghi $t0.
- ALU: Tính địa chỉ hiệu quả bằng cách cộng base address của a với offset 0.
- Data Memory: Ghi giá trị từ $t0 vào bộ nhớ tại địa chỉ tính được.
- PC: Tăng lên để trỏ đến lệnh tiếp theo.3. li $t1, 5
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhli $t1, 5.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Immediate: Giá trị 5 được sign-extended thành 32-bit.
- Register Bank: Ghi giá trị 5 vào thanh ghi $t1.
- PC: Tăng lên để trỏ đến lệnh tiếp theo 4. sw $t1, b
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhsw $t1, b.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ thanh ghi $t1.
- ALU: Tính địa chỉ hiệu quả bằng cách cộng base address của b với offset 0.
- Data Memory: Ghi giá trị từ $t1 vào bộ nhớ tại địa chỉ tính được.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 5. lw $t0, a
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhlw $t0, a.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển. - ALU: Tính
địa chỉ hiệu quả bằng cách cộng base address của a với offset 0.
- Data Memory: Đọc giá trị từ bộ nhớ tại địa chỉ tính được. lOMoAR cPSD| 59285474
- Register Bank: Ghi giá trị đọc được vào thanh ghi $t0.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 6. lw $t1, b
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhlw $1, b.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển. - ALU: Tính
địa chỉ hiệu quả bằng cách cộng base address của b với offset 0.
- Data Memory: Đọc giá trị từ bộ nhớ tại địa chỉ tính được.
- Register Bank: Ghi giá trị đọc được vào thanh ghi $t1.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 7.sub $t2, $t0, $t1
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhsub $t2, $t0, $t1.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ các thanh ghi $t0 và $t1.
- ALU: Thực hiện phép trừ giữa $t0 và $t1.
- Register Bank: Ghi kết quả vào thanh ghi $t2.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 8. add $t3, $t0, $t1
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhadd $t3, $t0, $t1.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ các thanh ghi $t0 và $t1.
- ALU: Thực hiện phép cộng giữa $t0 và $t1.
- Register Bank: Ghi kết quả vào thanh ghi $t3.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 9. sw $t2, c
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhsw $t2, c.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ thanh ghi $t2.
- ALU: Tính địa chỉ hiệu quả bằng cách cộng base address của c với offset 0.
- Data Memory: Ghi giá trị từ $t2 vào bộ nhớ tại địa chỉ tính được.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 10. sw $t3, d
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhsw $t3, d.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển. lOMoAR cPSD| 59285474
- Register Bank: Đọc giá trị từ thanh ghi $t3.
- ALU: Tính địa chỉ hiệu quả bằng cách cộng base address của d với offset 0.
- Data Memory: Ghi giá trị từ $t3 vào bộ nhớ tại địa chỉ tính được.
- PC: Tăng lên để trỏ đến lệnh tiếp theo.
2. Chuyển chương trình sau sang MIPS:
• I được lưu trong $s3, j trong $s4, f trong $s0, g trong $s1, h trong $s2.
• Phải sử dụng lệnh bne và j trong chương trình.
• Kết nối chương trình với MIPS X-Ray trong MARS. Chạy từng bước
các lệnh và ở mỗi lệnh giải thích quá trình thực thi lệnh đó trên datapath trong MARS.
Giải thích quá trình thực thi trên datapath: 1. Lệnhlw $t0, 0($s3):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhlw $t0, 0($s3).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank đọc giá trị từ thanh ghi $s3 (địa chỉ của i).
- ALU tính toán địa chỉ bộ nhớ là $s3 + 0. lOMoAR cPSD| 59285474
- Data Memory truy cập vào bộ nhớ và lấy giá trị tại địa chỉ đã tính.
- Giá trị từ bộ nhớ được load vào thanh ghi $t0.
- PC tăng lên để trỏ đến lệnh tiếp theo. 2. Lệnhlw $t1, 0($s4):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhlw $t1, 0($s4).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank đọc giá trị từ thanh ghi $s4 (địa chỉ của j).
- ALU tính toán địa chỉ bộ nhớ là $s4 + 0.
- Data Memory truy cập vào bộ nhớ và lấy giá trị tại địa chỉ đã tính.
- Giá trị từ bộ nhớ được load vào thanh ghi $t1.
- PC tăng lên để trỏ đến lệnh tiếp theo.
3. Lệnhbne $t0, $t1, not_equal:
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhbne $t0, $t1, not_equal.
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank đọc giá trị từ thanh ghi $t0 và $t1.
- ALU so sánh giá trị của $t0 và $t1. - Nếu $t0 ≠ $t1, PC được cập nhật
để nhảy tới nhãn not_equal; nếu không, PC tăng lên để thựcthi lệnh tiếp theo. 4. Lệnhlw $t2, 0($s1):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhlw $t2, 0($s1).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển. - Register
Bank đọc giá trị từ thanh ghi $s1 (địa chỉ của g).
- ALU tính toán địa chỉ bộ nhớ là $s1 + 0.
- Data Memory truy cập vào bộ nhớ và lấy giá trị tại địa chỉ đã tính.
- Giá trị từ bộ nhớ được load vào thanh ghi $t2.
- PC tăng lên để trỏ đến lệnh tiếp theo. 5. Lệnhlw $t3, 0($s2):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhlw $t3, 0($s2).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank đọc giá trị từ thanh ghi $s2 (địa chỉ của h).
- ALU tính toán địa chỉ bộ nhớ là $s2 + 0.
- Data Memory truy cập vào bộ nhớ và lấy giá trị tại địa chỉ đã tính.
- Giá trị từ bộ nhớ được load vào thanh ghi $t3.
- PC tăng lên để trỏ đến lệnh tiếp theo. 6. Lệnhadd $t4, $t2, $t3: lOMoAR cPSD| 59285474
- PC: Trỏ đến địa chỉ của lệnh.
- Instruction Memory: Lấy lệnhadd $t4, $t2, $t3.
- Control Unit: Giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank: Đọc giá trị từ các thanh ghi $t2 và $t3.
- ALU: Thực hiện phép cộng giữa $t2 và $t3.
- Register Bank: Ghi kết quả vào thanh ghi $t4.
- PC: Tăng lên để trỏ đến lệnh tiếp theo. 7. Lệnh sw $t4, 0($s0):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhsw $t4, 0($s0).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- Register Bank đọc giá trị từ thanh ghi $t4.
- ALU tính toán địa chỉ bộ nhớ là $s0 + 0.
- Data Memory ghi giá trị từ thanh ghi $t4 vào bộ nhớ.
- PC tăng lên để trỏ đến lệnh tiếp theo. 8. Lệnh j end:
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnh j end.
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển.
- PC được cập nhật để nhảy tới nhãn end. 9. Lệnh lw $t5, 0($s1):
- PC trỏ đến địa chỉ của lệnh.
- Instruction Memory lấy lệnhlw $t5, 0($s1).
- Control Unit giải mã lệnh và thiết lập tín hiệu điều khiển. - Register
Bank đọc giá trị từ thanh ghi $s1 (địa chỉ của g).
- ALU tính toán địa chỉ bộ nhớ là $s1 + 0.
- Data Memory truy cập vào bộ nhớ và lấy giá trị tại địa chỉ đã tính. - Giá
trị từ bộ nhớ được load vào thanh ghi $t5. - PC tăng lên để trỏ đến lệnh tiếp theo.