2016-09-26 2 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와 어떻게 구별 할 수 있습니까? –