Thanh ghi cờ (flag register) là một thanh ghi 16-bit đặc biệt trong bộ vi xử lý Intel 8086, chứa thông tin về trạng thái của bộ xử lý sau khi thực hiện một lệnh. Nó còn được gọi là thanh ghi trạng thái (status register) vì nó chứa các cờ trạng thái (status flags) phản ánh kết quả của thao tác cuối cùng được bộ xử lý thực hiện.
Thanh ghi cờ là một thành phần quan trọng của bộ vi xử lý 8086 vì nó được sử dụng để xác định hoạt động của nhiều lệnh nhảy và rẽ nhánh có điều kiện. Các cờ khác nhau trong thanh ghi cờ được đặt hoặc xóa dựa trên kết quả của các phép toán số học, logic và các lệnh khác được bộ xử lý thực hiện.
Thanh ghi cờ được chia thành các trường bit khác nhau, mỗi bit đại diện cho một cờ cụ thể. Một số cờ quan trọng trong thanh ghi cờ bao gồm cờ nhớ (Carry Flag – CF), cờ zero (Zero Flag – ZF), cờ dấu (Sign Flag – SF), cờ tràn (Overflow Flag – OF), cờ chẵn lẻ (Parity Flag – PF) và cờ nhớ phụ (Auxiliary Carry Flag – AF). Các cờ này được bộ xử lý sử dụng để xác định kết quả của các lệnh nhảy có điều kiện và các lệnh rẽ nhánh khác.
Hình 1: Sơ đồ flag register trong bộ vi xử lý 8086. Flag Register Diagram thể hiện rõ ràng vị trí và chức năng của từng cờ.
Có tổng cộng 9 cờ trong 8086 và thanh ghi cờ được chia thành hai loại:
(a) Cờ Trạng Thái (Status Flags): Có 6 cờ trạng thái trong bộ vi xử lý 8086, được đặt (1) hoặc xóa (0) tùy thuộc vào điều kiện sau thao tác 8-bit hoặc 16-bit. 5 trong số các cờ này giống như trong bộ vi xử lý 8085 và cách hoạt động của chúng cũng giống như trong 8085. Cờ thứ sáu là cờ tràn. 6 cờ trạng thái là:
- Cờ Dấu (Sign Flag – S): Cho biết kết quả là âm hay dương.
- Cờ Zero (Zero Flag – Z): Cho biết kết quả bằng không hay không.
- Cờ Nhớ Phụ (Auxiliary Carry Flag – AC): Cho biết có nhớ từ bit 3 sang bit 4 trong một phép toán BCD hay không.
- Cờ Chẵn Lẻ (Parity Flag – P): Cho biết số lượng bit 1 trong kết quả là chẵn hay lẻ.
- Cờ Nhớ (Carry Flag – CY): Cho biết có nhớ ra khỏi bit cao nhất trong một phép toán hay không.
- Cờ Tràn (Overflow Flag – O): Cờ này sẽ được đặt (1) nếu kết quả của một phép toán có dấu quá lớn so với số bit khả dụng để biểu diễn nó, ngược lại sẽ được xóa (0).
(b) Cờ Điều Khiển (Control Flags): Các cờ điều khiển cho phép hoặc vô hiệu hóa một số hoạt động nhất định của bộ vi xử lý. Có 3 cờ điều khiển trong bộ vi xử lý 8086:
- Cờ Hướng (Directional Flag – D): Cờ này được sử dụng cụ thể trong các lệnh chuỗi. Nếu cờ hướng được đặt (1), thì truy cập dữ liệu chuỗi từ vị trí bộ nhớ cao hơn đến vị trí bộ nhớ thấp hơn. Nếu cờ hướng được xóa (0), thì truy cập dữ liệu chuỗi từ vị trí bộ nhớ thấp hơn đến vị trí bộ nhớ cao hơn.
- Cờ Ngắt (Interrupt Flag – I): Cờ này dành cho ngắt. Nếu cờ ngắt được đặt (1), bộ vi xử lý sẽ nhận ra các yêu cầu ngắt từ các thiết bị ngoại vi. Nếu cờ ngắt được xóa (0), bộ vi xử lý sẽ không nhận ra bất kỳ yêu cầu ngắt nào và sẽ bỏ qua chúng.
- Cờ Bẫy (Trap Flag – T): Cờ này được sử dụng để gỡ lỗi trên chip. Việc đặt cờ bẫy sẽ đưa bộ vi xử lý vào chế độ từng bước để gỡ lỗi.
Ứng dụng của Flag Register trong Bộ Vi Xử Lý 8086:
Flag register trong bộ vi xử lý 8086 có một số ứng dụng quan trọng, bao gồm:
- Rẽ nhánh có điều kiện: Các cờ trong flag register có thể được sử dụng để điều khiển rẽ nhánh có điều kiện trong lập trình hợp ngữ.
- Phép toán số học và logic: Flag register được sử dụng để lưu trữ kết quả của các phép toán số học và logic.
- Phát hiện và xử lý lỗi: Flag register có thể được sử dụng để phát hiện các lỗi và ngoại lệ.
- Gỡ lỗi: Flag register cung cấp một cách thuận tiện để truy cập thông tin quan trọng về trạng thái của bộ xử lý.
- Tối ưu hóa: Flag register có thể được sử dụng để tối ưu hóa hiệu suất của các chương trình hợp ngữ. Việc phân tích flag register diagram giúp hiểu rõ hơn cách thức hoạt động và tối ưu hóa chương trình.