Si un processeur 32 bits est, en effet, seulement 32 bits de longueur, alors comment les opérations de mathématiques peuvent-elles fonctionner sur des nombres de 64 bits? Par exemple:
long lngTemp1 = 123456789123; long lngTemp2 = lngTemp1 * 123;
3 Réponses :
L'ensemble d'instructions 32 bits de X86 peut être utilisé pour une arithmétique 64 bits, voir Multiplication de précision étendue . P>
Ils utilisent le bit de transport pour ajouter et soustraire. L'assembleur OPS pour "Ajouter avec le transport" et "Soustrayer avec Carry" (ou "Emprunt") peut être utilisé pour une longueur de bits arbitraire Ajout et une soustraction de précision prolongée. P>
Pour se multiplier, si vous n'avez qu'un résultat de 32 bits de multiplier, vous pouvez le casser en paires de valeur de 16 bits et multiplier, puis passer et ajouter (avec le transport) pour obtenir un résultat complet 64 bits de 32- Bit Multiplier. Fondamentalement, en faisant la version à long terme (tout double multiplie de 16 bits dans un résultat 32 bits) peut être utilisé pour générer des multiplies de longueur de bits arbitraires utilisant une précision plus limitée. P>
FWIW, l'instruction Intel 32 bits ASM "MUL" peut mettre un résultat 64 bits dans EDX: EAX afin que vous puissiez réellement se multiplier dans des morceaux 32 bits (avec des valeurs de 64 bits à ajouter) plutôt que 16- morceaux de bits (avec des valeurs 32 bits pour déplacer et ajouter). p>
Même les processeurs 32 bits sont souvent venus avec une unité de point flottante de 64 bits - mais les données ne pouvaient être utilisées que dans les 32 bits à la fois. P>
Plus généralement, cependant, une virgule flottante 64 bits pourrait être accomplie même si le processeur sous-jacent n'autorise que des opérations entier à 8 bits. Cependant, le compilateur ou le programmeur devrait insérer suffisamment de code afin de virtualiser l'effet. P>