0

私はアセンブリプログラムの作成の最後にいますが、問題の領域は比較命令です。動作していないようで、何も動作していないように見えるため、読み込まれたすべての入力が拒否に送信されています

コード:

loop_top:         
     input  string,40                  ; read ASCII characters
     atod  string                      ; convert to integer
     mov  number1, eax                 ; store in memory
     jz done

     cmp number1, 50                   ; number1>50?
     jg rejected
     cmp number1, -50                  ; number1<-50?
     jl rejected

rejected:
     dtoa number1ch,eax                ; convert to ASCII characters
     output number1ch                  ; print value and message to screen
     output reject 
     jmp loop_top

     mov eax, number1                  ; store in register
     cmp eax,0                         ; eax > 0?
     jnl isPositive

問題領域 ? :

         cmp number1, 50                  ; number1>50?
         jg rejected
         cmp number1, -50                 ; number1<-50?
         jl rejected

rejected:
         dtoa number1ch,eax               ; convert to ASCII characters
         output number1ch                 ; print value and message to screen
         output reject 
         jmp loop_top

したがって、任意の数値 ex: 4、50、51、-3、-50、-51 .. はすべて reject に送信されます。誰かが私に理由を説明できますか? ありがとう!

4

2 に答える 2

1

が有効な場合rejectedでも、「失敗」しているようです。number1

     cmp number1, 50                   ; number1>50?
     jg rejected                       ; <<< jump to rejected if number1 > 50
     cmp number1, -50                  ; number1<-50?
     jl rejected                       ; <<< jump to rejected if number1 < -50

     ;; we get here if -50 <= number1 <= 50, i.e. if 
     ;; number1 is in the valid range...

     ;; but then we fall through to `rejected` anyway...

     ;; so code for processing `number1` needs to go here
     ;; (or you could just put a `jmp` here to the
     ;; relevant code)...

rejected:
于 2013-05-01T06:27:32.783 に答える