2010-07-06 6 views
6

Si un processeur 32 bits ne mesure en réalité que 32 bits, comment les opérations mathématiques peuvent-elles fonctionner sur des nombres de 64 bits? Par exemple:Comment les maths 64 bits sont-ils exécutés sur une machine 32 bits?

long lngTemp1 = 123456789123; 
long lngTemp2 = lngTemp1 * 123; 

Selon MSDN, un long en C# est un nombre signé 64 bits: http://msdn.microsoft.com/en-us/library/ctetwysk(VS.71).aspx

Comment est-ce que 32 bits Intel microprocesseur peut exécuter du code, comme ci-dessus sans se un débordement?

Répondre

3

Ils utilisent le bit de retenue pour ajouter et soustraire. Les opérations d'assemblage pour "ajouter avec carry" et "soustraire avec carry" (ou "emprunter") peuvent être utilisées pour une addition et une soustraction de précision étendues de longueur arbitraire. Pour multiplier, si vous ne disposez que d'un résultat de multiplication de 32 bits, vous pouvez le diviser en paires de valeurs de 16 bits et multiplier puis décaler et ajouter (avec report) pour obtenir un résultat 64 bits complet de 32 -bit multipliez. Fondamentalement, faire la version à main longue (deux multiplets de 16 bits quelconques correspondent à un résultat de 32 bits) peut être utilisé pour générer des multiplicateurs arbitraires de longueur de bits en utilisant une précision plus limitée. FWIW, l'instruction asm "mul" 32 bits d'Intel peut mettre un résultat 64 bits dans EDX: EAX pour que vous puissiez réellement effectuer des multiplications dans des blocs de 32 bits (avec des valeurs de 64 bits à ajouter) au lieu de 16. morceaux de bits (avec des valeurs de 32 bits à déplacer et à ajouter).

0

Même les processeurs 32 bits sont souvent équipés d'une unité à virgule flottante de 64 bits, mais les données ne peuvent être transmises qu'en bus à 32 bits à la fois. Plus généralement, cependant, un point flottant de 64 bits peut être accompli même si le processeur sous-jacent n'autorise que des opérations entières de 8 bits. Cependant, le compilateur ou le programmeur devra insérer suffisamment de code pour virtualiser l'effet.

Questions connexes