私はいくつかの研究をしました。バイトは8ビットで、ワードはメモリ上でアドレス指定できる最小単位です。単語の正確な長さはさまざまです。私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?
私は教授にこの質問をしたところ、最近のほとんどのマシンはバイトアドレス指定可能であると彼は言ったが、それは何を意味するのだろうか?
私はいくつかの研究をしました。バイトは8ビットで、ワードはメモリ上でアドレス指定できる最小単位です。単語の正確な長さはさまざまです。私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?
私は教授にこの質問をしたところ、最近のほとんどのマシンはバイトアドレス指定可能であると彼は言ったが、それは何を意味するのだろうか?
回答:
バイト:現在、バイトはほとんど常に8ビットです。ただし、常にそうであるとは限らず、「標準」やこれを規定するものはありません。8ビットはそれを扱うのに便利な数なので、事実上の標準になりました。
ワード:プロセッサがデータを処理するときの本来のサイズ(レジスタサイズ)。今日遭遇する最も一般的なワードサイズは、8、16、32、64ビットですが、他のサイズも可能です。たとえば、いくつかの36ビットマシンや12ビットマシンさえありました。
バイトは、 CPUのためのアドレス可能な最小単位です。シングルビットを設定/クリアしたい場合は、まずメモリから対応するバイトをフェッチし、ビットをいじってから、バイトをメモリに書き戻す必要があります。
対照的に、ワードは、プロセッサが一度に処理(加算や減算など)を実行できるビットの最大のチャンクです。一部のプロセッサでは、タスクごとにワードサイズが異なる可能性があるため、その定義は少しあいまいです(たとえば、整数処理と浮動小数点処理)。ワードサイズは、ほとんどの操作で使用されます。
ポインタサイズが異なるプロセッサもいくつかあります。たとえば、8086は16ビットプロセッサです。つまり、そのレジスタは16ビット幅です。しかし、そのポインタ(アドレス)は20ビット幅であり、2つの16ビットレジスタを特定の方法で組み合わせることによって計算されました。
word
は、デフォルトのオペランドサイズが32ビット(dword)、整数レジスター幅が64ビット(qword)である最近のx86 CPUでも、a は16ビットです。また、xmmレジスタは128ビット幅です(movdqa
ダブルクワッドに移動)。メモリバスは少なくとも64ビット幅(および64バイトのバーストで転送=キャッシュライン)であり、実行ユニットからキャッシュへのパスは、少なくとも128ビット幅、または256ビットまたは512ビット幅です。現代のx86のネイティブマシンワードサイズが何であれ、それは16ビットではありませんが、現代のx86は8086の用語を使用しています。
私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?
バイトが必ずしも8ビットであるとは限らないという技術的なポイントは別として、用語がある理由は単純な人間の性質です。
努力の経済性(怠惰)- 「8ビット」ではなく「バイト」と言う方が簡単
部族主義-人々のグループは、専門用語/私的な言語を使用して、他の人と区別することを好みます。
ただ流れに乗ってください。あなたはそれについて不平を言って、50年以上に渡って蓄積されたIT用語と文化的な手荷物を変えるつもりはありません。
FWIW-「ハードウェアアーキテクチャに依存しない8ビット」が「オクテット」であることを意味するときに使用する正しい用語。
バイト
私はC ++の観点からこの質問に答えようとしています。
C ++標準では、「バイト」を「実行環境の基本文字セットのメンバーを保持するのに十分な大きさのアドレス可能なデータの単位」と定義しています。
これは、実装の基本的な文字セットに対応するのに少なくとも十分な隣接ビットでバイトが構成されることを意味します。つまり、可能な値の数は、個別の文字の数以上でなければなりません。米国では、基本的な文字セットは通常、ASCIIおよびEBCDICセットであり、それぞれ8ビットで対応できます。したがって、1バイトが少なくとも8ビットを持つことが保証されます。
つまり、1バイトは、1つの文字を格納するために必要なメモリの量です。
C ++実装の「ビット数」を確認する場合は、「limits.h」ファイルを確認してください。以下のようなエントリが必要です。
#define CHAR_BIT 8 /* number of bits in a char */
語
ワードは、マシン/システムによって一緒に(つまり1回の試行で)処理できる特定のビット数として定義されます。あるいは、Wordは、1回の操作でCPUとRAMの間で転送できるデータ量を定義していると言えます。
コンピュータマシンのハードウェアレジスタはワードサイズです。ワードサイズは、可能な最大のメモリアドレスも定義します(各メモリアドレスはバイトサイズのメモリを指します)。
注– C ++プログラムでは、メモリアドレスはワードではなくメモリのバイトを指します。
ワードは、プロセッサ内のレジスタのサイズです。これは、add、mulなどのプロセッサ命令がワードサイズの入力にあることを意味します。
しかし、最新のアーキテクチャのほとんどは、8ビットのチャンクでアドレス可能なメモリを備えているため、「バイト」という単語を使用すると便利です。
このコンテキストでは、単語は、メモリを操作するときにマシンが使用する単位です。たとえば、32ビットマシンでは、ワードは32ビット長で、64ビットでは64ビット長です。ワードサイズはアドレス空間を決定します。
プログラミング(C / C ++)では、単語は通常int_ptr
、ポインタと同じ長さの型で表されます。これにより、これらの詳細が抽象化されます。
ただし、Win32 APIなどの一部のAPIは、WORD
(16ビット)やDWORD
(32ビット)などのタイプを持っているため、混乱する可能性があります。その理由は、APIが最初は16ビットマシンを対象としていたため、32ビットマシンに移植され、次に64ビットマシンに移植されたためです。ポインタを格納するには、を使用できますINT_PTR
。詳細はこちらとこちら。
すべての回答は高水準言語、主にC / C ++を想定しているようです。
しかし、質問には「アセンブリ」というタグが付いており、私が知っているすべてのアセンブラ(8ビット、16ビット、32ビット、および64ビットCPUの場合)では、定義がはるかに明確です。
byte = 8 bits
word = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
int<X>_t
とuint<X>_t
タイプ(およびそれ以上)があり、特定のビットサイズの変数/パラメーターが必要な場合に使用する必要があります。
単語の正確な長さはさまざまです。私が理解していないのは、バイトを持つことの意味は何ですか?8ビットと言ってみませんか?
ワードの長さはさまざまですが、現代のすべてのマシン、および私がよく知っている古いアーキテクチャでも、ワードサイズはバイトサイズの倍数です。したがって、可変ワードサイズに関して、「8ビット」ではなく「バイト」を使用することに特別な欠点はありません。
それ以外に、「8ビット」でバイト(またはオクテット1)を使用するいくつかの理由があります。
1この回答ではバイトを8ビットと見なしますが、これは普遍的に当てはまるわけではありません。古いマシンではバイトのサイズが異なる場合があります(6ビットなど)。マシンに関係なく、オクテットは常に8ビットを意味します(したがって、この用語はネットワークプロトコルの定義によく使用されます)現代の使用では、バイトは8ビットと同義語として圧倒的に使用されています。
データシートおよびコンパイラに存在する用語が何であれ、「バイト」は8ビットです。特に「バイト」という単語は「By Eight」という表現から来ているので、要求者と一般性をもっとあいまいな例外と混同しないようにしましょう。私は30年以上半導体/エレクトロニクス業界で働いており、8バイトを超えるものを表現するために「バイト」が使用されることはかつてありませんでした。
リファレンス:https : //www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt
コンピュータストレージの基本単位はビットです。ビットには、0と1の2つの値のいずれかを含めることができます。コンピューター内の他のすべてのストレージは、ビットのコレクションに基づいています。十分なビットがあるとすれば、コンピュータが表すことができるものの数は驚くべきものです。1バイトは8ビットであり、ほとんどのコンピューターでは、最小の便利なストレージチャンクです。たとえば、ほとんどのコンピューターにはビットを移動する命令はありませんが、バイトを移動する命令はあります。あまり一般的ではない用語は単語です。これは、特定のコンピュータアーキテクチャのネイティブデータユニットです。ワードは1バイト以上で構成されます。たとえば、64ビットのレジスタと64ビットのメモリアドレス指定を備えたコンピュータには、通常64ビット(8バイト)のワードがあります。コンピューターは、一度に1バイトではなく、ネイティブのワードサイズで多くの操作を実行します。コンピュータストレージ、ほとんどのコンピューターのスループットとともに、一般にバイトおよびバイトのコレクションで測定および操作されます。キロバイト(KB)は1,024バイトメガバイト(MB)、1,024 2バイトギガバイト、またはGB、1,024 3バイトテラバイト(TB)、1,024 4バイトペタバイト(PB)は1,024 5バイトコンピュータメーカーはこれらの数値を四捨五入して、1メガバイトは100万バイト、1ギガバイトは10億バイトと言っています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)024 5バイトコンピューターの製造元は、これらの数値を四捨五入して、メガバイトは100万バイト、ギガバイトは10億バイトであると説明しています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)024 5バイトコンピューターの製造元は、これらの数値を四捨五入して、メガバイトは100万バイト、ギガバイトは10億バイトであると説明しています。ネットワーク測定は、この一般的なルールの例外です。それらはビットで与えられます(ネットワークが一度に少しずつデータを移動するため)
マシンがバイトアドレス指定可能で、ワードがメモリ上でアドレス指定できる最小単位である場合、ワードはバイトになると思います。
word
間違いなく 32ビットを意味し、そこだlb
8ビットをロード(負荷バイト)命令。
8ビットのグループは、バイトと呼ばれます(特定のアーキテクチャでは、そうでない場合を除きます)。
ワードは、プロセッサの命令セットおよび/またはハードウェアによりユニットとして扱われるビットの固定サイズのグループです。つまり、汎用レジスターのサイズ(通常は1バイト以上)はワードです。
Cでは、単語は最もよく整数と呼ばれます=>int
octet
は、byteという用語に関連する曖昧さのために、8ビットのシーケンスを明示的に示すように定義されました。しかし、私はbyte
より良い音が好きです:)
byte
良い音が好き」の+1:いくつかのニッチなシステムではこれだけで安全ではないのではないかと強く疑います。バイトの「混乱」はおそらく8ビット以外のサイズです最近は関係ありません。
BYTEおよびWORDの用語は、参照されるプロセッサのサイズに関連しています。最も一般的なプロセッサは、8ビット、16ビット、32ビット、または64ビットです。これらはプロセッサのワード長です。実際には、数値の長さが何であれ、WORDの半分はBYTEです。これに備えて、BYTEの半分はNIBBLEです。
実際、一般的な用法では、単語が16ビットと同義語になり、バイトが8ビットと同じようになっています。32ビットCPUの「ワードサイズ」は32ビットであるため、少し混乱する可能性がありますが、データのワードについて話す場合、16ビットを意味します。32ビットワードサイズのマイクロコントローラーは、命令を「長い」と呼びます(ワードとダブルワードの混同を回避するため)。
ldrh
ので、ARM命令は 16ビットをロードして32ビットレジスタにゼロ拡張するのを好みます。またはldrsh
、16ビットをロードして符号拡張します。