2016-09-26 48 views
1

如何處理NASM程序集中的錯誤? 例如,我有這樣的代碼來讀取用戶輸入:NASM程序集中的異常/錯誤處理

mov eax,3 
mov ebx,0 
mov ecx,Buffer 
mov edx,BUFFERLENGTH 
int 80H 

如果出於某種原因,這個系統調用不能被執行,我想有程序跳轉到打印「發生錯誤」的標籤或類似的東西。我怎麼做?

另外,是否有可能得到異常或錯誤代碼的名稱?

謝謝

回答

1

內核調用後,EAX將有兩種可能性;

  • 輸入的字符數。
  • 否定的錯誤代碼。

      int  80H 
          or  eax, eax 
          jns  OK  ; Tests sign flag 
    
          neg  eax  ; Converts error code to positive value 
        ; Error trapping here 
    
         OK: dec  eax  ; Bump by one cause length includes CR 
          jnz  Good 
        ; Do something special if operator only entered CR 
    
        Good: nop 
    

    這是一個例子,你可以評估是否有錯誤,如果操作員甚至輸入任何東西。

+0

感謝您的回答,我還有一個問題:我看到您使用了RAX,但是我正在寫32位程序集。我只是將其更改爲EAX? – SilenceOnTheWire

+0

等一下我明白了,你否定了RAX,因爲它是負面的,這樣你就會得到正面的價值。可能的原因是,由於eax是輸入的字符數或錯誤代碼,所以必須否定它,以免與輸入的字符數混淆。因此,您需要取消eax/rax來獲取真正的錯誤代碼。我對嗎? – SilenceOnTheWire

+0

對不起,因爲我專門編寫了64位代碼,所以我已經習慣了這種習慣。這就是它,否則,如果你輸入了15個字符,我們可以說,那麼它將如何區分錯誤代碼15. –