teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

説明が漏れていた部分の追記

2018/09/06 16:29

投稿

himazin.blm
himazin.blm

スコア596

answer CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  一般的には「その CPU が持つ最長のアドレスレジスタの bit 数」なのだと聞いたことがありますが、モノによって解釈が違う bit 数を自称していることがそれなりにあるので、実は明確な定義はないと言ってよい状況です。「レジスタ同士の演算器のうち最長の bit 数のものの bit 数」だとか、「命令長」とか、他の何かだったりします。
4
4
 
5
- 昔は、アドレスレジスタとデータレジスタの長さを別にすると無駄に演算器を作ることになるため、このあたりは統一されていることが多く、あまり困らなかったのですが、最近はそのコストよりも別のコストの方を重視するようになってきたため、さらにカオスになってきているのが実情です。
5
+ 昔は、アドレスレジスタとデータレジスタの長さを別にすると、それぞれ用に演算器を分けて作る必要が出てくるため、このあたりは統一されていることが多く、定義が曖昧でもあまり困らなかったのですが、最近はそのコストよりも別のコストの方を重視するようになってきたため、カオスなことになってきているのが実情で、この縛り自体もだいぶ緩いものとなってきています。
6
6
 
7
7
  以上を踏まえた上で本題ですが、まず、他の回答ですでに触れられている通り、8bitCPU の前に 4bitCPU がありましたので、この件は、「4 の倍数かつ、2 のべき乗」というのが正しい話になります。
8
8
 
9
- ではなぜ 4 の倍数なのかと言えば、電卓を発祥とする関係もあり、10 進数表現が必要だったからです。BCD 表現 / 表記等と言いま。なぜれが必要か言えば、小数点以下の数を扱う場合に、2 進数のままだとろいろ都合が悪いによります。
9
+ ではなぜ 4 の倍数なのかと言えば、電卓を発祥とする関係もあり、10 進数表現が必要だったからです。計算結果を10進数表記で出力する際に、4bitで10進数の1桁分を表すBCD 表現 / 表記等に変換してから出力ことで処理が楽になるわけですね。他にも、小数点以下の部分の数を扱う場合に、2 進数のまま計算してると10進数への変換時に結構な誤差が発生してしまって都合が悪い問題への対応してもBCD表記が使われています。
10
10
 
11
11
  そして、なぜ 2 のべき乗なのかと言えば、回路設計の都合です。CPU というのは大規模な回路であり、その設計にはパターン化による省力化が必須です。パターン化することで設計負荷を下げ、デバッグなどのコストを抑えることができます。
12
12