タグ付けされた質問 「cpu-registers」


3
32ビットレジスタのx86-64命令が完全な64ビットレジスタの上位部分をゼロにするのはなぜですか?
ではインテルのマニュアルのx86-64のツアー、私が読んで おそらく最も驚くべき事実はMOV EAX, EBX、RAXレジスタなどの上位32ビットを自動的にゼロにするなどの命令です。 同じ出典で引用されているIntelのドキュメント(手動の基本アーキテクチャで64ビットモードの3.4.1.1汎用レジスター)は、次のように述べています。 64ビットのオペランドは、宛先の汎用レジスターで64ビットの結果を生成します。 32ビットのオペランドは32ビットの結果を生成し、デスティネーションの汎用レジスターで64ビットの結果にゼロ拡張します。 8ビットおよび16ビットのオペランドは、8ビットまたは16ビットの結果を生成します。デスティネーション汎用レジスタの上位56ビットまたは48ビットは、それぞれ操作によって変更されません。8ビットまたは16ビット演算の結果が64ビットのアドレス計算を目的としている場合は、明示的にレジスタを完全な64ビットに符号拡張します。 x86-32およびx86-64アセンブリでは、次のような16ビット命令 mov ax, bx eaxの上位ワードがゼロになるこの種の「奇妙な」動作を表示しないでください。 したがって、この動作が導入された理由は何ですか?一見すると論理的に見えないようです(ただし、x86-32アセンブリの癖に慣れているためかもしれません)。

5
「FS」/「GS」レジスタの目的は何ですか?
だから私は次のレジスタとその使用法が何であることになっているのか知っています: CS =コードセグメント(IPに使用) DS =データセグメント(MOVに使用) ES =宛先セグメント(MOVSなどに使用) SS =スタックセグメント(SPに使用) しかし、以下のレジスタが何のために使用されることを意図していますか? FS = "ファイルセグメント"? GS = ??? 注:私は特定のオペレーティングシステムについて尋ねるのではなく、CPUが何のために使用することを意図していたかについて尋ねます。

3
なぜJVMスタックベースとDalvik VMレジスタベースなのですか?
私は好奇心旺盛ですが、なぜSunはJVMをスタックベースにすることに決め、GoogleはDalvikVMをレジスタベースにすることに決めたのですか? JVMはプラットフォームに依存しないため、ターゲットプラットフォームで特定の数のレジスタが使用可能であるとは想定できないと思います。そのため、JITコンパイラーへのレジスター割り当てなどを延期するだけです。(私が間違っていれば訂正してください。) それで、Android関係者は、「それは非効率的です。すぐにレジスタベースのvmに行きましょう...」と考えましたか?しかし、待ってください。複数の異なるandroidデバイスがあり、Dalvikが対象としたレジスタの数はいくつですか?Dalvikオペコードは、特定の数のレジスタに対してハードコードされていますか? 現在市場に出ているすべてのAndroidデバイスには、ほぼ同じ数のレジスターがありますか?または、dex-loading中にレジスタの再割り当てが実行されますか?これらすべてをどのように組み合わせるのですか?

4
レジスターが非常に高速である場合、それ以上の数を用意しないのはなぜですか?
32ビットでは、8つの「汎用」レジスタがありました。64ビットでは、量は2倍になりますが、64ビットの変更自体とは無関係のようです。 さて、レジスタが非常に高速である(メモリアクセスがない)場合、自然にそれらの数が増えないのはなぜですか?CPUビルダーは、CPUにできるだけ多くのレジスターを機能させるべきではありませんか?私たちが持っている量しか持っていない理由に対する論理的な制限は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.