Giải mã mã vi mô của Intel 8087: Cơ chế hoán đổi thanh ghi phức tạp
Intel 8087 là bộ đồng xử lý dấu phẩy động mang tính cách mạng ra mắt năm 1980. Bài viết đi sâu vào phân tích mã vi mô (microcode) của lệnh FXCH, tiết lộ rằng ngay cả thao tác hoán đổi dữ liệu đơn giản cũng đòi hỏi 14 bước xử lý phức tạp để quản lý ngăn xếp và xử lý ngoại lệ.

Vào năm 1980, Intel đã giới thiệu chip 8087, một bộ đồng xử lý (coprocessor) chuyên xử lý số thực dấu phẩy động có khả năng tăng tốc độ tính toán lên tới 100 lần. Chip này có ảnh hưởng to lớn đến ngành công nghiệp, và tiêu chuẩn dấu phẩy động mà nó giới thiệu vẫn được các bộ vi xử lý sử dụng ngày nay.
Để tính toán chính xác các hàm phức tạp như căn bậc hai, tang hay hàm mũ, 8087 sử dụng các thuật toán phức tạp được triển khai bên trong chip dưới dạng mã cấp thấp gọi là microcode (mã vi mô). Trong bài viết này, chúng ta sẽ cùng nhóm Opcode Collective giải mã cấu trúc microcode của lệnh FXCH (Floating-point Exchange) để xem cách thức hoạt động bên trong "bộ não" của chip lịch sử này.
Die của chip Intel 8087 với các khối chức năng chính được dán nhãn
Lệnh FXCH được sử dụng để hoán đổi giá trị của hai thanh ghi dấu phẩy động. Mặc dù nghe có vẻ đơn giản, nhưng thực tế lệnh này yêu cầu tới 14 micro-instruction (lệnh vi mô) để thực hiện. Để hiểu rõ, chúng ta cần nhìn vào cấu trúc vật lý của chip.
Cấu trúc của Intel 8087 và Microcode
Chip 8087 được đóng gói trong một hộp DIP 40 chân. Khi quan sát die (lõi silicon) dưới kính hiển vi, chúng ta thấy ROM microcode chiếm vị trí trung tâm, lưu trữ các lệnh điều khiển chip. Phần dưới cùng của chip là "datapath" (đường dẫn dữ liệu), nơi thực hiện các phép tính, được chia thành hai phần: đường dẫn 16-bit cho số mũ (exponent) và đường dẫn 64-bit cho phần trị (significand).
Cấu trúc của một micro-instruction trên Intel 8087
8087 có 8 thanh ghi ngăn xếp (stack registers) để lưu trữ số trong quá trình tính toán. Điểm đặc biệt là các thanh ghi này được tổ chức dưới dạng ngăn xếp, nơi dữ liệu được đẩy (push) vào hoặc lấy (pop) ra. Ngoài ra, chip còn có các thanh ghi tạm thời (tmpA, tmpB) dùng cho nội bộ.
Mỗi micro-instruction dài 16 bit, quy định một thao tác đơn giản như di chuyển dữ liệu, cộng hai giá trị hoặc dịch chuyển bit. Có nhiều loại lệnh vi mô, từ chuyển dữ liệu, dịch chuyển barrel shifter, đến các lệnh nhảy có điều kiện.
Cách thức lưu trữ dữ liệu và Tag bit
Bên trong 8087, mọi dữ liệu đều được chuẩn hóa về dạng số thực 80-bit, bao gồm 64-bit phần trị, 15-bit số mũ và 1-bit dấu. Một tính năng quan trọng liên quan đến lệnh FXCH là hệ thống "tag" (nhãn).
Mỗi giá trị trong thanh ghi ngăn xếp đều đi kèm 2 bit tag để đánh dấu loại dữ liệu:
- Valid: Giá trị số thực bình thường.
- Special: Vô cực (Infinity), Không phải số (NaN), hoặc giá trị không chuẩn.
- Zero: Giá trị bằng 0.
- Empty: Thanh ghi trống (đã bị pop khỏi ngăn xếp).
Hệ thống tag giúp 8087 tối ưu hóa hiệu suất và phát hiện lỗi. Ví dụ, nếu lập trình viên cố đọc một thanh ghi được đánh dấu là "Empty", chip sẽ phát sinh ngoại lệ "invalid operation".
Phân tích luồng hoạt động của lệnh FXCH
Lệnh FXCH hoán đổi thanh ghi ở đỉnh ngăn xếp ST(0) với một thanh ghi khác ST(i) được chỉ định. Microcode của lệnh này bao gồm 14 bước, xử lý cả trường hợp bình thường và trường hợp ngoại lệ.
Dưới đây là quy trình rút gọn của microcode FXCH:
- Đọc dữ liệu: Đầu tiên, lệnh vi mô chuyển giá trị từ ST(0) vào thanh ghi tạm tmpA. Sau đó, đọc giá trị từ ST(i) vào tmpB.
- Kiểm tra điều kiện: Microcode kiểm tra bit tag của cả hai thanh ghi tạm. Nếu cả hai đều không rỗng, nó sẽ nhảy đến bước ghi dữ liệu (bước "happy path").
- Xử lý ngoại lệ: Nếu một trong hai thanh ghi rỗng, microcode sẽ thiết lập cờ ngoại lệ "invalid". Nếu ngoại lệ này không bị che (unmasked), chip sẽ ngắt xử lý để CPU chính xử lý ngắt. Nếu bị che (masked), microcode sẽ thay thế giá trị rỗng bằng NaN (Not a Number - Không phải số).
- Hoán đổi dữ liệu: Tại bước #0210, dữ liệu thực sự được hoán đổi. Giá trị từ tmpB được ghi vào ST(0) và giá trị từ tmpA được ghi vào ST(i).
- Kết thúc: Lệnh RNI (Run Next Instruction) dừng động cơ microcode và chuẩn bị cho lệnh tiếp theo.
Tập hợp thanh ghi của Intel 8087 như được nhìn thấy bởi lập trình viên
Điều thú vị là sự xuất hiện của các lệnh NOP (No Operation). Các lệnh này được chèn vào giữa các lần đọc/ghi thanh ghi, có thể là do các ràng buộc về thời gian (timing constraints) của phần cứng. Ngoài ra, việc có 3 lệnh NOP thừa ở cuối routine cho thấy mã microcode có thể đã được rút ngắn trong quá trình phát triển.
Hệ thống ngoại lệ phức tạp
8087 có cơ chế xử lý ngoại lệ rất chi tiết với 6 loại: thao tác không hợp lệ, số không chuẩn, chia cho 0, tràn số, dưới số và mất độ chính xác. Lập trình viên có thể chọn cách xử lý: tạo ngắt để phần mềm can thiệp hoặc "che" (mask) ngoại lệ để chip tự động xử lý theo cách hợp lý nhất (ví dụ: thay kết quả tràn số bằng Vô cực).
Việc xử lý ngoại lệ được chia sẻ giữa microcode và phần cứng. Microcode phát hiện lỗi và thiết lập các cờ (latch), trong khi phần cứng kết hợp các cờ này với thanh ghi điều khiển để quyết định có gửi ngắt tới CPU 8086 hay không.
Quá trình trích xuất Microcode
ROM microcode của 8087 chứa 26.368 bit, quy định 1.648 lệnh vi mô. Để lưu trữ lượng dữ liệu lớn này trên die thời bấy giờ, Intel đã sử dụng một loại ROM đặc biệt lưu trữ 2 bit trên mỗi transistor bằng cách sử dụng 4 kích thước transistor khác nhau tạo ra 4 mức điện áp.
Để giải mã, nhóm nghiên cứu đã chụp ảnh độ phân giải cao sau khi loại bỏ lớp kim loại, sử dụng mạng nơ-ron để phân loại kích thước transistor, và ánh xạ các transistor thành các bit 0 và 1. Do các bản quyền sáng chế không tiết lộ chi tiết microcode của 8087 (khác với 8086), nhóm phải dựa vào việc phân tích mạch điện, tìm kiếm mẫu mã và suy luận logic để tái tạo lại ý nghĩa của các lệnh.
Dù đã đạt được nhiều tiến bộ, microcode của 8087 vẫn còn nhiều bí ẩn do các thiết kế đặc biệt và các trường hợp ngoại lệ "hacks" mà các kỹ sư Intel đã sử dụng để đẩy giới hạn công nghệ thời đó.
Bài viết liên quan

Công nghệ
Đánh giá Corsair Galleon 100 SD: Khi Stream Deck được tích hợp ngay trên bàn phím
27 tháng 5, 2026

Công nghệ
CEO Palantir: 10% thế giới "ghét chúng tôi một cách chuyên nghiệp"
05 tháng 5, 2026

Công nghệ
Các tác nhân AI đã khiến thế giới công nghệ chao đảo: Câu chuyện đằng sau cuộc cách mạng Claude Code và OpenClaw
26 tháng 5, 2026
