この本の "assembly language step by step"は本当に素晴らしいですが、実際のメモリやレジスタのデータを扱うときに2の補数がどのように働くかはわかりません。それと一緒に、私は値がどのようにメモリに表現されているのかわからない。私はそれが私を混乱させているかもしれないと感じている。 anywho ...ASM question、two's complement
「-1 = $ FF、-2 = $ FEなど」と表示されます。今私は数字の2の補数自体が-1倍され、元に追加すると0を与えることを理解します。したがって、FFはバイナリで11111111の16進数で、10進数で255です。私の質問は: "-1 = $ FF"と書かれている本は何ですか? -255 + -1は0を与えるだけでなく、OFフラグを明示的に設定しなかったことを意味しますか?
実際には... 11h(小数点第17位、00100001)が2進数であるとしましょう。この値はALです。 それから私たちはNEG ALを設定し、CFとSFを設定し、ALの値を小数点で239、バイナリで11101111、またはEFhに変更しますか?私はちょうどそれが17 * -1である方法を見ていないのですか?それとも、あなたがオーバーフローを引き起こすのに必要な価値を与えるという意味で、この本の説明が不十分な言葉でしかないのですか?
ありがとうございました!
お返事ありがとうございました!大丈夫です。だから今私の質問は、この種の表記法は何を達成するのだろうか?なぜ、1と2の補数の両方がありますか? –
2の補数は、符号付き数値を表すのに非常に便利な方法であるため、一般的です。 'x - y == x + -y'、一貫して。私はチェックサム(IIRC)としてのIPでの使用以外に、何が良いものなのかを正確には分かりません。 – cHao
@ゼロ:私の想起は2の補数ですが、ハードウェアの実装が少し単純です(減算などのためにハードウェアロジックの特殊ケースが少なくて済むため)。また、0の表現が1つしかないという利点もあります(補数にも負のゼロがあります)。私が考えることができる2の補数の唯一の欠点は、負の数よりも表現できる正の数が少ないことです。例えば、署名された文字は '-128'まで下がることができますが、' 127'までしか上がらないでしょう。その負のゼロはどこかに行かなければならなかった... –