Khối số học và logic (ALU)

2.1.2. Khối số học và logic (ALU)

Khối số học và logic (Arithmetic Logic Unit – ALU) là “trung tâm chế biến dữ liệu” nằm bên trong đường dẫn dữ liệu (Datapath) của CPU. Mọi công việc liên quan đến tính toán số liệu hay kiểm tra điều kiện logic của phần mềm máy tính đều do khối này trực tiếp đảm nhiệm.

Hình 2.2: Sơ đồ chức năng của khối số học và logic (ALU) cùng cơ chế phát sinh cờ trạng thái (Zero, Carry, Overflow, Sign) trong CPU (Hình minh họa tạo bởi Google Gemini).

2.1.2.1. Cấu tạo chức năng của ALU trong xử lý dữ liệu

  • Vị trí và vai trò chức năng:

    • ALU là mạch điện tử số tổ hợp đảm nhiệm việc biến đổi dữ liệu thực tế bên trong CPU.

    • ALU không tự ý chạy mà hoạt động dưới sự giám sát và ra lệnh của Khối điều khiển (CU).

    • Kết quả sau khi tính toán tại ALU vừa tạo ra dữ liệu mới, vừa phát sinh các trạng thái giúp CPU quyết định hướng thực hiện lệnh tiếp theo.

  • Các cổng giao tiếp chức năng của ALU:

    • Các đầu vào nhận dữ liệu (Inputs):

      • Nhận hai luồng dữ liệu nhị phân cần xử lý, thường gọi là Toán hạng A và Toán hạng B.

      • Một toán hạng thường được lấy cố định từ thanh ghi tích lũy (Accumulator – ACC) hoặc thanh ghi làm việc.

      • Toán hạng còn lại được lấy từ bộ nhớ RAM đưa qua thanh ghi đệm dữ liệu (MDR) hoặc từ một thanh ghi đa năng khác thông qua tuyến Bus nội bộ.

    • Đầu vào nhận tín hiệu điều khiển (Operation Code / Function Select):

      • Là các đường dây tín hiệu đến từ Khối điều khiển CU.

      • Tín hiệu này báo cho mạch điện ALU biết phải kích hoạt phép toán cụ thể nào (ví dụ: làm phép cộng, phép trừ, phép AND hay phép đảo bit).

    • Đầu ra kết quả (Data Output):

      • Đường dây đưa dãy bit kết quả sau khi xử lý quay trở lại lưu vào thanh ghi tích lũy (ACC) hoặc đưa ra Bus nội bộ để nạp vào các thanh ghi khác.

    • Đầu ra trạng thái (Status Outputs):

      • Tập hợp các đường dây đơn bit phản ánh thuộc tính của kết quả vừa tính xong.

      • Các bit này được đưa thẳng vào thanh ghi cờ trạng thái (Status Register / Flags / PSW).

  • Các mô-đun mạch thành phần bên trong ALU:

    • Mạch cộng nhị phân (Adder / Full Adder):

      • Là mạch cơ bản và quan trọng nhất của ALU.

      • Mạch cộng thực hiện việc cộng các bit nhị phân và lan truyền bit nhớ. Nhờ mạch cộng này, CPU thực hiện được cả phép cộng và phép trừ thông qua phương pháp số bù hai.

    • Mạch xử lý logic (Logic Gates Unit):

      • Bao gồm hệ thống các cổng logic căn bản (AND, OR, NOT, XOR) ghép song song.

      • Thực hiện các thao tác so sánh, ghép mặt nạ bit và đảo trạng thái bit trên từng hàng nhị phân độc lập.

    • Mạch dịch bit (Shifter):

      • Cho phép dời toàn bộ chuỗi bit sang trái hoặc sang phải.

      • Mạch dịch bit giúp tăng tốc độ thực hiện các phép nhân chia với lũy thừa của 2 và xử lý mặt nạ địa chỉ mạng.

2.1.2.2. Nguyên lý thực hiện các phép toán học và cờ trạng thái (Zero, Carry, Overflow, Sign)

