ほとんどのコンパイラは32ビット環境でどのように64ビットオペランド(long intなど)でオペレーションを実装しますか?言い換えれば、これらの操作を単一のステップで実装する方法があるのでしょうか、またはこれらの操作を実装するために複数のメモリ位置にアクセスする必要がありますか?32ビットアーキテクチャの64ビットオペランドでの操作?
答えて
これらは2つのレジスタを使用して64ビットの値を保持します。 1つは下位32ビット用で、もう1つは上位32ビット用です。 x86の場合
は、64ビットの加算/減算を使用して行われてキャリー-加算および減算-で-借りる説明書:
add %eax, (lower 32-bits of operand)
adc %edx, (upper 32-bits of operand)
64ビット乗算ははるかに複雑ですが、また、使用して行います32ビット乗算と32ビット加算加算命令の組み合わせ。 (2桁のlong乗算と同様の方法で)
ロードとストアでは、2つの32ビット値を2つのレジスタにロード/ストアする必要があります。
同様に、64ビットハードウェアで128ビットの整数を実装できます。 GCCはこれを拡張としてサポートしています。
32ビット(x86)ハードウェアの128ビット整数はどうですか? –
醜いです。この時点では、多精度算術とあまり変わらない。加えて、3つの 'adc'命令を連鎖させます。 (あなたのパイプラインを殺す可能性のあるキャリーフラグに依存していることを忘れないでください...)乗算のためには、16 x 32ビットの乗算と 'add'と' adc'の束を行う必要があります。私はこれをサポートするコンパイラについては知らない。 – Mysticial
- 1. 64ビットアーキテクチャの32ビットOS
- 2. NSIntegerとiOS上の64ビットアーキテクチャ
- 3. 64ビットアーキテクチャの最適化
- 4. AFNetworking - この64ビットライブラリを32ビットアーキテクチャで簡単に使用できますか?
- 5. 64ビットアーキテクチャでvalgrindが32 Gbに制限されるのはなぜですか?
- 6. 64ビットアーキテクチャでのCの問題:pthread_kill()
- 7. 32ビットアーキテクチャのCプログラムのコンパイルとリンク
- 8. 32ビットアーキテクチャ上で2つの10桁の32ビットの数値を掛ける
- 9. どのように32ビットIRホールドロード命令ですか?(RISCスタイルの32ビットアーキテクチャ)
- 10. 64ビットWindows(メモリ)の32ビットアプリケーションの動作
- 11. 32ビットと64ビットの動作の差
- 12. 64ビットアーキテクチャと32ビットインテルアーキテクチャでアプリケーションをどのように実行する必要がありますか?
- 13. インテル64およびIA-32 |獲得/解放の意味を含むアトミック操作
- 14. 64ビットアーキテクチャ上のJniのポインタサイズは何ですか
- 15. 64ビットアーキテクチャでオブジェクトヘッダーサイズが倍増したのはなぜですか?
- 16. 32ビットサーバーと32/64ビットクライアントのSubversion
- 17. nasmを使用した64ビットおよび32ビットアーキテクチャのアセンブリ言語からprintfを呼び出す
- 18. は、だから私は、ローカルに64ビットのApache/PHPをインストールしたWAMP 64ビットアーキテクチャ
- 19. 32ビット対64ビットのカスタムフレームワーク
- 20. 32対64ビットJREのJava9
- 21. Officeの32ビットdll 64ビット
- 22. 32ビットウィンドウ下の64ビットレジスタ
- 23. iOS 32対64ビットのアプリケーション
- 24. 32ビットと64ビットのセットアッププロジェクト
- 25. 64ビットシステムで32ビットバイナリをコンパイル
- 26. 32ビット/ 64ビットOS?
- 27. 64ビット環境での32ビットプロセスのロード
- 28. Chocolatey - このパッケージは64ビットアーキテクチャをサポートしていません
- 29. 32ビット整数のビット操作
- 30. 32ビットと64ビットマシンの両方で常に64ビットです
または複数のレジスタ –