0

他のプログラムの入力検証を書き込もうとしています。入力が-32,768より小さいか、32,767より大きい場合、プログラムはエラーメッセージを出力し、範囲内の数値が得られるまで入力を繰り返すように要求する必要があります(ループを使用する必要があります)。以下のコードにいくつかの論理エラーがあることを私は知っています。私はそれを修正しようとしましたが、それは他の論理的なエラーにつながるだけです。範囲外の数字が範囲内の数字と重なっているので、それは奇妙です。たとえば、-32,770をアキュムレータに追加すると、32,766(範囲内)になります。これは私がこれまでに持っているものです:

BR       isless 
input:    .BLOCK 2 
hello_ms: .ASCII "Enter a number: \x00"
error_ms: .ASCII "Wrong input, must be in the range -32,768 through 32,767. Enter a number: \x00"
thanx:    .ASCII "Thank you!\x00"
;
isless:  STRO    hello_ms, d
         DECI    input, d
         LDA     input, d
         CPA     32767, d ;-32769 
         BRLE    whileL
         BR      isgrter
whileL:  STRO    error_ms, d 
         DECI    input, d
         LDA     input, d
         CPA     32767, i
         BRLE    whileL
         BR      isgrter
isgrter: LDA     input, d
         CPA     -32768, i 
         BRGE    whileG
         BR      endwh
whileG:  STRO    error_ms, d 
         DECI    input, d
         LDA     input, d
         CPA     -32768, i 
         BRGE    whileG
         BR      endwh
endwh:   STRO    thanx, d 
         STOP
         .END
4

1 に答える 1

0

16ビットより大きい10進数/数値入力を取得できますか?たとえば、32ビットの数値を入力できますか?その場合、上位16ビットがクリアされているかどうかを簡単に確認できます。

編集

DECI命令は、NZVフラグを設定します。

于 2012-04-23T06:27:54.287 に答える