コンピューターは、マイナスの表現に、2の補数を使った
有効桁?(用語が適切かどうか)の、先頭ビットを、マイナスの数として、
残りの桁のビットを、プラス計算して、数を、符号付きとして表現すると言うことは、解りましたが。
多くの、コンピューターやマイコンの有志の方が書かれた、入門書を読むと、
数字を符号付きどう扱うかは、その時の処理次第と言った、ニアンス等で書かれています。
その部分がよくわからないのですが、CPUの計算の際に、符号付きとして、2進数を処理しなさいとか符号なしで処理しなさいと言った、アセンブラ命令の違いがあるのでしょうか?
それとも、CPU側では、全て符号付きで計算されるので、先頭ビットを、自身で予め、スタック等へ退避させて、計算した後に戻す、つまり、符号部分を0にして計算するので、符号なし計算も出来るよ、と言ったことでしょうか?
自身でも、違うような気がしています、まだ、用語や仕組みの勉強中で、アセンブラのプログラミングは、殆ど、簡単な例文を見る程度で、理解出来ていません。
勘違いしている部分があると思いますが、どうぞ、お解りになる方、お助けください。
No.3ベストアンサー
- 回答日時:
一応強調しておくと, 2の補数を使うと
*加減算*は符号があってもなくても同じように計算可能
です (オーバーフローしなければ). ただし, 「表現できる値の範囲を超えた」かどうかの判定は符号があるときとないときで変わってくるので, フラグまで考えると「加減算であっても異なる命令を使う」ことは考えられます. 特に, 普通の演算ではフラグが変化しない代わりに「符号付の比較命令」と「符号なしの比較命令」とを分けているアーキテクチャは存在します.
さすがに乗除算は符号を意識しないとだめで, こちらは命令を共通化している例はないんじゃないかなぁ.
恐れいります、補足ありがとうございました。
減算命令の中身は、2の補数を使い加算して、結果をレジスタに戻してくれると言うことで、良さそうですね。
プログラマー側では、2の補数に置換えたりする必要は、減算命令があるCPUだと、不要と言うことですよね。
オーバーフローに関しては、別命令で、レジスタHLレジスタ用の計算をするようなことと理解しています。
謎が解けて来た感じがしています。
あとは、慣れでしょうか・・・
No.4
- 回答日時:
私の意見としては、
符号付き・符号無しで別のアセンブラ命令が用意されているかそうでないかは、重要ではありません。
用意されている場合が多いですが、それが必須というわけではなく、無くてもいくつかの命令を組み合わせれば同じことが出来ます。
例として乗算命令に符号無し版しか用意されていないCPUにPIC18があります。それでも符号付き乗算は符号チェックと減算を組み合わせて可能です(画像)。
符号付き・無しという概念においてポイントとなるのはあくまで、「符号付き・無しの区別は、そのデータ自身ではなくその時の処理で決まる」という点であり、
その「処理」の違いが別の(1つの)アセンブラ命令なのか別の複雑な命令列なのかは、また別の話です。
そこを混同すると理解の妨げになるでしょう。
なるほどです、誤解が解けて来ました。
CPU側の仕組みはあまり考えなくても、良かったのですね。
命令で、符号ビットの処理を自分でアルゴリズムを書いてやるか、気の利いたアセンブラ命令でやるのかの違いだけ意識すれば、CPU側のことは、単なる全加算器と見て良いと言うことですね。
No.2
- 回答日時:
まず, 負数を表す方法はいくつかあります. 整数型では 2の補数が大多数だと思いますが, 実数型では「符号+絶対値」という表現方法が普通でしょう.
そして, 2の補数を使うなら, 加減算においては (オーバーフローしない限り) 符号の有無は結果に関係ありません. つまり, 符号なしと思って加減算を実行しても, その結果は「符号があると思った時の結果」と変わらないはずです. 実際に手で計算して確かめてみてください.
乗除算は符号があるかどうかで結果が変わりますが, 多くの CPU では符号付の乗除算と符号なしの乗除算で異なる命令を使っているかと思います.
回答有り難うございます。
2の補数計算では、符号付きも符号なしも結果は同じだったのですね。
解ってませんでした。
どうも、このあたりの勘違いだったようです。
No.1
- 回答日時:
アセンブラは機種(またはCPU)によって仕様が異なります。
該当機種のアセンブラの仕様を確認ください。
その上で。
以下のような基礎的説明が役立つでしょう。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061 …
http://monoist.atmarkit.co.jp/fembedded/articles …
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスのデータ型。数値型に...
-
COBOL 9(02)で定義した変数にマ...
-
PN9によるBER測定
-
CDMA通信システムがわからない...
-
携帯電話 通信方式 第三世代...
-
浮動小数表記方式
-
加算器から減算器作成
-
浮動小数点形式の問題
-
浮動小数点
-
10分の1は「10/1 それとも1/10...
-
50以下は“50”も入るのですか?
-
実績を積むという表現
-
1億x1億はいくらでしょうか?
-
5進法を10進法への直し方
-
【機械図面】 最大値・最小値...
-
16進小数0.Cを10進数小数に変換...
-
「充足に達しましたので」これ...
-
言葉遣いについて ○○を取りに行...
-
エクセル関数で源泉徴収額を計...
-
0.1と0.10の違いを教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスのデータ型。数値型に...
-
COBOL 9(02)で定義した変数にマ...
-
PN9によるBER測定
-
FP4という浮動小数点演算4桁の...
-
8ビットのグレイ符号10110110お...
-
救難信号SOSの打電について
-
浮動小数点
-
調剤薬局での夜間・休日等加算...
-
Excelで符号の変化をカウントす...
-
浮動小数点の正規化方法について
-
CDMA通信システムがわからない...
-
ACCESS 宛名ラベル(レポート...
-
テーブルに小数点以下の値を入...
-
浮動小数点数
-
145.7を二進数であらわせ...
-
指数部(8ビット)を2進数、負の...
-
OSによる浮動小数点数の解釈と...
-
567.8の10進数を正規化の仕方が...
-
クロックサイクル時間の求め方
-
日曜日の診察料
おすすめ情報