アセンブリに算術プログラムがありますが、負の数を加算、減算、乗算すると、目的の出力が得られません。
例えば
入力:
-1+2=66675 (should be 1)
-1-1=656745 (should be -2)
-1*-1=66757 (should be 1)
質問:
(-)と(1)を1つとしてどのように扱いますか?
符号付き数値で算術演算を行う方法は?
アドバイスをお願いします...
2 の賛辞と、signed int と unsigned int の違いについて読むことをお勧めします。あなたが表示している値は、変換を行わずに unsigned int 値に変換されている signed int の負の値のように疑わしく見えます。負の整数には、1 に設定された最上位ビットがあります。最初にマスキングせずにその値を unsigned int に押し込むと、予想よりもはるかに大きな数値が得られます。
8 ビット表現の例:
signed value = -1
unsigned value = 255
binary = 1111 1111
Take the twos compliment:
1111 1111
XOR 0000 0000
equals 0000 0000
add1 0000 0001
dec value = 1
ここで詳細を学ぶことができます (2 の補数加算の例を参照できます): http://academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm