Về 0xCC
và 0xCD
đặc biệt, đây là những di tích từ Intel 8088 / 8086 hướng dẫn xử lý bộ trở lại trong năm 1980. 0xCC
là một trường hợp đặc biệt của phần mềm ngắt opcode . Phiên bản byte đơn đặc biệt cho phép chương trình tạo ngắt 3 .INT
0xCD
0xCC
Mặc dù về nguyên tắc, các số ngắt phần mềm là tùy ý, INT 3
được sử dụng cho chức năng ngắt hoặc gỡ lỗi của trình gỡ lỗi , một quy ước còn tồn tại cho đến ngày nay. Bất cứ khi nào trình gỡ lỗi được khởi chạy, nó sẽ cài đặt trình xử lý ngắt để khi opcode đó được thực thi, trình gỡ lỗi sẽ được kích hoạt. Thông thường, nó sẽ tạm dừng chương trình hiện đang chạy và hiển thị lời nhắc tương tác.INT 3
Thông thường, INT
opcode x86 là hai byte: 0xCD
theo sau là số ngắt mong muốn từ 0-255. Bây giờ mặc dù bạn có thể phát hành 0xCD 0x03
cho INT 3
, Intel đã quyết định thêm một đặc biệt version-- 0xCC
không có byte thêm - bởi vì một opcode phải chỉ có một byte để chức năng như một đáng tin cậy 'điền byte' cho bộ nhớ không sử dụng.
Vấn đề ở đây là cho phép phục hồi một cách duyên dáng nếu bộ xử lý nhảy nhầm vào bộ nhớ không chứa bất kỳ hướng dẫn dự định nào . Các lệnh nhiều byte không phù hợp với mục đích này vì một bước nhảy sai có thể hạ cánh ở bất kỳ độ lệch byte nào có thể xảy ra khi nó phải tiếp tục với luồng lệnh được tạo đúng.
Rõ ràng, các mã một byte hoạt động tầm thường cho việc này, nhưng cũng có thể có các ngoại lệ kỳ quặc: ví dụ, xem xét chuỗi điền 0xCDCDCDCD
(cũng được đề cập trên trang này), chúng ta có thể thấy rằng nó khá đáng tin cậy vì dù con trỏ lệnh có hạ cánh ở đâu ( ngoại trừ có lẽ là byte đầy cuối cùng), CPU có thể tiếp tục thực hiện một lệnh x86 hai byte hợp lệ CD CD
, trong trường hợp này để tạo ra phần mềm ngắt 205 (0xCD).
Weirder vẫn còn, trong khi CD CC CD CC
có thể hiểu được 100% - đưa ra một INT 3
hoặc INT 204
- trình tự CC CD CC CD
ít đáng tin cậy hơn, chỉ 75% như được hiển thị, nhưng nói chung là 99,99% khi được lặp lại dưới dạng bộ nhớ kích thước int.
Tham chiếu trình biên dịch macro , 1987