Đối với tất cả các CPU, có thứ gì đó giống như "không gian opcode". Ví dụ, nếu một CPU sử dụng 8-bit opcodes thì sẽ có một max. trong số 256 hướng dẫn có thể có. Các opcodes lớn hơn là nhiều opcodes bạn có thể có, nhưng khó khăn hơn để lấy và giải mã chúng một cách nhanh chóng.
80x86 là kiến trúc tương đối cũ. Nó bắt đầu với một không gian opcode khiêm tốn bao gồm chủ yếu là 1-byte và 2-byte opcodes. Mỗi khi các nhà sản xuất CPU thêm một tính năng mới, nó sẽ mất nhiều opcodes hơn từ không gian opcode. Họ chạy ra khỏi opcodes. Họ nhanh chóng chạy ra ngoài.
Để giải quyết vấn đề, họ bắt đầu thực hiện những việc như thêm mã thoát và tiền tố để mở rộng không gian opcode giả tạo. Ví dụ, đối với các hướng dẫn AVX gần đây bạn đang xem tiền tố VEX theo sau là mã thoát cũ/tái chế (ví dụ 0xF0), tiếp theo là tiền tố kích thước địa chỉ/toán hạng cũ/tái chế (ví dụ 0x66), tiếp theo là 4 byte khác . Nó không đẹp.
Đồng thời có hướng dẫn cũ hiếm khi được sử dụng hiện nay (AAD, AAM, v.v.) và hướng dẫn có nhiều opcodes dư thừa (INC/DEC) đã tiêu thụ opcodes "1 byte" có giá trị. Những không thể/không thể được loại bỏ hoàn toàn do khả năng tương thích ngược.
Tuy nhiên; khi 64-bit được thiết kế, đơn giản là không có mã 64-bit nào tương thích với - khả năng tương thích ngược không quan trọng. Các opcode 1-byte được tiêu thụ bởi các lệnh "không quan trọng" có thể được tái chế; làm cho các lệnh đó không hợp lệ trong mã 64 bit (nhưng giải phóng một số mã opcode 1 byte có giá trị).
Hầu hết các mã vạch 1 byte này (toàn bộ nhóm INC/DEC 1 byte nếu tôi nhớ đúng) đã được tái chế ngay lập tức cho tiền tố REX cần để hỗ trợ các toán hạng 64 bit. Một số không và đã trở thành "miễn phí cho các phần mở rộng trong tương lai" (với sự hạn chế rằng phần mở rộng chỉ có thể làm việc trong mã 64-bit bởi vì những hướng dẫn vẫn còn hợp lệ trong mã 16-bit và 32-bit).
Đăng ký phân khúc Push/popping chỉ không có ý nghĩa gì ở chế độ x64. –