Khi điều kiện "bằng nhau" được thỏa mãn nghĩa là giá trị trong thanh ghi hoặc giữa các thanh ghi là giống nhau, BEQ sẽ khiến chương trình chuyển đến một địa chỉ chỉ định mà không thực hi
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA TOÁN - TIN -🙠🕮🙠 -
HỌC PHẦN: KIẾN TRÚC MÁY TÍNH BÁO CÁO BÀI TẬP VỀ NHÀ SỐ 1
ĐỀ TÀI: BEQ INSTRUCTION
Giảng viên hướng dẫn: Thầy Đào Thành Trung
Sinh viên thực hiện: VŨ ĐỨC HOAN – 20227018
PHẠM TUẤN ANH – 20227082 NGUYỄN VĂN ĐẠI - 20227091
Nhóm: 21
Trang 2I, Giới thiệu
Trong lập trình assembly và các ngôn ngữ lập trình cấp thấp, BEQ (Branch
if Equal) là một chỉ thị điều khiển nhánh (branch instruction) rất quan trọng BEQ được sử dụng trong các bộ vi xử lý (CPU) để thực hiện nhánh (jump) trong chương trình khi hai giá trị được so sánh là bằng nhau Cụ thể, BEQ thường được dùng sau một phép so sánh, nơi nếu hai giá trị được so sánh là bằng nhau, chương trình sẽ nhảy đến một vị trí khác trong mã lệnh
BEQ hoạt động dựa trên kết quả của một phép so sánh trước đó, thường là các phép so sánh giữa hai thanh ghi hoặc giữa một thanh ghi và một hằng
số Khi điều kiện "bằng nhau" được thỏa mãn (nghĩa là giá trị trong thanh ghi hoặc giữa các thanh ghi là giống nhau), BEQ sẽ khiến chương trình chuyển đến một địa chỉ chỉ định mà không thực hiện các lệnh kế tiếp
II, Giải thích các bước
a, Các thành phần
1 PC (Program Counter):
• PC (ô màu xanh lá) lưu địa chỉ của lệnh hiện tại cần thực thi Trong
hình, giá trị của PC là 00000114H (dạng thập lục phân), đây là địa chỉ của lệnh BEQ
• PC cung cấp địa chỉ này cho Instruction Memory để tải lệnh cần thực
hiện
2 Instruction Memory (IM):
• Instruction Memory (IM) (ô màu tím) dùng để tải lệnh được lưu trữ
tại địa chỉ được cung cấp bởi PC
• Trong trường hợp này, lệnh BEQ được tải về và chứa:
o Hai thanh ghi nguồn (rs và rt) dùng để so sánh
o Một giá trị immediate (giá trị hằng) dùng để tính địa chỉ đích
nếu nhảy
• Lệnh này được gửi tới Control Unit (CU) và Register File (RF) để
giải mã và xử lý
3 Control Unit (CU):
Trang 3• Control Unit (CU) (hình oval đỏ) chịu trách nhiệm giải mã lệnh từ
Instruction Memory Nó nhận diện opcode của lệnh BEQ và tạo ra các tín hiệu điều khiển cho các thành phần khác
• Đối với BEQ:
o CU điều khiển ALU thực hiện phép trừ (rs - rt) để so sánh
o Kích hoạt tín hiệu kiểm tra Zero Flag từ kết quả của ALU
o Nếu điều kiện nhánh đúng (Zero = 1), tín hiệu nhảy được kích hoạt
4 Register File (RF):
• Register File (RF) (khối màu tím-xanh) dùng để đọc giá trị của các
thanh ghi nguồn (rs và rt) được chỉ định trong lệnh BEQ
• Đối với BEQ:
o Read Address 1 và Read Address 2 chỉ định địa chỉ của hai
thanh ghi cần so sánh
o Giá trị đọc từ hai thanh ghi này được gửi tới ALU để thực hiện
phép so sánh
5 ALU (Arithmetic Logic Unit):
• ALU (khối màu hồng và tím) thực hiện phép trừ giữa hai giá trị từ các
thanh ghi (rs - rt)
• Nếu kết quả là 0 (hai thanh ghi bằng nhau), Zero Flag được đặt thành
1
• Zero Flag quyết định xem nhánh (branch) có được thực hiện hay
không
6 Adder (Tính địa chỉ lệnh kế tiếp):
• Song song với quá trình so sánh thanh ghi, Adder tính toán địa chỉ của
lệnh kế tiếp là PC + 4
• Đối với BEQ, nếu điều kiện nhánh đúng (Zero = 1), địa chỉ này sẽ được thay thế bằng địa chỉ nhảy đích
7 Shift Left 2 (Tính địa chỉ nhảy đích):
• Shift Left 2 dịch trái giá trị immediate trong lệnh BEQ lên 2 bit để đảm bảo địa chỉ căn chỉnh theo từ (word-aligned)
Trang 4• Giá trị này sau đó được cộng với PC + 4 để tính địa chỉ nhảy đích
b, Giải thích các bước chạy
Bước 1:
Mục tiêu của bước này là tải lệnh BEQ từ bộ nhớ chỉ dẫn (Instruction
Memory) dựa trên giá trị của Program Counter (PC) Quá trình diễn ra như
sau:
Cách Hình Tròn Di Chuyển trong Bước Thứ Nhất (Fetch):
Trong lệnh BEQ, khi dữ liệu hoặc tín hiệu đi qua các khối, hình tròn sẽ di chuyển theo luồng dữ liệu tương ứng:
Bắt đầu từ PC (Program Counter):
o Hình tròn xuất phát từ khối PC, biểu thị địa chỉ hiện tại (PC) của lệnh
BEQ
o Địa chỉ này được truyền qua đường dẫn dữ liệu (data bus) tới
Instruction Memory (IM)
Tới Instruction Memory (IM):
o Hình tròn di chuyển đến IM để biểu thị rằng lệnh tại địa chỉ PC đã
được truy cập và nạp vào
o Lệnh BEQ được giải mã tại Control Unit (CU)
Trang 5Đi tới Adder (Tính PC+4):
o Đồng thời, giá trị của PC được gửi tới Adder để tính toán địa chỉ của
lệnh kế tiếp (PC + 4)
o Hình tròn thể hiện rằng địa chỉ kế tiếp đã được tính toán xong và sẵn sàng sử dụng cho bước tiếp theo
Bước 2: Bước này nhằm giải mã lệnh BEQ và chuẩn bị dữ liệu cần thiết cho bước xử lý tiếp theo
1 Từ Instruction Memory đến Control Unit (CU):
o Sau khi lệnh BEQ được tải từ Instruction Memory (IM) ở bước trước, nó được gửi đến Control Unit (CU)
o Hình tròn di chuyển qua đường nối để biểu thị việc lệnh BEQ được giải mã trong CU
2 Giải mã lệnh trong CU:
o CU phân tích opcode của lệnh BEQ để xác định đây là lệnh rẽ
nhánh (Branch if Equal)
o Dựa trên opcode, CU tạo ra các tín hiệu điều khiển cho các thành phần khác:
▪ Điều khiển ALU thực hiện phép so sánh (rs - rt)
Trang 6▪ Tín hiệu kích hoạt Sign Extender để xử lý giá trị Immediate từ
lệnh
3 Tới Register File (RF):
o RF được kích hoạt bởi các tín hiệu từ CU
o Hình tròn di chuyển đến RF qua hai đường nối, biểu thị rằng hai địa chỉ thanh ghi nguồn (Read Addr 1 và Read Addr 2) được trích xuất
từ lệnh BEQ để đọc dữ liệu thanh ghi
o Giá trị hai thanh ghi (rs và rt) được truyền đến ALU để chuẩn bị so
sánh
4 Tới Sign Extender:
o Giá trị Immediate trong lệnh BEQ được gửi đến Sign Extender, nơi
nó được mở rộng dấu để tạo ra giá trị bù 2 (sign-extended value)
o Hình tròn minh họa dòng dữ liệu từ Sign Extender tới Shift Left 2 ở
bước tiếp theo
Bước 3:
1 Từ Register File (RF) Đến ALU:
o Hình tròn đầu tiên di chuyển từ Register File (RF) đến ALU, biểu
thị rằng:
▪ Hai giá trị đọc từ rs và rt (Read Data 1 và Read Data 2) đã được gửi đến ALU để chuẩn bị thực hiện phép toán so sánh
Trang 72 Từ Sign Extender đến Shift Left 2:
o Một luồng dữ liệu khác được biểu diễn bởi hình tròn di chuyển từ
Sign Extender đến Shift Left 2
o Tại đây, giá trị Immediate đã được mở rộng dấu (sign-extended) được dịch trái 2 bit để chuẩn bị cho bước tính toán địa chỉ nhánh trong bước sau
3 Từ CU Sang ALU CTRL:
o Hình tròn di chuyển từ Control Unit (CU) đến ALU Control (ALU CTRL):
▪ CU giải mã lệnh và xác định loại phép toán mà ALU phải thực
hiện Trong trường hợp này, CU phát tín hiệu để chỉ đạo ALU thực hiện phép trừ (ALU Operation = Subtraction)
▪ Tín hiệu từ CU đến ALU CTRL giúp thiết lập chế độ hoạt động của ALU, bảo đảm ALU so sánh đúng hai giá trị từ RF
4 Trong ALU:
o Hình tròn tiếp tục biểu diễn dữ liệu đang được xử lý trong ALU Tại đây, ALU thực hiện phép toán so sánh rs - rt
o Kết quả của phép toán được sử dụng để thiết lập tín hiệu Zero Flag:
▪ Zero Flag = 1 nếu hai giá trị bằng nhau (rs == rt)
▪ Zero Flag = 0 nếu hai giá trị khác nhau
5 Từ CU sang ALU CTRL:
Giải mã trong CU:
o CU phân tích lệnh BEQ và nhận diện rằng đây là lệnh nhánh dựa vào opcode
o Dựa trên loại lệnh, CU phát ra tín hiệu điều khiển đến ALU Control
Di chuyển tín hiệu:
o Tín hiệu từ CU đi qua đường dẫn điều khiển (control path) đến
ALU CTRL
Trang 8o Tại ALU CTRL, tín hiệu được dịch để định nghĩa phép toán cụ
thể mà ALU phải thực hiện (trong trường hợp này là phép trừ)
Tác động đến ALU:
o Sau khi nhận tín hiệu từ ALU CTRL, ALU thực hiện phép toán tương ứng Trong lệnh BEQ, phép toán là so sánh rs và rt bằng phép trừ để kiểm tra giá trị bằng nhau
Bước 4:Kiểm Tra Điều Kiện Nhảy Tại AND Gate
• Zero Flag từ ALU:
o Hình tròn sẽ di chuyển từ ALU (sau khi phép so sánh rs - rt hoàn tất) đến AND Gate, mang theo Zero Flag (tín hiệu kiểm tra nếu
Zero = 1)
o Zero Flag là kết quả của phép so sánh: 1 nếu rs == rt, 0 nếu khác nhau
• Branch Signal từ Control Unit (CU):
o Một hình tròn khác di chuyển từ CU đến AND Gate, mang theo tín hiệu nhánh (Branch Signal), cho biết đây là lệnh nhánh
(BEQ)
o AND Gate chỉ cho phép tín hiệu nhảy được kích hoạt nếu
Branch Signal = 1 (xác định lệnh là BEQ) và Zero Flag = 1
(hai giá trị thanh ghi bằng nhau)
• Kết quả tại AND Gate:
o Nếu cả hai tín hiệu (Zero Flag và Branch Signal) đều là 1, đầu
ra của AND Gate sẽ là 1, kích hoạt việc cập nhật PC với địa chỉ đích của nhánh
Bước 5: Xác định xem chương trình sẽ nhảy đến địa chỉ đích (branch target) hay tiếp tục thực thi lệnh tiếp theo
Trang 91 Từ Adder (PC + 4) Đến MUX:
o Hình tròn đầu tiên di chuyển từ Adder (đã tính PC + 4) đến MUX
o Giá trị này là địa chỉ của lệnh tiếp theo trong chương trình (nếu không xảy ra nhánh) và được truyền tới MUX như một trong hai đầu vào
2 Từ Shift Left 2 và Adder Đến MUX:
o Một luồng dữ liệu khác, biểu thị bởi hình tròn, di chuyển từ Shift Left 2 (đã xử lý Immediate bằng cách dịch trái 2 bit) đến Adder
thứ hai
o Adder thứ hai tính toán địa chỉ đích nhảy (branch target address)
bằng cách cộng giá trị dịch trái (Immediate << 2) với PC + 4
o Giá trị địa chỉ đích nhảy này cũng được truyền tới MUX như
đầu vào thứ hai
3 Từ ALU Đến AND Gate:
o Hình tròn từ ALU di chuyển đến AND Gate, mang theo tín hiệu Zero Flag
o Zero Flag = 1 nếu rs == rt, cho biết điều kiện nhảy được thỏa
mãn
4 Từ CU Đến AND Gate:
Trang 10o Một hình tròn khác di chuyển từ Control Unit (CU) đến AND Gate, mang theo tín hiệu nhánh (Branch Signal)
o Branch Signal = 1 nếu lệnh hiện tại là BEQ, xác định đây là
lệnh rẽ nhánh
5 Trong AND Gate:
o AND Gate nhận cả Zero Flag và Branch Signal:
▪ Nếu cả hai tín hiệu đều là 1, AND Gate đầu ra 1, kích hoạt MUX chọn địa chỉ đích nhảy
▪ Nếu bất kỳ tín hiệu nào là 0, AND Gate đầu ra 0, MUX sẽ chọn
PC + 4 làm giá trị cập nhật cho PC
Bước 6:
Từ MUX Đến PC:
o Hình tròn cuối cùng di chuyển từ MUX đến PC:
▪ Nếu nhánh xảy ra (AND Gate = 1), giá trị địa chỉ đích nhảy (branch
target address) được ghi vào PC
▪ Nếu không nhảy (AND Gate = 0), giá trị PC + 4 được ghi vào PC
III, Ý nghĩa lệnh BEQ theo trong kiến trúc MIPS
Định dạng: BEQ rs, rt, offset [I-type]
Trang 11Mục đích: Để so sánh GPR sau đó thực hiện một nhánh có điều kiện tương
đối PC
Mô tả: nếu (rs = rt) thì nhánh độ lệch có dấu 18 bit (trường bù 16 bit dịch
chuyển sang trái 2 bit) được thêm vào địa chỉ của lệnh theo sau nhánh (không phải chính nhánh), trong khe trễ nhánh, để tạo thành địa chỉ mục tiêu hiệu quả tương đối PC
Nếu nội dung của GPR rs và GPR rt bằng nhau, hãy phân nhánh đến địa chỉ mục tiêu hiệu quả sau khi lệnh trong khe trễ được thực thi
Hạn chế: Không có
Hoạt động:
I:
tgt_offset <- sign_extend(offset || 02)
condition <- (GPR[rs] = GPR[rt])
I+1:
if condition then
PC <- PC + tgt_offset
endif
Ngoại lệ: Không có
Ghi chú lập trình: Với độ lệch lệnh có dấu 18 bit, phạm vi nhánh có điều
kiện là ± 128 KBytes Sử dụng hướng dẫn nhảy (J) hoặc thanh ghi nhảy (JR)
để phân nhánh đến các địa chỉ xa hơn
IV, Kết luận
Lệnh BEQ (Branch if Equal) trong MIPS là một lệnh quan trọng thuộc loại I-type, được thiết kế để thực hiện việc kiểm tra tính bằng nhau giữa hai thanh ghi nguồn và nhảy đến một địa chỉ khác trong chương trình nếu điều kiện này được thỏa mãn BEQ góp phần tối ưu hóa quá trình điều khiển luồng chương trình, cho phép thực thi các cấu trúc điều kiện và vòng lặp một cách hiệu quả