2016-09-26 24 views
1

NASMアセンブリでエラーを処理するにはどうすればよいですか? は、例えば、私は、ユーザーの入力を読み込むため、このコードを持っている:NASMアセンブリの例外/エラー処理

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

何らかの理由でこのシステムコールを実行できない場合は、私が「エラーが発生しました」のプリントラベルにプログラムのジャンプを持っているしたいのですがまたはそのようなものです。それ、どうやったら出来るの?

また、例外またはエラーコードの名前を取得できますか?

おかげ

答えて

1

カーネルコールの後、EAXは2 possibilitesを持っているとしています。

  • 入力された文字数。
  • 否定されたエラーコード。

      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

答えていただきありがとうございます。もう1つ質問があります。私はRAXを使用していますが、32ビットアセンブリを作成しています。 EAXに変更するだけですか? – SilenceOnTheWire

+0

待ちに待ったRAXを否定するのは否定的であり、そのようにして正の価値を得るからです。 eaxは入力された文字数またはエラーコードのいずれかであるため、入力された文字数と混同しないようにネゲートする必要があります。したがって、実際のエラーコードを取得するには、eax/raxを否定する必要があります。私は正しい? – SilenceOnTheWire

+0

申し訳ありませんが、私は64ビットコードを排他的に書いているので、_editedそれは習慣になっています。それはまさにそれです。それ以外の場合は、15文字を入力すると、エラーコード15とはどのように区別されますか。 –