Cosa succede se installo un software a 32 bit mentre ho un Windows a 64 bit?

Dipende da quali architetture stai parlando. Ecco alcuni esempi.

x86

Se si esegue un'applicazione x86 a 32 bit su un x86-64 a 64 bit, l'applicazione vedrà una macchina a 32 bit, poiché il processore entra in una modalità operativa speciale che nasconde le estensioni a 64 bit. Le istruzioni si comporteranno come se ciascuno dei registri interi scalari avesse solo 32 bit. (Dico "interi scalari" per lasciare fuori FPU, MMX, SSE, AVX, ecc.)

Quando il processore passa dalla modalità a 32 bit a quella a 64 bit (per esempio, quando si fa una chiamata al sistema operativo), i 32 bit superiori di ciascuno dei corrispondenti registri a 64 bit saranno stati azzerati, se il compito a 32 bit ha scritto in quei registri. Per come è definito x86-64, una scrittura su EAX dà il valore corrispondente in RAX, con i 32 bit superiori azzerati.

Vari registri microarchitettonici nascosti non cambiano di comportamento.

ARMv8

La storia è simile se si esegue un'applicazione ARM AArch32 su una CPU ARM AArch64. (AArch32 e AArch64 sono i nomi di ARM per le varianti a 32 e 64 bit di ARMv8). La piattaforma AArch64 ha un set di registri scalari più grande, e i registri stessi sono più grandi.

ARM definisce una mappatura tra i set di registri a 32-bit e 64-bit. Questa mappatura definisce come i valori fluiscono tra la modalità a 64-bit e quella a 32-bit nei registri della CPU.

SPARCv9

SPARCv9 ha esteso il set di istruzioni in modo tale che il codice a 32-bit non poteva dire che stava girando su una macchina a 64-bit. Tutte le istruzioni sono state ampliate in modo trasparente da 32 bit a 64 bit.

Nella maggior parte dei casi, l'ampliamento dell'istruzione ha un impatto nullo sul suo comportamento nei 32 bit inferiori. Nei casi in cui ha importanza, come gli spostamenti a destra e gli accessi alla memoria, SPARC ha aggiunto nuovi opcode per fornire un comportamento a 64 bit, con gli opcode esistenti limitati a 32 bit.

Così, nel caso di SPARC, non ci sono davvero applicazioni a 32 bit tanto quanto c'è codice che ignora la capacità a 64 bit.

DEC Alpha

Questo è un po' strano, poiché DEC Alpha era una CPU a 64 bit dall'inizio. Ma aveva una caratteristica chiamata FX!32 che gli permetteva di eseguire il codice x86 a 32 bit in modo efficiente. Tecnicamente è una combinazione di emulazione software e traduzione binaria.

Quindi in questo scenario, l'ambiente FX!32 sta effettivamente ricompilando il codice x86 in codice Alpha, e non c'è una mappatura ovvia tra i registri x86 e i registri DEC Alpha.