รหัส NOP บางอย่างนั้นแตกต่างจากรหัสอื่นหรือไม่?


12

ฉันอยากรู้เกี่ยวกับสิ่งนี้สมมติว่าฉันมี:

00000000001 90                              nop        
00000000002 90                              nop        
00000000003 90                              nop 

มันทำงานเหมือนกันไหม

00000000001 0F1F00                          nop        dword [ds:rax]

ตัวอย่างที่สองมีผลกระทบอะไรบ้างเมื่อเทียบกับตัวอย่างแรก


1
ฉันอยากจะคิดว่าอันที่สองจะทำงานได้เร็วกว่าครั้งแรกเนื่องจากเป็นคำสั่งเดียวมากกว่า 3 อาจเป็นไปได้ว่าการวางท่อแบบสมัยใหม่จะเปลี่ยนสิ่งนั้น
Loren Pechtel

1
นี่คือแท็กทำไม ?
Keith Thompson

Google ให้multi byte nopผลลัพธ์ค่อนข้างน้อย
phant0m

1
@ KeithThompson - ฉันดึงแท็ก C และรูปแบบการเข้ารหัส พวกเขาไม่ได้เป็น

@ phant0m - คุณจะใส่ความคิดเห็นนั้นในคำตอบและสรุปผลลัพธ์ที่เกี่ยวข้องมากกว่านี้หรือไม่ เราทุกคนไม่ได้มีพื้นหลังที่จะเข้าใจสิ่งที่จะกลับมาจากการค้นหา

คำตอบ:


2

ขึ้นอยู่กับสถาปัตยกรรมของเครื่อง คลาสสิก KA-10 (pdp-10) มีรหัส nop จำนวนมากอาจเป็นผลมาจากชุดคำสั่งที่ใช้เป็นประจำสูงและความจริงที่ว่ามันถูกนำไปใช้งานโดยส่วนประกอบที่สืบทอดทั้งหมดไม่ใช่ไมโครโค้ด หน่วยความจำที่อ้างอิงถึง NOP บางอันคือการทดสอบข้ามที่ไม่เคยข้าม แต่ก็ทดสอบสภาพที่อาจทำให้เกิดการข้ามและอื่น ๆ "JFCL 0" ถูกโฆษณาในคู่มือว่าเป็น nop ที่เร็วที่สุด


ฉันทำงานกับแอสเซมเบลอร์ (8085?) หนึ่งครั้งที่เสนอตัวเลือกเพื่อแทนที่ NOP หลายรายการด้วยคำสั่ง JMP เดียว คุณได้การจัดตำแหน่งที่คุณต้องการโดยไม่มีการจ่ายค่าปรับประสิทธิภาพ มีประโยชน์เมื่อคุณมีสตริงใน PIC ไม่สะดวกถ้าคุณใช้ CPU แบบลูป (ซึ่งเป็นสาเหตุว่าทำไมมันจึงถูกปิดโดยปริยาย)
TMN

ส่วนใหญ่เวลาที่ใช้คำสั่ง NOP เพื่อแทรกการหน่วงเวลาสั้น ๆ ซึ่งมักเป็นผลมาจากการพึ่งพาฮาร์ดแวร์หรือการทำงานผิดพลาดของอุปกรณ์ โทษประสิทธิภาพเป็นสาเหตุของการใช้ NOP
คุณ

1
nops มีการใช้ aesoteric มากมาย สถาปัตยกรรมบางอย่างมีข้อกำหนดการจัดเรียงแบบไบต์สำหรับการข้าม รหัสการแก้ไขตัวเอง (horrors!) ใช้ nops เป็นจุดต่อ ระบบบั๊กใช้ nops เพื่อเก็บข้อมูลเกี่ยวกับการยืนยันที่ล้มเหลว
ddyer

@ddyer: ตัวประมวลผลบางตัวมีคำแนะนำ (บางครั้งมีการบันทึกไว้ในบางครั้งไม่ใช่) ซึ่งจะดึงข้อมูลไบต์หน่วยความจำและละเว้นค่าการดึงข้อมูลอย่างสมบูรณ์หรือไม่ทำอะไรเลยยกเว้นการตั้งค่าสถานะที่โปรแกรมเมอร์อาจไม่สนใจ ใน 6502 เป็นเรื่องธรรมดาที่จะใช้คำสั่ง "BIT abs" เป็นวิธีการกลืนสองไบต์ต่อไป นอกจากนี้ยังมี opcodes ที่ไม่มีเอกสารซึ่งทำหน้าที่คล้ายกันยกเว้นว่าพวกเขาจะไม่อัพเดทสถานะใด ๆ หนึ่งข้อแม้ที่มีเทคนิคดังกล่าวแม้ว่า: พวกเขาจะทำให้เกิดพื้นที่ไบต์ที่จะอ่าน อุปกรณ์ต่อพ่วง 6502 บางรุ่นอาจตอบสนองต่อการอ่าน
supercat

0

ดูเหมือนว่าตัวอย่างที่สองควรรันเร็วกว่าตัวอย่างแรก ในตัวอย่างแรกคำสั่งที่แยกต่างหากสามคำสั่งจะถูกดำเนินการ ในวินาทีเดียวคำสั่งเดียว มัลติพอยต์ NOP นั้นใช้สำหรับซีพียู "คำใบ้" (แน่นอนว่าเป็นความลับเมื่อใดและอย่างไร) อาจมีประโยชน์สำหรับวัตถุประสงค์ในการจัดตำแหน่ง (เพื่อเริ่มการวนลูปแบบแน่นบนบรรทัดแคช) แต่ในปัจจุบันไม่มีการใช้งานอื่น ไม่ชัดเจนว่า CPU จะประเมินข้อโต้แย้งจริงหรือไม่ดังนั้นจึงไม่สามารถบอกได้ว่าจะเพิ่มเวลาในการถอดรหัสคำสั่งหรือเกิดโทษการเข้าถึงหน่วยความจำ ทุกคนที่มี ICE ที่ดีต้องการทดสอบหนึ่งในนั้นและดูว่ามีที่อยู่ใดปรากฏบนการติดตามรถบัส


แม้ว่าแอสเซมบลี 6502 หลายคนใช้ mnemonic "NOP" สำหรับ opcodes ที่ไม่มีเอกสารซึ่งดำเนินการดึงหน่วยความจำ (เช่น NOP $ 1FF9) จะเป็นคำสั่งสองไบต์ซึ่งอ่าน 0x1FF9 และละเว้นค่าที่อ่าน) ใช้คำว่า "nop" สำหรับคำสั่งที่ทำอะไรเกินกว่าที่เคาน์เตอร์โปรแกรม / ตัวชี้คำสั่งเนื่องจากไม่มีการรับประกันตัวประมวลผลจะไม่ถูกเชื่อมต่อกับฮาร์ดแวร์ที่เรียกการกระทำ (เช่นเปลี่ยนเป็นรหัสธนาคาร 1) เมื่อที่อยู่บางอย่าง (เช่น 0x1FF9 ) มีการเข้าถึงและการเรียกเช่นนั้นไม่ได้เป็น "ไม่มีการดำเนินการ",
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.