2016-10-07 4 views
-1

私は2つの数字のユーザ入力があります。num1num2num2は負です。署名されていない製品を入手するのに助けが必要です

私はこれらの数字の符号なしの製品を表示する必要があるが、私はmulを使用する場合、それが署名した製品を提供します:

mov eax, [num1] 
mov ebx, [num2] 
mul ebx 

私の入力はnum1 = 2 num2 = -2で、出力は私が番号を格納しています-4

です。 bss

num1 resd 1 
num2 resd 1 

私が保存している方法であれば、彼は-2か何か私がmulと間違っていることを値する。

+0

どのようにCでそうしますか? –

+1

'mul'は2つの符号なし値の符号なし積を与えます。 unsigned値として扱われたときの符号付き-2の値は '0xFFFFFFFE'(非常に大きい数)で、' edx:eax'の結果が '0x00000001:0xFFFFFFFC'になると、その下位の32ビットの結果部分 '0xFFFFFFFC'を符号付き数値として表示します-4である。 ...あなたが2 * 2をしたいのであれば、何とかまず "abs"をするべきです。例えば、 'eax'が32ビットの値であり、それが符号付きでも符号なしでも、数値でもない場合には、好きなように扱うことができます。したがって、符号なし10進数として扱われる' 0xFFFFFFFC'は '4294967292'です。 '-4'です。 – Ped7g

+0

@MargaretBloom彼はそれで頼むだろうか? ;) – Ped7g

答えて

0

すべての正しさ、私の問題は、私の印刷ステートメントで符号なしの値を表示していた。私は%uの代わりに%dを使用していました。

皆さん、ありがとうございました

関連する問題