1.2 Bước 2: Đọc dữ liệu từ các thanh ghi Register FetchHình 3: Kết quả bước 2 Ở bước này, Register File RF đóng vai trò chính trong việc đọc giá trị từ các thanh ghi dựa trên lệnh đã đượ
Trang 1BÀI TẬP VỀ NHÀ SỐ 1 MÔN KIẾN TRÚC MÁY TÍNH
Instruction chọn cho bài số 1: SUB instruction
GV hướng dẫn: TS Đào Thành Chung Nhóm sinh viên thực hiện: Nhóm 9
Trương Minh Hoàng 20227118
Nguyễn Trọng Hiếu 20227017
Hà Nội, 12/2024
Trang 2Lời cảm ơn
Bản báo cáo này được hoàn thành trong khuôn khổ học phần "Kiến trúc máy tính"tại Đại học Bách khoa Hà Nội, trong học kỳ 2024-1.
Nhóm chúng em xin bày tỏ lòng biết ơn sâu sắc tới TS Đào Thành Chung, người đã không chỉ hướng dẫn mà còn cung cấp những kiến thức cơ bản để chúng em có thể hoàn thành báo cáo này Thầy đã giao cho chúng em một chủ đề cơ bản nhưng rất thú vị để chúng em có thể tìm hiểu và nâng cao các kĩ năng của bản thân, áp dụng những kiến thức đã học vào một nghiệp vụ cụ thể Giúp chúng em mở rộng thêm kiến thức và tăng cường kĩ năng thực tế.
Xin cảm ơn các thầy đã đọc bản báo cáo môn học và cho chúng em những nhận xét quý báu, chỉnh sửa những sai sót của chúng em trong bản thảo bản báo cáo Do giới hạn kiến thức và khả năng lý luận của bản thân còn nhiều thiếu sót, chúng em kính mong nhận sự chỉ dẫn và góp ý của các thầy để bài báo cáo của được hoàn thiện hơn Em xin chân thành cảm ơn!
.
Trân trọng cảm ơn
Nhóm 9
Trang 3Mục lục
1 Các bước xảy ra của lệnh SUB 4
1.1 Bước 1: Lấy lệnh từ bộ nhớ (Instruction Fetch) 4
1.2 Bước 2: Đọc dữ liệu từ các thanh ghi (Register Fetch) 6
1.3 Bước 3: Thực hiện phép toán trong ALU (ALU Execution) 7
1.4 Bước 4: Ghi Kết Quả và Cập Nhật Bộ Đếm Chương Trình (Write Back and PC Update) 9
2 Lệnh SUB trong MIPS 11 2.1 Định dạng Lệnh 11
2.2 Mô tả Lệnh 11
2.3 Mục đích 12
2.4 Cơ chế Hoạt động 12
2.5 Hạn chế 12
2.6 Quy trình Thực hiện 12
2.7 Ví dụ 13
Trang 41 Các bước xảy ra của lệnh SUB
Giải thích cụ thể từ bước xảy ra trên hình vẽ minh hoạ của lệnh SUB
Hình 1: Chọn giá trị cho $2 và $6
1.1 Bước 1: Lấy lệnh từ bộ nhớ (Instruction Fetch)
Hình 2: Kết quả bước 1
• Program Counter (PC):
Trang 5– Thanh ghi PC chứa địa chỉ của lệnh sẽ được thực thi tiếp theo Trong
hình, giá trị PC ban đầu là 0x00000100
• Bộ cộng (Adder):
– Adder thực hiện phép cộng PC + 4 để tính địa chỉ của lệnh kế tiếp (tăng PC thêm 4 byte, vì mỗi lệnh MIPS dài 4 byte)
– Kết quả trong hình là 0x00000104 , được ghi trở lại PC
• Instruction Memory (IM):
– Địa chỉ từ PC được gửi tới Instruction Memory
– Bộ nhớ lệnh đọc lệnh nhị phân tại địa chỉ này Trong hình, lệnh được
đọc là: 000000 00010 00110 01000 00000 100010
Đây là mã nhị phân của lệnh SUB $8, $2, $6 :
∗ Opcode: 000000 (lệnh R-type)
∗ rs (source): $2 ( 00010 ) → Giá trị là 12
∗ rt (source): $6 ( 00110 ) → Giá trị là 5
∗ rd (destination): $8 ( 01000 )
∗ Funct: 100010 (mã của lệnh SUB )
• Gửi lệnh đến Control Unit (CU):
– Lệnh vừa được đọc được chuyển tới Control Unit (CU) để giải mã và
xác định các tín hiệu điều khiển cần thiết cho các bước tiếp theo
Kết thúc bước 1, địa chỉ PC đã được cập nhật và lệnh SUB đã được giải mã
Trang 61.2 Bước 2: Đọc dữ liệu từ các thanh ghi (Register Fetch)
Hình 3: Kết quả bước 2
Ở bước này, Register File (RF) đóng vai trò chính trong việc đọc giá trị từ các thanh ghi dựa trên lệnh đã được giải mã ở bước trước
• Nhập địa chỉ thanh ghi nguồn vào Register File:
– Read Addr 1: Thanh ghi $2 được sử dụng làm đầu vào đầu tiên (được
xác định bởi rs )
– Read Addr 2: Thanh ghi $6 được sử dụng làm đầu vào thứ hai (được
xác định bởi rt )
• Đọc giá trị từ Register File:
– Giá trị của $2 ( 12 ) và $6 ( 5 ) được đọc từ Register File
– Trong hình minh họa, các giá trị này đã được gán cụ thể như $2 = 12
và $6 = 5
• Chuẩn bị dữ liệu cho ALU:
– Hai giá trị đọc từ $2 và $6 sẽ được gửi đến Arithmetic Logic Unit
(ALU) để thực hiện phép toán SUB trong bước tiếp theo
• Thanh ghi đích không được ghi trong bước này:
Trang 7– Địa chỉ của thanh ghi đích ( $8 ) được xác định, nhưng kết quả sẽ chỉ
được ghi vào $8 sau khi phép toán hoàn thành ở bướ
Kết thúc bước 2: Các giá trị từ $2 và $6 đã được đọc từ Register File và chuẩn bị gửi đến ALU để tính toán Thanh ghi $8 (đích) vẫn chưa nhận kết quả Việc ghi giá trị sẽ diễn ra sau khi ALU thực hiện phép trừ
1.3 Bước 3: Thực hiện phép toán trong ALU (ALU Execution)
Hình 4: Kết quả bước 3
Ở bước này, đơn vị tính toán số học và logic (ALU) thực hiện phép toán được xác định bởi lệnh, dựa trên các giá trị đầu vào từ hai thanh ghi nguồn
• Chuẩn bị Dữ Liệu Đầu Vào cho ALU
– Lấy giá trị từ các thanh ghi nguồn ( rs và rt ):
∗ Từ lệnh đã giải mã trong Bước 1, ta biết:
· rs: $2 (Source Register 1)
· rt: $6 (Source Register 2)
· rd: $8 (Destination Register)
∗ RF (Register File): Trong Bước 2, giá trị từ $2 và $6 đã được đọc từ thanh ghi, sẵn sàng làm đầu vào cho ALU
Trang 8• Tín Hiệu Điều Khiển từ Control Unit
– Giải mã lệnh:
∗ Lệnh R-Type ( Opcode = 000000 ) sử dụng các funct bits (trường funct) để xác định phép toán cụ thể
∗ Funct bits từ lệnh SUB: 100010
– ALU Control (ALUctrl):
∗ Control Unit (CU) chuyển tín hiệu ALUOp tới ALU Control, kết hợp với funct bits để xác định phép toán
∗ Tín hiệu gửi tới ALU là "SUB"(phép trừ)
• Thực Hiện Phép Toán trong ALU
– Dữ liệu đầu vào của ALU:
∗ Operand 1 (Giá trị từ $2 ): 12 (đã gán giá trị cụ thể trong Bước 2)
∗ Operand 2 (Giá trị từ $6 ): 5 (đã gán giá trị cụ thể trong Bước 2)
– Thực hiện phép toán SUB:
∗ ALU thực hiện phép trừ: $2 - $6 → 12 - 5 = 7
∗ Kết quả: 7
• Xử Lý Kết Quả từ ALU
– Kết quả phép toán:
∗ Kết quả được gửi tới thanh ghi đích $8 : 7
– Tín hiệu Zero:
∗ ALU kiểm tra xem kết quả có bằng 0 không:
· Nếu Zero = 1 , hỗ trợ các lệnh nhảy có điều kiện
· Ở đây, kết quả không bằng 0 ( 7 # 0 ), tín hiệu Zero không được kích hoạt
• Quản Lý Đường Dẫn Điều Khiển
– MUX (Multiplexer):
∗ Trong hình minh họa, tín hiệu JRsel = 0 từ CU
Trang 9∗ Do đó, địa chỉ tiếp theo trong PC không bị thay đổi bởi lệnh nhảy,
mà giữ nguyên đường dẫn địa chỉ mặc định từ Adder ( PC + 4 )
ALU đã thực hiện phép toán dựa trên các giá trị đầu vào và tín hiệu điều khiển Kết quả sẽ được chuyển tới thanh ghi $8
1.4 Bước 4: Ghi Kết Quả và Cập Nhật Bộ Đếm Chương Trình
(Write Back and PC Update)
Hình 5: Kết quả bước 4
• Ghi kết quả vào thanh ghi đích
– ALU Output:
∗ Kết quả từ ALU (ở bước 3) là 100110 (tương ứng với kết quả của phép toán 12 - 5 )
∗ Phép toán SUB $2 - $6 , nã thực hiện thành công với đầu vào hợp lệ, cho ra kết quả 7
– Register File (RF):
∗ Tín hiệu điều khiển từ Control Unit (CU) đã chỉ định thanh ghi $8 (địa chỉ 01000_B ) làm thanh ghi đích để ghi kết quả
∗ Kết quả 7 được ghi vào thanh ghi $8
Trang 10• Cập nhật bộ đếm chương trình (Program Counter - PC)
– PC Update:
∗ Thanh ghi Program Counter (PC) được cập nhật để trỏ tới lệnh tiếp theo trong bộ nhớ lệnh (Instruction Memory - IM)
∗ Giá trị mới của PC được tính toán trong Bước 1 (Adder đã thực hiện PC + 4 ):
· PC mới = 00000108_H (địa chỉ của lệnh tiếp theo)
– MUX Selection:
∗ Trong trường hợp này, tín hiệu điều khiển JRsel = 0 (không thực hiện lệnh nhảy - Jump Register)
∗ Địa chỉ tiếp theo trong PC được lấy từ kết quả của Adder (PC + 4)
Kết quả cuối cùng:Thanh ghi $8 sẽ chứa giá trị 7 (kết quả phép SUB) PC được cập nhật thành 00000108_H , trỏ đến lệnh tiếp theo
Trang 112 Lệnh SUB trong MIPS
Lệnh SUB trong MIPS là một lệnh trừ các số nguyên 32-bit và lưu kết quả vào thanh ghi đích Cú pháp của lệnh này như sau:
2.1 Định dạng Lệnh
SUB rd, rs, rt [R-type]
Trong đó:
- rs và rt là các thanh ghi nguồn.
- rd là thanh ghi đích, nơi lưu kết quả.
- SPECIAL cho biết đây là lệnh thuộc loại R-type.
- SUB có mã lệnh là 100010.
2.2 Mô tả Lệnh
Lệnh SUB thực hiện phép trừ giữa các giá trị 32-bit trong các thanh ghi rs và rt, sau
đó lưu kết quả vào thanh ghi rd.
Cụ thể:
rd ← rs − rt
Điều này có nghĩa là giá trị trong thanh ghi rt bị trừ khỏi giá trị trong thanh ghi rs,
và kết quả sẽ được lưu vào thanh ghi rd.
Trang 122.3 Mục đích
Lệnh SUB được sử dụng để trừ các số nguyên 32-bit Nếu phép trừ xảy ra tràn số (overflow), lệnh sẽ gây ra ngoại lệ IntegerOverflow Nếu không có tràn số, kết quả sẽ được lưu vào thanh ghi rd.
2.4 Cơ chế Hoạt động
• Kiểm tra tràn số: Nếu phép trừ giữa rs và rt gây tràn số (vượt quá phạm vi
32-bit), hệ thống sẽ phát hiện và phát tín hiệu ngoại lệ IntegerOverflow.
• Lưu kết quả: Nếu phép trừ không gây tràn số, kết quả sẽ được lưu vào thanh ghi
rd.
2.5 Hạn chế
• Lệnh này yêu cầu các thanh ghi rs và rt chứa các giá trị số nguyên 32-bit đã được
mở rộng dấu (sign-extended).
• Nếu một trong hai thanh ghi này không chứa giá trị hợp lệ, kết quả phép toán sẽ không xác định.
2.6 Quy trình Thực hiện
• Kiểm tra tính hợp lệ của các giá trị trong rs và rt: Nếu các giá trị này
không phải là số nguyên 32-bit hợp lệ, một kết quả không xác định sẽ được trả về.
• Thực hiện phép trừ: Nếu giá trị hợp lệ, tiến hành trừ rs - rt.
• Kiểm tra tràn số: Nếu phép trừ gây tràn số, phát tín hiệu ngoại lệ IntegerOverflow.
• Lưu kết quả: Nếu không có tràn số, kết quả được lưu vào thanh ghi rd.
Trang 132.7 Ví dụ
Ví dụ mã lệnh:
SUB $t0, $t1, $t2
Điều này có nghĩa là: Giá trị trong thanh ghi $t1 trừ đi giá trị trong thanh ghi $t2, và kết quả sẽ được lưu vào thanh ghi $t0, tức là:
t0 ← t1 − t2