2016-12-12 9 views
1

なぜワードには常に2の累乗でバイトが含まれているのか分かりません。なぜそれが5バイトか6バイトを含むことができないのですか?なぜメモリ内のワードに2^nバイトのバイトが含まれているのですか?

+1

2の累乗は、単純なビットシフトがバイトアドレスなどを計算するのに十分であることを意味します。 –

+0

一部のアーキテクチャでは、2の累乗以外のサイズをロードまたは格納するいくつかの命令があります。例えばx87の内部80ビット浮動フォーマットは、[FLD](http://www.felixcloutier.com/x86/FLD.html)と[FSTP](http://www.felixcloutier。 com/x86/FST:FSTP.html)。 x86メモリ - 間接的に32ビットモードで2 + 4バイトをロードします。しかし、これらは例外ではなく、ルールではありません。 –

答えて

2

これは必ずしもそうではありません。 12ビット(PDP-8)の18ビット(PDP-7)36ビット(PDP-10)または60ビット(CDC 6600)を有する機械が過去にあった

今日でも奇妙なサイズのマシン。マイクロチップ社のPIC 16xxxxファミリは14ビットワードでイントロダクションを格納し、24xxxxシリーズは24ビットインストラクションを使用します。しかし、これらは汎用の機械ではなく、特殊な組み込みチップです。

ほとんどの場合、物事は2の累乗に移動しました。このために大きな進展があったのは古いIBM 360でした。これは、4ビットの8ビットバイトを含む32ビットの語句を使用していました。

2ワードサイズのパワーと1ワードあたり2バイトの累乗のこの組み合わせは、整数/ポインタと文字の両方を簡単かつ効率的に扱いました。

現代の機械では、これを64ビットワードに8個の8ビットバイト/ワードで単純に更新し、この有用な利点を保持しています。

+0

あなたが言及している例のどれにバイトアドレス可能なメモリがありますか?メモリがワード・アドレス可能である場合、アドレス計算はワードのビット数、またはワードのオクテット数でスケーリングする必要はありません。 (たとえば、マシンが12ビットのメモリバスを持っているだけかもしれません) –

+0

ほとんどのマシンが元の場所に戻ります。しかしながら、PDP-10は、ワードを6つの6ビット「バイト」または5つの7ビットのものに浪費したビットで、または4つの8ビット・バイトを4つの無駄なビットまたは4つの9ビット・バイトに分解することができる。特別な指示がこれを行うために使用された場所であり、ワード境界やその他の問題に対処することはプログラマの責任でした。実際には、36ビットワードに収まる限り、任意の数の可変ビットフィールドに細分することができます。 –

+0

ええと、文字列にN番目の文字が必要な場合は、探しているキャラクターが含まれている単語のアドレスを取得するために、Nを非2のべき乗で除算する必要があります。ワード・アドレッサブル・メモリは、2の2乗以外の要因でスケールする必要がほとんどないと考えていましたが、メモリを効率的に使用しようとするソフトウェアにとってはそうではないかもしれません。 –

関連する問題