1. ホーム
  2. assembly

[解決済み] アセンブリで負の数を計算する方法

2022-02-12 22:46:34

質問内容

私はアセンブリの初心者ですが、負の数の表現方法について質問があります。 私は3つのDWORDS変数を持っている、例えば。

result DWORD 0
i DWORD 3
j DWORD 5

で、この式を計算したいのですが、result = i - j + 8 です。 しかし、i-jを実行すると、符号の関係で結果が非常に大きな数字になります。 どうすれば、最終的に結果がOKになるのでしょうか?

どのように解決するのですか?

32ビットDWORDの場合、整数の範囲は-2147483648から2147483647、16進数では-0x80000000から0x7FFFFFFFです。

つまり、-1という数字は0xFFFFFFFのように存在することになります。(カウンターのアンダーフローと同じ)

もし、ハイ(31)ビットがセットされていれば、数値はマイナスです。負の数から正の数を作るには(ネゲーション)、数を計算し、1を加えなければなりません。

    0xFFFFFFFE   //-2
xor 0xFFFFFFFF   //binary complement 
---------------
    0x00000001   //result of complement
+   0x00000001   //add 1
---------------
    0x00000002   //Result of negation is 2