- Nghĩa
rep; nop
là gì? - Nó có giống như
pause
hướ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
nop
hướ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 đó rep
là 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ư rep
chỉ 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 nop
hoạ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; nop
và pause
ánh xạ tới cùng một opcode , và pause
có 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ự.