電子書籍の厳選無料作品が豊富!

コンピューターは、マイナスの表現に、2の補数を使った
有効桁?(用語が適切かどうか)の、先頭ビットを、マイナスの数として、
残りの桁のビットを、プラス計算して、数を、符号付きとして表現すると言うことは、解りましたが。

多くの、コンピューターやマイコンの有志の方が書かれた、入門書を読むと、
数字を符号付きどう扱うかは、その時の処理次第と言った、ニアンス等で書かれています。

その部分がよくわからないのですが、CPUの計算の際に、符号付きとして、2進数を処理しなさいとか符号なしで処理しなさいと言った、アセンブラ命令の違いがあるのでしょうか?

それとも、CPU側では、全て符号付きで計算されるので、先頭ビットを、自身で予め、スタック等へ退避させて、計算した後に戻す、つまり、符号部分を0にして計算するので、符号なし計算も出来るよ、と言ったことでしょうか?

自身でも、違うような気がしています、まだ、用語や仕組みの勉強中で、アセンブラのプログラミングは、殆ど、簡単な例文を見る程度で、理解出来ていません。

勘違いしている部分があると思いますが、どうぞ、お解りになる方、お助けください。

A 回答 (4件)

一応強調しておくと, 2の補数を使うと


*加減算*は符号があってもなくても同じように計算可能
です (オーバーフローしなければ). ただし, 「表現できる値の範囲を超えた」かどうかの判定は符号があるときとないときで変わってくるので, フラグまで考えると「加減算であっても異なる命令を使う」ことは考えられます. 特に, 普通の演算ではフラグが変化しない代わりに「符号付の比較命令」と「符号なしの比較命令」とを分けているアーキテクチャは存在します.

さすがに乗除算は符号を意識しないとだめで, こちらは命令を共通化している例はないんじゃないかなぁ.
    • good
    • 0
この回答へのお礼

恐れいります、補足ありがとうございました。

減算命令の中身は、2の補数を使い加算して、結果をレジスタに戻してくれると言うことで、良さそうですね。

プログラマー側では、2の補数に置換えたりする必要は、減算命令があるCPUだと、不要と言うことですよね。

オーバーフローに関しては、別命令で、レジスタHLレジスタ用の計算をするようなことと理解しています。

謎が解けて来た感じがしています。
あとは、慣れでしょうか・・・

お礼日時:2016/08/25 00:23

私の意見としては、


符号付き・符号無しで別のアセンブラ命令が用意されているかそうでないかは、重要ではありません。
用意されている場合が多いですが、それが必須というわけではなく、無くてもいくつかの命令を組み合わせれば同じことが出来ます。
例として乗算命令に符号無し版しか用意されていないCPUにPIC18があります。それでも符号付き乗算は符号チェックと減算を組み合わせて可能です(画像)。

符号付き・無しという概念においてポイントとなるのはあくまで、「符号付き・無しの区別は、そのデータ自身ではなくその時の処理で決まる」という点であり、
その「処理」の違いが別の(1つの)アセンブラ命令なのか別の複雑な命令列なのかは、また別の話です。
そこを混同すると理解の妨げになるでしょう。
「アセンブラについて初歩の質問」の回答画像4
    • good
    • 0
この回答へのお礼

なるほどです、誤解が解けて来ました。

CPU側の仕組みはあまり考えなくても、良かったのですね。

命令で、符号ビットの処理を自分でアルゴリズムを書いてやるか、気の利いたアセンブラ命令でやるのかの違いだけ意識すれば、CPU側のことは、単なる全加算器と見て良いと言うことですね。

お礼日時:2016/08/30 14:50

まず, 負数を表す方法はいくつかあります. 整数型では 2の補数が大多数だと思いますが, 実数型では「符号+絶対値」という表現方法が普通でしょう.



そして, 2の補数を使うなら, 加減算においては (オーバーフローしない限り) 符号の有無は結果に関係ありません. つまり, 符号なしと思って加減算を実行しても, その結果は「符号があると思った時の結果」と変わらないはずです. 実際に手で計算して確かめてみてください.

乗除算は符号があるかどうかで結果が変わりますが, 多くの CPU では符号付の乗除算と符号なしの乗除算で異なる命令を使っているかと思います.
    • good
    • 0
この回答へのお礼

回答有り難うございます。

2の補数計算では、符号付きも符号なしも結果は同じだったのですね。
解ってませんでした。

どうも、このあたりの勘違いだったようです。

お礼日時:2016/08/23 15:59

アセンブラは機種(またはCPU)によって仕様が異なります。


 該当機種のアセンブラの仕様を確認ください。
 その上で。
 以下のような基礎的説明が役立つでしょう。

http://itpro.nikkeibp.co.jp/article/COLUMN/20061 …
http://monoist.atmarkit.co.jp/fembedded/articles …

参考まで。
    • good
    • 1
この回答へのお礼

有益な資料ありがとうございます。

直ぐには理解出来なかったので、何度か読み返してみます。

お礼日時:2016/08/23 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!