Nguyên lý thực hiện các phép toán của ALU:

  • Thực hiện phép toán số học (Arithmetic):
    • Phép cộng (ADD): ALU nhận hai số nhị phân, tiến hành cộng từng cột bit từ phải qua trái (từ hàng thấp LSB sang hàng cao MSB) và chuyển tiếp các giá trị nhớ sang hàng liền kề.
    • Phép trừ (SUB): Để tiết kiệm diện tích bán dẫn và đơn giản hóa mạch điện, ALU không dùng bộ trừ riêng mà chuyển phép tính A – B thành phép cộng với số bù hai: A + (-B). Số trừ B sẽ được đảo tất cả các bit (bù một) rồi cộng thêm 1 để ra số bù hai, sau đó đưa vào bộ cộng với số A.
    • Phép nhân và chia (MUL/DIV): Được ALU phối hợp giữa phép cộng/trừ lặp lại nhiều lần kết hợp thao tác dịch bit nhịp nhàng trên thanh ghi.
  • Thực hiện phép toán logic (Bitwise Logic):
    • Phép toán logic diễn ra trên từng cặp bit tương ứng của hai toán hạng mà không có sự nhớ sang hàng bên cạnh.
    • Phép AND: Cho ra kết quả là 1 khi cả hai bit đều là 1. Trong quản trị mạng, phép AND được CPU của máy tính và Router sử dụng để làm phép tính nhân địa chỉ IP với Subnet Mask nhằm tìm ra Network ID của mạng.
    • Phép OR: Cho ra kết quả là 1 khi chỉ cần một trong hai bit là 1.
    • Phép XOR: Cho ra kết quả là 1 khi hai bit có giá trị khác nhau, ra 0 khi hai bit giống nhau. Phép toán này dùng trong kiểm tra tính toàn vẹn gói tin và mã hóa dữ liệu.
    • Phép NOT: Đảo giá trị từng bit (từ 0 thành 1 và từ 1 thành 0).

Bản chất và vai trò của các Cờ trạng thái (Flags):

  • Cờ trạng thái là các phần tử nhớ 1-bit được đặt trong thanh ghi cờ trạng thái (Program Status Word – PSW / Flags Register).
  • Sau mỗi lần ALU hoàn tất một phép tính, các cờ này tự động thay đổi giá trị (bật lên mức 1 hoặc hạ về mức 0) để phản ánh tính chất của kết quả.
  • Các lệnh rẽ nhánh có điều kiện (JUMP/BRANCH) dựa vào giá trị của các cờ này để quyết định xem chương trình nên rẽ sang nhánh nào.

Bốn cờ trạng thái quan trọng nhất:

  • Cờ Zero (Ký hiệu: Z):
    • Ý nghĩa: Báo hiệu kết quả của phép toán vừa thực hiện có bằng 0 hay không.
    • Trạng thái: Z = 1 khi toàn bộ các bit của kết quả đều bằng 0; Z = 0 khi kết quả có ít nhất một bit khác 0.
    • Ứng dụng: Dùng nhiều nhất trong các lệnh so sánh. Ví dụ khi so sánh hai giá trị A và B, CPU thực hiện phép trừ ảo A – B; nếu Z = 1 nghĩa là hai giá trị bằng nhau, chương trình sẽ kích hoạt lệnh nhảy tương ứng.
  • Cờ nhớ Carry (Ký hiệu: C):
    • Ý nghĩa: Báo hiệu hiện tượng mượn hoặc có nhớ vượt ra ngoài kích thước ô chứa đối với các phép tính số nguyên không dấu (Unsigned numbers).
    • Trạng thái: C = 1 khi phép cộng làm phát sinh một bit nhớ vượt ra khỏi vị trí bit cao nhất (MSB), hoặc khi phép trừ cần mượn một lượng từ bên ngoài; ngược lại C = 0.
    • Ứng dụng: Giúp máy tính có thể ghép nhiều byte hoặc nhiều thanh ghi nhỏ lại với nhau để thực hiện các phép tính trên những con số có kích thước lớn hơn độ rộng bit của CPU.
  • Cờ tràn số Overflow (Ký hiệu: O hoặc V):
    • Ý nghĩa: Báo hiệu hiện tượng tràn số trong các phép tính với số nguyên có dấu (Signed numbers – dùng quy ước biểu diễn số bù hai).
    • Trạng thái: O = 1 khi kết quả của phép tính vượt ra ngoài phạm vi biểu diễn cho phép của thanh ghi, khiến dấu của kết quả bị sai lệch (ví dụ: cộng hai số dương lại ra số âm, hoặc cộng hai số âm lại ra số dương); O = 0 khi kết quả tính toán nằm an toàn trong giới hạn.
    • Phân biệt giữa Carry (C) và Overflow (O): Cờ Carry dùng để phát hiện tràn bộ nhớ khi lập trình viên coi dữ liệu là số không dấu, trong khi cờ Overflow dùng để phát hiện lỗi tính toán sai kết quả khi xem dữ liệu là số có dấu bù hai.
  • Cờ dấu Sign / Negative (Ký hiệu: S hoặc N):
    • Ý nghĩa: Cho biết kết quả phép toán vừa hoàn tất là một số âm hay số dương.
    • Trạng thái: Giá trị của cờ S luôn sao chép trực tiếp giá trị của bit có trọng số cao nhất (bit MSB – bit dấu) của kết quả. S = 1 khi kết quả là số âm (bit đầu là 1); S = 0 khi kết quả là số dương hoặc bằng 0 (bit đầu là 0).
    • Ứng dụng: Được sử dụng để đánh giá các điều kiện so sánh như “nhỏ hơn” hoặc “lớn hơn” trong các thuật toán điều khiển luồng.