[解決済み] 64ビットマシンでのQWORDのサイズは?
質問
現在、上記の質問に対する答えを探しています。64ビットマシンでは、ワードサイズは64ビットで、QWORD(4 * ワード)は256ビットの大きさであることを示唆しています。
しかし一方で、次のような資料も見つけました。 これ 128ビット(32ビットは64ビット、64ビットはこの2倍)とする説と、64ビットとする説があります。しかし、最後のものは、マイクロソフトがワードのサイズを16ビットと定義することで皆を混乱させ、問題を悪化させていることと何らかの関係があります。
もしかしたら、どなたか私の混乱を解決し、このトピックについてご教示いただけるかもしれません。
どのように解決するのですか?
x86の用語/ドキュメントでは、quot;word"は16ビットです。
なぜなら、x86は16ビットの8086から発展したものだからです。 拡張機能が追加されるたびにこの用語の意味を変えていては、混乱を招くだけです。
cwd
(符号拡張でワードをドワードに)用語はISAに焼き付けられた。
- x86ワード=2バイト
- x86 dword = 4バイト(ダブルワード)
- x86 qword = 8 バイト (クワッドワード)
-
x86ダブルクアッドまたはxmmword = 16バイト、例.
movdqa xmm0, [rdi]
.
またcqo
ニーモニック 、オクトワード。 (RAXをRDX:RAXに符号拡張したもの。idiv
)
そして、次のような楽しい命令があります。
punpcklqdq
: 2つのqwordをシャッフルしてdqwordにする、あるいは
pclmulqdq
は、q ワードのキャリーレス乗算で、dq フル結果を生成します。 しかし、それ以上のSIMDニーモニックはAVXになりがちです。
vextracti128
または AVX512 (オプションで要素ごとのマスキングが可能)
vextractf64x4
を使用して、ZMM レジスタの上位 256 ビットを抽出します。
x86 は奇妙で、すべてが 2 の累乗ではないのです。 また、プロテクトモードでの 48 ビット seg:off 16:32 遠距離ポインターもあります。 (基本的に使わず、32ビットオフセット部分のみ)。
他のほとんどの64ビットISAは32ビットISAから発展したものです。 (AArch64、MIPS64、PowerPC64など)、あるいは最初から64ビットだった(Alpha)。 ということは、quot;word"は32ビットを意味するわけですね。
- 32ビットワード=4バイト
-
dword = 8バイト(ダブルワード)、例:MIPS
daddu
は64ビット整数加算 - qword = 16バイト(クワッドワード)、サポートされている場合。
マシン語" と、アーキテクチャにラベルを貼ること。
マシン語という概念について は、x86には当てはまりません。 マシンコードのフォーマットがバイトストリームであり、複数のオペランドサイズを同等にサポートし、アラインされていないロード/ストアで自然アラインのものをほとんど気にせず、通常のキャッシュ可能なメモリのキャッシュライン境界のみを気にします。
ワードオリエンテッドなRISCであっても、レジスタやキャッシュアクセスのサイズは、命令幅やドキュメントでワードとして使用されているものと異なる場合があります。
ワードサイズという概念は、一般的に過大評価されています。 x86に限ったことではありません。 64ビットのRISC ISAでも、32ビットや64ビットのアライメント付きメモリを同等の効率でロード/ストアできますから、自分がやっていることに最も役立つ方を選んでください。 最大効率のサイズが1つしかない場合(たとえば、いくつかの32ビットRISCでは32ビット)には、それをワードサイズと呼ぶと便利です。
私が聞いたことのあるどの64ビットマシンでも、quot;word"は64ビットを意味しないんです。 DECのAlpha AXPでさえ、積極的に64ビットになるように一から設計されたのに、32ビットの命令語を使用しています。 IRCのマニュアルではワードを32ビットと呼んでいます。
存在 有能 64ビットを1つの命令で整数レジスタにロードしても、それはワードサイズにはなりません。 BitnessとWord Sizeは、技術的に難しい意味はありません。 ほとんどのCPUは、内部で複数の異なるサイズを持っています。 (例:64 バイト Haswell以降のIntelのL2キャッシュとL1dキャッシュ間のバス、および32バイトのSIMDロード/ストア)。
つまり、CPUベンダーのドキュメント作成者が、自社のISAにおいて"word"(ひいてはdword / qword)をどのように意味づけるかは、基本的にそのベンダー次第なのです。
面白いことに、SPARC64ではワード/ダブルワードではなく、"ショートワード"(32ビット)対"ロングワード"(64ビット)について述べています。 64ビットのSPARCのドキュメントでは、修飾語なしの"word"だけに意味があるのかどうかは分かりませんが。
関連
-
[解決済み】x86アセンブリ。AT&Tの構文で「subl」コマンドはどのように動作するのか
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] MIPS srlを変数で指定
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] cmp命令の理解
-
[解決済み] CS:IPの組み立ての意味と仕組みについて教えてください。
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】あるLinuxが32bitか64bitかを判断する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン