Lựa chọn thứ hai của bạn sẽ chỉ tạo ra lỗi, x86 không có hướng dẫn đó. X86 là một chút duy nhất liên quan đến việc tải byte vào một số thanh ghi nhất định. Có, trên hầu hết các kiến trúc bộ lệnh, toán hạng là số không hoặc mở rộng dấu, nhưng x86 cho phép bạn viết chỉ các byte thấp hơn hoặc thấp hơn 16 bit của một số trong số chúng.
Chắc chắn có sự lựa chọn khác, như thanh toán bù trừ thanh ghi và sau đó incrementing nó, nhưng đây là ba lựa chọn ban đầu hợp lý-looking bạn có:
0: b8 01 00 00 00 movl $0x1,%eax
5: 31 c0 xorl %eax,%eax
7: b0 01 movb $0x1,%al
9: b0 01 movb $0x1,%al
b: 0f b6 c0 movzbl %al,%eax
Đầu tiên là 5 byte, thứ hai 4, thứ ba 5. Vì vậy, thứ hai là sự lựa chọn tốt nhất nếu tối ưu hóa cho không gian, nếu không tôi cho rằng một trong những khả năng chạy nhanh nhất là lần đầu tiên. X86 là đường ống dẫn sâu trong những ngày này, do đó, hai hướng dẫn sẽ khóa liên động và máy có thể cần một vài trạng thái chờ tùy thuộc vào chi tiết của phần cứng đường ống.
Tất nhiên, những ops x86 đang được dịch theo nhiều cách CPU cụ thể vào CPU micro-ops, và do đó ai mà biết được điều gì sẽ xảy ra.
Phiên bản hệ điều hành có liên quan gì với các quy ước đặt tên? –
Đó là một con số của bài phát biểu. Mục đích là để chỉ ra rằng một khi được xuất bản, đặc tả tập lệnh không bị thay đổi một cách triệt để. –
Đây là lý do tại sao tôi thích cú pháp của Intel đối với cú pháp GAS. Intel: mov dword eax, ecx GAS: movl eax, ecx Toán hạng kích thước "l" gây nhầm lẫn cho mọi người. Nhiều người nhận được rằng 'dword' có nghĩa là 32-bit. – Jason