การขัดจังหวะแบบ non-maskable มีลำดับความสำคัญมากกว่าคำสั่งปัจจุบันหรือไม่?

ฉันกำลังศึกษาหลักสูตร Assembly และคำถามต่อไปนี้ทำให้ฉันงง ฉันพยายามทำซ้ำในโค้ด แต่ยากที่จะจำลองสถานการณ์ในเครื่องจำลอง

ค่า 5 จะถูกเก็บไว้ที่ 0x0000100 ในเวลาเดียวกันเมื่อโปรเซสเซอร์ประเมินคำสั่ง INCB 0x0000100 การขัดจังหวะของ NMI จะถูกยกขึ้นเพื่อเรียกรูทีนย่อยซึ่งจะคูณค่าที่ 0x0000100 ด้วย 2 ค่าสุดท้ายที่ 0x0000100 จะเป็นเท่าใด

ฉันสับสนเล็กน้อยว่าคำสั่ง ปัจจุบัน จะเสร็จสิ้นก่อนที่จะประมวลผลการขัดจังหวะ หรือว่าจะถูกยกเลิกทันที


person JonathanReez    schedule 26.04.2015    source แหล่งที่มา
comment
คำสั่งปัจจุบันจะเสร็จสิ้นก่อน คู่มือระบุว่า: การขัดจังหวะทั้งหมดรับประกันว่าจะเกิดขึ้นในขอบเขตคำสั่ง   -  person Jester    schedule 26.04.2015
comment
ลำดับการขัดจังหวะจะเริ่มเมื่อสิ้นสุดวงจรคำสั่งปัจจุบัน คำแนะนำบางอย่างใช้เวลานานกว่าคำสั่งอื่นจึงจะเสร็จสมบูรณ์ เวลาที่ใช้จากสัญญาณอินพุตจนกระทั่งการขัดจังหวะเริ่มต้นเรียกว่า เวลาแฝง ดังนั้นค่าที่อยู่ 0x0000100 จะเป็น 6 เมื่อเริ่มต้นการจัดการ NMI   -  person Weather Vane    schedule 26.04.2015


คำตอบ (1)


ตัวจัดการ NMI ใช้การดึงข้อมูล ประมวลผล และเขียนรอบเหมือนกันทุกประการกับโค้ดอื่น ๆ ในขณะที่กำลังทำงานอยู่ (คุณไม่ต้องการจำลองเกตโดยไม่จำเป็น) เพียงบันทึกสถานะของโปรเซสเซอร์ ดันตัวนับโปรแกรมปัจจุบันลงบนสแต็ก และเปลี่ยนพีซีเป็นตัวจัดการการขัดจังหวะ เมื่อมีการเรียก return จากการขัดจังหวะ มันจะทำงานต่อจากที่ค้างไว้

มันจะทำอย่างนั้นได้ยังไงถ้ามันอนุญาตคำสั่งบางส่วน?

(ไม่ได้ตั้งใจจะพูดจาหยาบคาย - ฉันแค่พบว่า "ทำไม" น่าสนใจมากกว่า "อะไร")

person Mike    schedule 27.04.2015