-2

だから私はこの宣言を.bssに持っています

answer resb 1

答えとして、-99 から +99 までの範囲の 2 桁の整数の合計の結果を保存します。+99と+99を足してみると、答えがマイナスになってしまいます。-128 から 127 の範囲内の任意の回答が正しく入力されます。このオーバーフロー/アンダーフローの問題を解決するにはどうすればよいですか?

私はアセンブリコーディングを始めたばかりなので、この問題を理解するのを手伝ってください。resb を resw として作成しようとしましたが、コードを実行すると「浮動小数点エラー」が発生したため、resb の使用に戻りました。

答えを印刷する方法

;ansh,anso,anst are all declared as resb 1 in .bss
print_answer: ;tens1 holds the answer always
;getting each digit of tens2 to be converted as char    
mov al,[answer]
mov bl,100
div bl

mov [ansh],al ; holds tens digit of average
mov [anst],ah

mov ah,0
mov al,[anst]
mov bl,10
div bl

mov [anst],al
mov [anso],ah

add byte[ansh],30h
add byte[anst],30h
add byte[anso],30h

;printing routine follows here
4

1 に答える 1

0

-99 と +99 を追加すると、8 ビット レジスタで問題なく動作するはずです。そうでない場合は、加算が正しく行われていないか、結果の表示が適切に処理されていません。

一般的な表示エラーは、8 ビットの結果を使用してライブラリ関数を呼び出し、それを 16 ビット (またはそれより広い) 値を期待する関数に渡すことです。ライブラリ関数に渡す値を作成するときに、生成しなかったビットを必ずマスクするかゼロにしてください。

+99 を 2 倍にすると、もちろん結果は 127 よりも大きくなるため、結果を符号なし 8 ビット値として処理するか、より広い値に拡張する必要があります。結果をどう見ていますか?

于 2014-09-17T21:10:33.137 に答える