- อะไร
rep; nop
หมายถึง? - เหมือนกับการ
pause
เรียนการสอนหรือไม่? - มันเหมือนกับ
rep nop
(ไม่มีอัฒภาค) หรือไม่? nop
คำสั่งง่ายๆแตกต่างกันอย่างไร?- มันทำงานแตกต่างกันในโปรเซสเซอร์ AMD และ Intel หรือไม่?
- (โบนัส) เอกสารอย่างเป็นทางการสำหรับคำแนะนำเหล่านี้อยู่ที่ไหน?
แรงจูงใจสำหรับคำถามนี้
หลังจากการสนทนาในความคิดเห็นของคำถามอื่นฉันตระหนักว่าฉันไม่รู้ว่าrep; nop;
หมายความว่าอย่างไรในการประกอบ x86 (หรือ x86-64) และฉันไม่พบคำอธิบายที่ดีในเว็บ
ฉันรู้ว่านั่นrep
คือคำนำหน้าซึ่งหมายถึง"ทำซ้ำคำสั่งcx
ครั้งต่อไป" (หรืออย่างน้อยก็คือในแอสเซมบลี x86 16 บิตเก่า) ตามนี้ตารางสรุปที่วิกิพีเดียดูเหมือนว่าrep
สามารถนำมาใช้เฉพาะกับmovs
, stos
, cmps
, lods
, scas
( แต่บางทีข้อ จำกัด นี้จะถูกลบออกในโปรเซสเซอร์ใหม่กว่า) ดังนั้นฉันคิดว่าrep nop
(ไม่ลำไส้ใหญ่กึ่ง) จะทำซ้ำnop
การดำเนินการcx
ครั้ง
อย่างไรก็ตามหลังจากค้นหาเพิ่มเติมฉันก็ยิ่งสับสน ดูเหมือนว่าrep; nop
และpause
แมปกับ opcode เดียวกันและpause
มีพฤติกรรมที่แตกต่างจากเพียงnop
เล็กน้อย จดหมายเก่าบางฉบับจากปี 2548กล่าวถึงสิ่งที่แตกต่างกัน:
- “ พยายามอย่าเผาผลาญพลังงานมากเกินไป”
- "เทียบเท่ากับ 'nop' เพียงแค่เข้ารหัส 2 ไบต์"
- "มันคือเวทย์มนตร์บน intel มันเหมือนกับ 'nop แต่ปล่อยให้พี่น้อง HT คนอื่นวิ่ง'"
- "มันหยุดชั่วคราวบน intel และการขยายอย่างรวดเร็วบน Athlon"
ด้วยความคิดเห็นที่แตกต่างกันเหล่านี้ฉันไม่เข้าใจความหมายที่ถูกต้อง
มันถูกใช้ในเคอร์เนลลินุกซ์ (ทั้งบนi386และx86_64 ) พร้อมกับความคิดเห็นนี้: /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
มันยังถูกใช้ใน BeRTOSด้วยความคิดเห็นเดียวกัน