私はいくつかの研究をしました。バイトは8ビットで、ワードはメモリ上でアドレス指定できる最小単位です。 Wordの正確な長さはさまざまです。私が理解していないのは、バイトを持つことのポイントは何ですか?なぜ8ビットと言わないのですか?
教授にこの質問をしたところ、最近のほとんどのマシンはバイトアドレス指定可能であると言われましたが、それは何を意味しますか?
Byte:今日、バイトはほとんど常に8ビットです。しかし、それは 常にそうではなかった であり、「標準」またはこれを指示するものはありません。 8ビットは動作するのに便利な数であるため、事実上の標準になりました。
Word: プロセッサがデータを処理する自然なサイズ (レジスタサイズ)。今日出会う最も一般的なWordのサイズは8、16、32、64ビットですが、他のサイズも可能です。たとえば、いくつかの 6ビットマシン 、または 12ビットマシン がありました。
byteは、CPUの最小アドレス可能ユニットです。単一のビットを設定/クリアする場合は、最初に対応するバイトをメモリからフェッチし、ビットをいじってから、メモリにバイトを書き戻す必要があります。
これに対して、Wordは、プロセッサが一度に処理(加算や減算など)できる最大のビットチャンクです。一部のプロセッサは、タスクごとに異なるWordサイズを持っている可能性があるため、その定義は少しあいまいです(たとえば、整数と浮動小数点の処理)。 Wordのサイズは、majorityが処理するものです。
また、異なるpointerサイズを持つプロセッサがいくつかあります。たとえば、8086は16ビットプロセッサであり、そのレジスタは16ビット幅です。ただし、そのポインター(アドレス)は20ビット幅であり、2つの16ビットレジスタを特定の方法で組み合わせて計算されました。
私が理解していないのは、バイトを持つことのポイントは何ですか?なぜ8ビットと言わないのですか?
バイトが必ずしも8ビットであるとは限らないという技術的な点は別として、用語を持つ理由は単純な人間の性質です。
努力の経済性(別名怠aka)-簡単「8ビット」ではなく「バイト」と言う
部族主義-人々のグループは、専門用語/プライベート言語を使用して、他の人々から区別します。
ただ流れに行く。それについて文句を言うことによって、蓄積された50年以上のIT用語と文化的手荷物を変えるつもりはありません。
FWIW-「ハードウェアアーキテクチャに依存しない8ビット」を意味するときに使用する正しい用語は「オクテット」です。
バイト
私はC++の観点からこの質問に答えようとしています。
C++標準では、「バイト」を「実行環境の基本文字セットのメンバーを保持するのに十分な大きさのアドレス可能なデータ単位」と定義しています。
つまり、バイトは、実装の基本的な文字セットを収容するのに少なくとも十分な隣接ビットで構成されています。つまり、可能な値の数は、個別の文字の数以上でなければなりません。米国では、基本的な文字セットは通常ASCIIおよびEBCDICセットであり、それぞれ8ビットで対応できます。したがって、1バイトには少なくとも8ビットが含まれることが保証されます。
言い換えれば、バイトとは、単一の文字を格納するために必要なメモリの量です。
C++実装の「ビット数」を確認する場合は、「limits.h」ファイルを確認してください。以下のようなエントリが必要です。
#define CHAR_BIT 8 /* number of bits in a char */
ワード
ワードは、マシン/システムによって一緒に(つまり1回の試行で)処理できる特定のビット数として定義されます。あるいは、1回の操作でCPUとRAMの間で転送できるデータ量をWordが定義していると言えます。
コンピューターマシンのハードウェアレジスタはWordサイズです。ワードサイズは、可能な最大メモリアドレスも定義します(各メモリアドレスはバイトサイズのメモリを指します)。
注– C++プログラムでは、メモリアドレスはWordではなくメモリのバイトを指します。
なぜ8ビットと言わないのですか?
すべてのマシンに8ビットのバイトがあるわけではないからです。このC
にタグを付けたので、CHAR_BIT
でlimits.h
を検索します。
ワードは、プロセッサ内のレジスタのサイズです。これは、add、mulなどのプロセッサ命令がWordサイズの入力にあることを意味します。
しかし、最新のアーキテクチャのほとんどは、8ビット単位でアドレス指定可能なメモリを備えているため、Wordの「バイト」を使用すると便利です。
このコンテキストでは、Wordはメモリを操作するときにマシンが使用する単位です。たとえば、32ビットマシンでは、Wordは32ビット長で、64ビットでは64ビット長です。 Wordのサイズによってアドレス空間が決まります。
プログラミング(C/C++)では、通常、Wordはint_ptr
タイプで表され、ポインターと同じ長さで、このようにしてこれらの詳細を抽象化します。
ただし、Word
(16ビット)やDWORD
(32ビット)などのタイプがあるため、Win32 APIなどの一部のAPIは混乱を招く可能性があります。その理由は、APIが最初に16ビットマシンをターゲットにしてから、32ビットマシンに移植され、次に64ビットマシンに移植されたためです。ポインターを保存するには、INT_PTR
を使用できます。詳細 here および here 。
すべての答えは高レベルの言語と主に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")
データシートとコンパイラで使用される用語が何であれ、「バイト」は8ビットです。特に「単語」という単語は「バイエイト」という表現に由来するため、問い合わせ者と一般性をより曖昧な例外と混同しないようにしましょう。私は半導体/エレクトロニクス業界で30年以上働いており、かつて8ビット以上を表すために使用されていた「バイト」は知られていませんでした。
Wordの正確な長さはさまざまです。私が理解していないのは、バイトを持つことのポイントは何ですか?なぜ8ビットと言わないのですか?
Wordの長さはさまざまですが、最新のすべてのマシンや、私が使い慣れている古いアーキテクチャでも、Wordのサイズはバイトサイズの倍数のままです。したがって、可変Wordサイズに関して、「8ビット」ではなく「バイト」を使用することには特に欠点はありません。
それ以外に、バイト(またはオクテット)を使用する理由がいくつかあります1)「8ビット」以上:
1 私はこの答えのためにバイトを8ビットと考えていますが、これは普遍的に真実ではありません:古いマシンでは、byteは異なるサイズを持つ可能性があります( 6ビット など。Octetは、マシンに関係なく、常に8ビットを意味します(したがって、この用語は、ネットワークプロトコル)。現代の使用法では、バイトは8ビットと同義語として圧倒的に使用されています。