コンピューティングにおいて、ワードとは、プロセッサの命令セットまたはハードウェアによってデータの自然な単位または歴史的な単位として扱われる、固定サイズのデータのことです。ワードに含まれるビット数または桁数[ a ] (ワードサイズ、ワード幅、またはワード長)は、特定のプロセッサ設計またはコンピュータアーキテクチャの重要な特性です。
ワードのサイズは、コンピュータの構造や動作の多くの側面に反映されています。プロセッサ内のレジスタの大部分は通常ワードサイズであり、多くの(すべてではない)アーキテクチャでは、1回の操作でワーキングメモリとの間で転送できる最大のデータはワードです。メモリ内の位置を指定するために使用されるアドレスの最大サイズは、通常ハードウェアワードです(ここでいう「ハードウェアワード」とは、他の定義とは異なり、プロセッサのフルサイズの自然ワードを意味します)。
初期のコンピュータのいくつか(および現代のコンピュータのいくつか)は、通常のバイナリではなくバイナリコード化10進数を使用しており、通常は10または12桁のワードサイズを持ち、初期の10進数コンピュータの中には固定ワード長がまったくないものもありました。初期のバイナリシステムでは、6ビットの倍数のワード長を使用する傾向があり、36ビットワードはメインフレームコンピュータで特に一般的でした。ASCIIの導入により、8ビットの倍数のワード長を持つシステムへの移行が進み、1970年代には16ビットマシンが人気を博し、その後、32ビットまたは64ビットの現代のプロセッサに移行しました。[ 1 ]デジタル信号プロセッサなどの特殊用途設計では、4~80ビットの任意のワード長を持つことができます。[ 1 ]
ワードサイズは、以前のコンピュータとの後方互換性のために、想定と異なる場合があります。複数の互換性のあるバリエーションやプロセッサファミリーが共通のアーキテクチャと命令セットを共有しながらワードサイズが異なる場合、その違いに対応するためにドキュメントやソフトウェアの表記が複雑になることがあります(下記の「サイズファミリー」を参照)。
コンピュータの構成方法によっては、ワードサイズの単位が以下の用途に使用される場合があります。
コンピュータアーキテクチャを設計する際、ワードサイズの選択は非常に重要です。特定の用途(例えばアドレス指定)に対して特定のビットグループサイズを推奨する設計上の考慮事項があり、これらの考慮事項は用途ごとに異なるサイズを示唆します。しかし、設計における経済性を考慮すると、単一のサイズ、あるいは基本サイズを基準とした倍数または分数(部分倍数)で関連付けられたごく少数のサイズに絞り込むことが強く推奨されます。この推奨サイズが、アーキテクチャのワードサイズとなります。
文字サイズは、過去(可変長文字エンコーディング以前)には、アドレス解決単位とワードサイズの選択に影響を与える要素の一つでした。1960年代半ば以前は、文字は6ビットで格納されることがほとんどでした。そのため、使用できる文字数は最大64文字で、アルファベットは大文字のみに制限されていました。ワードサイズを文字サイズの倍数にすると時間と空間の効率が良くなるため、この時期のワードサイズは通常6ビットの倍数でした(バイナリマシンの場合)。当時よく使われていたのは36ビットワードで、これは浮動小数点形式の数値特性にも適したサイズでした。
8ビット文字を使用し、小文字をサポートするIBM System/360の設計が導入されて以来、文字(より正確にはバイト)の標準サイズは8ビットとなった。それ以降のワードサイズは当然8ビットの倍数となり、16ビット、32ビット、64ビットが一般的に使用されるようになった。
初期のマシン設計には、可変ワード長と呼ばれる方式を採用したものが含まれていました。この方式では、オペランドに固定長はありません。マシンと命令によっては、長さはカウントフィールド、区切り文字、またはフラグやワードマークなどの追加ビットによって示される場合があります。このようなマシンでは、数値には4ビットの2進数または6ビットの文字が使用されることがよくあります。このクラスのマシンには、 IBM 702、IBM 705、IBM 7080、IBM 7010、IBM 1400シリーズ、IBM 1620、RCA 301、RCA 3301、UNIVAC 1050などがあります。
これらのマシンのほとんどは一度に 1 つのメモリ ユニットを処理し、各命令またはデータは複数のユニットの長さであるため、各命令のメモリへのアクセスだけでも数サイクルかかります。そのため、これらのマシンはしばしば非常に低速です。たとえば、IBM 1620 モデル I では、命令の 12 桁を読み取るだけで8 サイクル (160 μs) かかります(モデル II では、これを 6 サイクルに短縮し、命令が両方のアドレス フィールドを必要としない場合は 4 サイクルに短縮しました)。命令の実行には、オペランドのサイズに応じて可変のサイクル数がかかります。
アーキテクチャのメモリモデルは、ワードサイズに大きく影響されます。特に、メモリアドレスの解像度、つまりアドレスによって指定できる最小単位は、しばしばワードとして選択されます。このアプローチ、すなわちワードアドレス指定方式では、1だけ異なるアドレス値は隣接するメモリワードを指定します。これは、ほぼ常にワード(または複数ワード)単位で処理を行うマシンでは自然なことであり、命令がアドレスを格納するために最小サイズのフィールドを使用できるという利点があります。これにより、命令サイズを小さくしたり、命令の種類を増やしたりすることが可能になります。
ワークロードの大部分がバイト処理となる場合、アドレス解決の単位としてワードではなくバイトを使用する方が一般的に有利です。アドレス値が1つ異なる場合、メモリ内の隣接するバイトを指定します。これにより、文字列内の任意の文字を直接アドレス指定できます。ワード単位でのアドレス指定も可能ですが、使用するアドレスはワード解決の場合よりも数ビット多く必要になります。この方式では、ワードサイズは文字サイズの整数倍である必要があります。このアドレス指定方式はIBM 360で採用され、それ以降に設計されたマシンで最も一般的な方式となっています。
ワークロードが異なるサイズのフィールドを処理する場合、ビット単位でアドレス指定することが有利になる場合があります。ビットアドレス指定を備えたマシンには、プログラマが定義したバイトサイズを使用する命令と、固定データサイズで動作する命令があります。たとえば、IBM 7030 [ 4 ] ("Stretch") では、浮動小数点命令はワード単位でしかアドレス指定できませんが、整数演算命令は、フィールド長を 1~64 ビット、バイトサイズを 1~8 ビット、アキュムレータオフセットを 0~127 ビット指定できます。
バイトアドレス指定可能なマシンでストレージ間(SS)命令を使用する場合、通常、1バイトまたは複数バイトを任意の場所から別の場所にコピーするための移動命令があります。SS命令のないバイト指向(バイトアドレス指定可能)マシンでは、1バイトを任意の場所から別の場所に移動するには、通常次のようになります。
ワード指向マシンでは、個々のバイトにアクセスするには2つの方法があります。バイトは、レジスタ内でシフト操作とマスク操作を組み合わせることで操作できます。1バイトを任意の場所から別の場所に移動するには、次の操作に相当するものが必要になる場合があります。
あるいは、多くのワード指向マシンでは、レジスタやメモリ内の特殊なバイトポインタを用いた命令によってバイト操作が実装されています。例えば、PDP-10のバイトポインタには、バイトのビット単位のサイズ(異なるサイズのバイトへのアクセスを可能にする)、ワード内でのバイトのビット位置、およびデータのワードアドレスが格納されていました。命令は、例えばロードやストア操作の際に、ポインタを次のバイトに自動的に調整することができました。
異なる精度でデータ値を格納するために、異なる量のメモリが使用されます。一般的に使用されるサイズは、アドレス解決単位(バイトまたはワード)の2のべき乗倍です。配列内の項目のインデックスをその項目のメモリアドレスオフセットに変換するには、乗算ではなくシフト演算のみが必要です。場合によっては、この関係により除算演算も不要になります。その結果、最新のコンピュータ設計では、ワードサイズ(およびその他のオペランドサイズ)は、バイトサイズの2のべき乗倍になっています。
固定ワードサイズを持つ古いコンピュータのドキュメントでは、メモリサイズをバイトや文字ではなくワードで表記するのが一般的です。ドキュメントでは、メートル法の接頭辞を正しく使用している場合もあれば、丸め処理を行っている場合もあります(例:65キロワード(kW)は65536ワードを意味します)。また、キロワード(kW)が1024ワード(2 10)を意味し、メガワード(MW)が1,048,576ワード(2 20)を意味するなど、誤って使用されている場合もあります。8ビットバイトとバイトアドレス指定の標準化により、メモリサイズを1000ではなく1024のべき乗でバイト、キロバイト、メガバイトで表記するのが一般的になっていますが、IECバイナリ接頭辞が使用されている場合もあります。
コンピュータ設計が複雑化するにつれ、アーキテクチャにおける単一のワードサイズの重要性は低下してきた。高性能なハードウェアはより多様なサイズのデータを扱えるようになるものの、市場の圧力によってプロセッサの能力を拡張しつつ、後方互換性を維持する必要性が生じている。そのため、新規設計では中心的なワードサイズとなるはずだったものが、後方互換性のある設計においては、元のワードサイズに代わる代替サイズとして共存する必要が生じる。元のワードサイズは将来の設計でも引き続き使用可能であり、サイズファミリーの基礎となる。
1970年代半ば、DECは16ビットのPDP-11の後継機として32ビットのVAXを設計しました。16ビットの量をワード、32ビットの量をロングワードと呼びました。この用語はPDP-11で使用されていた用語と同じです。これは、メモリのアドレス指定の自然な単位がワードと呼ばれ、ワードの半分の量がハーフワードと呼ばれていた以前のマシンとは対照的です。この方式に合わせると、VAXのクワッドワードは64ビットです。彼らは64ビットのAlphaでもこの16ビットワード/32ビットロングワード/64ビットクワッドワードの用語を継続しました。
もう1つの例はx86ファミリーです。このファミリーでは、3種類の異なるワード長(16ビット、後に32ビット、64ビット)のプロセッサがリリースされていますが、ワードは引き続き16ビットの値を表します。ソフトウェアは日常的にあるワード長から次のワード長に移植されるため、一部のAPIやドキュメントでは、ソフトウェアがコンパイルされるCPU上の完全なワード長よりも古い(したがって短い)ワード長を定義または参照しています。また、多くのプログラムで小さな数値にバイトが使用されるのと同様に、より広いワードの範囲が必要ないコンテキストでは、より短いワード(16ビットまたは32ビット)が使用されることがあります(特に、これによりスタック領域やキャッシュメモリ領域を大幅に節約できる場合)。たとえば、MicrosoftのWindows APIは、標準ワードサイズがそれぞれ32ビットまたは64ビットである32ビットまたは64ビットのx86プロセッサでAPIが使用される可能性があるにもかかわらず、 WORDのプログラミング言語定義を16ビットに維持しています。このような異なるサイズのワードを含むデータ構造は、次のように参照されます。
Intelのx86アセンブリ言語でも同様の現象が見られます。命令セットがさまざまなサイズ(および下位互換性)をサポートしているため、一部の命令ニーモニックには「d」または「q」という識別子が付いており、これはアーキテクチャの元の16ビットワードサイズに基づいて「double-」、「quad-」、「double-quad-」を表しています。
ワードサイズが異なる例として、IBM System/360ファミリーが挙げられます。System /360 アーキテクチャ、System/370 アーキテクチャ、System/390アーキテクチャでは、8 ビット バイト、16 ビット ハーフワード、32 ビット ワード、64 ビット ダブルワードが使用されています。このアーキテクチャファミリーの64ビットメンバーであるz/Architectureでは、引き続き 16 ビットハーフワード、32 ビットワード、64 ビットダブルワードが使用され、さらに 128 ビットクワッドワードも使用できます。
一般的に、新しいプロセッサは、古いプロセッサとのバイナリ互換性を確保するために、古いプロセッサと同じデータワード長と仮想アドレス幅を使用する必要がある。
ソースコードの互換性とソフトウェアの移植性を念頭に置いて丁寧に書かれたソースコードは、データワード長やアドレス幅が異なる、あるいはその両方が異なるプロセッサであっても、さまざまなプロセッサ上で動作するように再コンパイルできる場合が多い。
[...] 内部データコードが使用されます。定量的 (数値) データは 4 ビットの 10 進コードでコード化され、定性的 (英数字) データは 6 ビットの英数字コードでコード化されます。内部
命令コードと
は、命令がストレート バイナリ コードでコード化されていることを意味します。
内部情報長に関して、情報量子は「
カテナ
」と呼ばれ、6桁の10進数または4文字の英数字を表す24ビットで構成されます。この量子は、10進数または英数字の整数を表すために、4ビットと6ビットの倍数でなければなりません。24ビットは、並列読み出しコアメモリからの転送フローが低すぎる最小12ビットと、情報量子が大きすぎると判断された36ビット以上との間の適切な妥協点であることがわかりました。カテナは可変ワード長マシンにおける文字に相当するものと考えられます
が
、複数の文字を含む可能性があるため、文字と呼ぶことはできません。カテナはメインメモリとの間で直列に転送されます。
「量子」をワード、または文字の集合を文字と呼びたくない(ワードはワードであり、量子は別のもの)ため、新しいワードが作成され、「カテナ」と呼ばれました。これは英語の単語で、
ウェブスター辞典
にも載っていますが、フランス語にはありません。ウェブスター辞典におけるcatenaの定義は「連結された数列」であり、したがって24ビットの情報項目です。以降、catenaという単語を使用します。
したがって、内部コードは定義されました。では、外部データコードとは何でしょうか?これらは主に、関係する情報処理装置に依存します。Gamma
60は
、あらゆるバイナリコード化構造に関連する情報を処理できるように設計されています。したがって、80列のパンチカードは960ビットの情報項目とみなされます。12行×80列=960通りのパンチが可能であり、2列のカードが1つのcatenaを占める960個の磁気コアに正確なイメージとして格納されます。[...]
[...] ここで使用されている、機械設計によって課せられる構造を説明する用語は、
ビット
に加えて、以下にリストされています。
バイトは
、文字をエンコードするために使用されるビットのグループ、または入出力ユニットとの間で並列に送信されるビットの数を示します。ここでは
文字
以外の用語
が使われています。なぜなら、特定の文字は異なるアプリケーションで複数のコードで表現される場合があり、また異なるコードでは異なるビット数(つまり、異なるバイトサイズ)が使用される場合があるからです。入出力伝送では、ビットのグループ化は完全に任意であり、実際の文字とは何の関係もありません。(この用語はbiteから造語されています
が、bitへの誤用を避けるために綴りが変えられています。)ワード
と
は
、
1
つ
のメモリサイクルでメモリとの間で並列に送信されるデータビットの数です。したがって、
ワードサイズ
はメモリの構造的特性として定義されます。(この目的のために、
Bull
GAMMA 60
コンピュータの設計者によって
catena
という用語が造語されました。)
ブロック
とは、単一の入出力命令に応じて入出力ユニットとの間で送受信されるワードの数を指します。ブロックサイズは入出力ユニットの構造的特性であり、設計によって固定されている場合もあれば、プログラムによって変更される場合もあります。[...]
バンドル
と呼ばれる 128 ビット サイズで整列されたコンテナにグループ化されます
。各バンドルには、3 つの 41 ビット
命令スロット
と 5 ビットのテンプレート フィールドが含まれます。