2012-09-04 85 views

回答

1

從intel.com或amd.com獲得一份CPU手冊的副本。查閱有關中斷和異常處理的章節。發生中斷或異常時,查找顯示堆棧內容的圖表。例如,來自英特爾公司的80386程序員參考手冊1986:

Figure 9-5. Stack Layout after Exception of Interrupt 

          WITHOUT PRIVILEGE TRANSITION 

     D O  31   0      31   0 
     I F ╠═══════╦═══════╣     ╠═══════╦═══════╣ 
     R  ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║ OLD   ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║ OLD 
     E E ╠═══════╬═══════╣ SS:ESP  ╠═══════╬═══════╣ SS:ESP 
     C X ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║  │   ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║  │ 
     T P ╠═══════╩═══════╣<────┘   ╠═══════╩═══════╣<────┘ 
     I A ║ OLD EFLAGS ║     ║ OLD EFLAGS ║ 
     O N ╠═══════╦═══════╣     ╠═══════╦═══════╣ 
     N S ║▒▒▒▒▒▒▒║OLD CS ║ NEW   ║▒▒▒▒▒▒▒║OLD CS ║ 
     I ╠═══════╩═══════╣ SS:ESP  ╠═══════╩═══════╣ 
     │ O ║ OLD EIP ║  │   ║ OLD EIP ║ NEW 
     │ N ╠═══════════════╣<────┘   ╠═══════════════╣ SS:ESP 
     │  ║    ║     ║ ERROR CODE ║  │ 
     v          ╠═══════════════╣<────┘ 
               ║    ║ 

       WITHOUT ERROR CODE     WITH ERROR CODE 

那麼,它就在那裏,你的中斷處理程序接收堆棧中的最後的事情是錯誤代碼(可選;不是所有的異常都有它,你會需要在執行iret之前將其彈出),然後eipcs引起異常或已被中斷的位置。

+0

謝謝!這正是我所尋找的(我仍然是一個asm noob,大聲笑) – user1454902