Vi xử lý 8086 là một trong những con chip quan trọng nhất từng được tạo ra do vai trò của nó trong việc phát triển kiến trúc dựa trên x86. Một khía cạnh quan trọng của bộ vi xử lý này là nó chứa các thanh ghi đa năng. Hiệu quả và tốc độ tính toán trong bộ xử lý bị ảnh hưởng bởi các thanh ghi này vì chúng xác định việc thực hiện các phép toán số học và thao tác dữ liệu. Hiểu rõ các thanh ghi này là rất quan trọng để tối ưu hóa mã cũng như lập trình ngôn ngữ assembly và thiết kế hệ thống.
Bộ vi xử lý 8086 chứa một tập hợp các thanh ghi đa năng 16 bit được sử dụng để thực hiện các phép toán số học, logic và di chuyển dữ liệu khác nhau. Vì các thanh ghi này rất linh hoạt và có thể giả định các kết hợp khác nhau để thực hiện các chức năng khác nhau, chúng tạo thành các đơn vị hoạt động cơ bản của chính bộ xử lý.
Các thanh ghi đa năng được sử dụng để lưu trữ dữ liệu tạm thời trong bộ vi xử lý.
Có 8 thanh ghi đa năng trong bộ vi xử lý 8086.
1. AX: Đây là thanh ghi tích lũy. Nó có 16 bit và được chia thành hai thanh ghi 8 bit AH và AL để thực hiện các lệnh 8 bit. Nó thường được sử dụng cho các lệnh số học và logic nhưng trong bộ vi xử lý 8086, không bắt buộc phải có thanh ghi tích lũy làm toán hạng đích. Ví dụ:
ADD AX, AX (AX = AX + AX)
2. BX: Đây là thanh ghi cơ sở. Nó có 16 bit và được chia thành hai thanh ghi 8 bit BH và BL để thực hiện các lệnh 8 bit. Nó được sử dụng để lưu trữ giá trị của offset. Ví dụ:
MOV BL, [500] (BL = 500H)
3. CX: Đây là thanh ghi đếm. Nó có 16 bit và được chia thành hai thanh ghi 8 bit CH và CL để thực hiện các lệnh 8 bit. Nó được sử dụng trong vòng lặp và xoay. Ví dụ:
MOV CX, 0005 LOOP
4. DX: Đây là thanh ghi dữ liệu. Nó có 16 bit và được chia thành hai thanh ghi 8 bit DH và DL để thực hiện các lệnh 8 bit. Nó được sử dụng trong phép nhân và địa chỉ cổng vào/ra. Ví dụ:
MUL BX (DX, AX = AX * BX)
5. SP: Đây là con trỏ ngăn xếp. Nó có 16 bit. Nó trỏ đến mục trên cùng của ngăn xếp. Nếu ngăn xếp trống, con trỏ ngăn xếp sẽ là (FFFE)H. Địa chỉ offset của nó là tương đối so với phân đoạn ngăn xếp. Nó được sử dụng để quản lý vị trí hiện tại của đầu ngăn xếp. Ví dụ: Để đẩy hoặc lấy dữ liệu từ ngăn xếp trong một lệnh gọi hàm, SP sẽ bị thay đổi.
PUSH R1 ; Giảm SP và sau đó lưu trữ giá trị của R1 tại SP.
R1 = POP; R1 = tăng SP; R1 = lấy giá trị trong SP
6. BP: Đây là con trỏ cơ sở. Nó có 16 bit. Nó chủ yếu được sử dụng để truy cập các tham số được truyền bởi ngăn xếp. Địa chỉ offset của nó là tương đối so với phân đoạn ngăn xếp.
MOV AX, [BP+4] ; Truy cập một tham số được truyền cho hàm (4 byte trên BP trong Ngăn xếp)
7. SI: Đây là thanh ghi chỉ mục nguồn. Nó có 16 bit. Nó được sử dụng trong địa chỉ con trỏ của dữ liệu và làm nguồn trong một số hoạt động liên quan đến chuỗi. Offset của nó là tương đối so với phân đoạn dữ liệu.
MOV AL, [SI] ; Di chuyển byte tại địa chỉ được trỏ bởi SI vào thanh ghi AL (được sử dụng làm con trỏ đến dữ liệu nguồn).
8. DI: Đây là thanh ghi chỉ mục đích. Nó có 16 bit. Nó được sử dụng trong địa chỉ con trỏ của dữ liệu và làm đích trong một số hoạt động liên quan đến chuỗi. Offset của nó là tương đối so với phân đoạn bổ sung.
MOV [DI], AL; Di chuyển byte trong AL đến địa chỉ được trỏ bởi DI (dùng làm đích cho dữ liệu).
Ưu điểm của việc sử dụng thanh ghi đa năng bao gồm tính linh hoạt, hiệu quả và dễ sử dụng. Tuy nhiên, cũng có những hạn chế như số lượng hạn chế, giới hạn kích thước và độ phức tạp trong quản lý.
Các chế độ của bộ vi xử lý 8086 rất quan trọng vì nó mang lại cho chúng khả năng hoạt động, do đó tạo ra khả năng xử lý các tác vụ khác nhau một cách thân thiện và hiệu quả. Mỗi thanh ghi có công dụng và vai trò riêng nhưng điều này không có nghĩa là nó không thể được sử dụng trong các lĩnh vực khác. Do đó, nếu các lập trình viên biết các thanh ghi này và các tác vụ mà chúng được sử dụng, thì họ có khả năng phát triển mã assembly tốt hơn, các chương trình được tối ưu hóa tốt cho các hệ thống dựa trên 8086. Điều này cho phép dữ liệu được lưu trữ trong các thanh ghi này có thể dễ dàng truy cập và được sửa đổi vì đây là một trong những nguyên tắc trong thiết kế hệ thống, thường thấy trong lập trình cấp thấp.