0

これまでのところ、プロセッサにはレジスタがあり、32ビットプロセッサの場合は32ビット、64ビットの場合は64ビットであることを学びました。それで、プロセッサにそのレジスタサイズよりも大きな値を与えるとどうなるかを誰かが説明できますか? 計算はどのように実行されますか?

4

1 に答える 1

4

場合によります。

説明のために x86 を想定すると、64 ビット整数は 32 ビット アーキテクチャで「ネイティブに」処理できます。この場合、プログラムは多くの場合、1 対の 32 ビット レジスタを使用して 64 ビット値を保持します。たとえば、値はレジスタ ペア0xDEADBEEF2B84F00Dに格納される場合があります。EDX:EAX

eax = 0x2B84F00D
edx = 0xDEADBEEF

CPU は実際には、場合によってはこの形式で 64 ビットの数値を予期します ( IDIVなど)。

数学演算は、複数の命令で実行されます。たとえば、32 ビット x86 CPU での 64 ビットの加算は、最初の加算のキャリー フラグを考慮して、add下位 DWORDの 1 つと上位 DWORD の 1 つを使用して実行されます。adc


さらに大きな整数の場合は、任意精度の算術(または「big int」) ライブラリが使用されます。ここでは、動的サイズのバイト配列を使用して整数を表し、追加情報 (使用されるビット数など) を使用します。 GMPは一般的な選択肢です。

大きな整数に対する数学演算は、おそらく一度にネイティブのワードサイズの値で反復的に行われます。詳細については、これらのオープンソース ライブラリのいずれかのソース コードを確認することをお勧めします。


これらすべての鍵は、数値演算が扱いやすい単位で実行され、結合されて最終結果が生成されることです。

于 2013-06-20T05:34:30.717 に答える