に負の数を計算するためにどのように私は、アセンブリ内の初心者だと私は、私は、変数3 DWORDSを持っているとしましょう 負の数を表現する方法について質問があります。アセンブリ
result DWORD 0
i DWORD 3
j DWORD 5
と私がしたいのこの式を計算してください:result = i - j + 8 しかし、私がijを実行すると、符号 のために結果が非常に高い数値になります。
に負の数を計算するためにどのように私は、アセンブリ内の初心者だと私は、私は、変数3 DWORDSを持っているとしましょう 負の数を表現する方法について質問があります。アセンブリ
result DWORD 0
i DWORD 3
j DWORD 5
と私がしたいのこの式を計算してください:result = i - j + 8 しかし、私がijを実行すると、符号 のために結果が非常に高い数値になります。
32ビットDWORDの整数範囲は、-2147483648〜2147483647または16進数-0x80000000〜0x7FFFFFFFです。
したがって、番号-1は0xFFFFFFFFのように存在します。 (カウンタのアンダーフローのように)
ハイ(31)ビットが設定されている場合、数値は負です。ネガティブ(否定)から正の数を作るために、あなたは数のcompementを作り、1
例追加する必要があります:あなたは、他のジャンプコマンドを使用する2つの整数を比較すると
:お知らせ
0xFFFFFFFE //-2
xor 0xFFFFFFFF //binary complement
---------------
0x00000001 //result of complement
+ 0x00000001 //add 1
---------------
0x00000002 //Result of negation is 2
を絶対数の比較より:
絶対数の比較:
jg (jump if greater)
jl (jump if less)
比較すると、整数(正または負の値となります):あなたは "OK" とはどういう意味ですか
ja (jump if greater)
jb (jump if less)
?それを「高い数字」と呼ぶと、適切な結果になります。 –
ブライアンがそうです、あなたの高い数字は、実際には結果の署名されたバージョンです。もしあなたが "非常に高い"と思っているのであれば、 –