- Nghĩa
rep; noplà gì? - Nó có giống như
pausehướng dẫn không? - Nó có giống với
rep nop(không có dấu chấm phẩy) không? - Sự khác biệt đối với
nophướng dẫn đơn giản là gì? - Nó có hoạt động khác nhau trên bộ xử lý AMD và Intel không?
- (bonus) Tài liệu chính thức cho những hướng dẫn này ở đâu?
Động lực cho câu hỏi này
Sau một số cuộc thảo luận trong phần nhận xét của một câu hỏi khác , tôi nhận ra rằng tôi không biết điều gì rep; nop;có nghĩa là trong assembly x86 (hoặc x86-64). Và tôi cũng không thể tìm thấy một lời giải thích tốt trên web.
Tôi biết đó replà một tiền tố có nghĩa là "lặp lại các lần hướng dẫn tiếp theo cx" (hoặc ít nhất nó là, trong hợp ngữ x86 16 bit cũ). Theo đó bảng tóm tắt ở Wikipedia , nó dường như repchỉ có thể được sử dụng với movs, stos, cmps, lods, scas(nhưng có lẽ hạn chế này đã được gỡ bỏ trên bộ vi xử lý mới hơn). Vì vậy, tôi sẽ nghĩ rep nop(không có dấu chấm phẩy) sẽ lặp lại một lần nophoạt động cx.
Tuy nhiên, sau khi tìm kiếm thêm, tôi càng bối rối hơn. Có vẻ như nó rep; nopvà pause ánh xạ tới cùng một opcode , và pausecó một chút hành vi khác với chỉ nop. Một số thư cũ từ năm 2005 nói những điều khác nhau:
- "cố gắng không đốt cháy quá nhiều điện"
- "nó tương đương với 'nop' chỉ với mã hóa 2 byte."
- "Đó là phép thuật theo thông tin. Nó giống như 'không nhưng hãy để anh chị em HT khác chạy'"
- "nó tạm dừng trên intel và đệm nhanh trên Athlon"
Với những ý kiến khác nhau, tôi không thể hiểu ý nghĩa chính xác.
Nó đang được sử dụng trong nhân Linux (trên cả i386 và x86_64 ), cùng với nhận xét này: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */Nó cũng đang được sử dụng trong BeRTOS , với nhận xét tương tự.