On 14/11/2020 12.24, Bender Piegatore Rodriguez wrote:
[...]
Post by Bender Piegatore RodriguezPost by Piergiorgio SartorPossibile e` possibile, dato che il
codice x86 (codice macchina) viene
compilato per l'altra CPU.
Ma quando mai?
Dov'e' il codice dell'APP?
Compilano il _codice macchina_.
Il programma "exe" e` in assembly.
Il che e` un linguaggio di programmazione
come un altro e puo` essere compilato,
cioe` trasformato, in un altro.
Senza contare che uno potrebbe, inutilmente,
usare un decompilatore che traduce da assembly
a C e poi ricompilare il C.
Post by Bender Piegatore RodriguezSe apri la calcolatrice di Windows hai il codice o il compilato X86?
Che differenza c'e`?
Sempre un linguaggio di programmazione e`.
Se il codice assembly della CPU X e`:
ldx R0,10
ldx R1,20
mul R0,R1,R2
stx R2,$ff00
Questo puo` essere compilato, o trasformato,
come vuoi, nel codice della CPU Y, dove
magari viene riscritto come:
mulx #10,#20,R0
store R0,$ff00
Questa "tecnologia" risale almeno ai tempi
della CPU Alpha di Digital.
All'epoca avevano lo stesso problema, una
CPU senza programmi, perche` il SW era quasi
esclusivamente per x86.
Quindi, gia` allora, hanno iniziato ad usare
questo metodo di tradurre un assembly (x86)
in un altro (Alpha).
Nota che non e` emulato, cioe` non viene
interpretata istruzione per istruzione,
ma viene proprio tradotto, cioe` compilato,
nell'altro assembly, un intero pezzo di codice.
Il punto, ora come allora, e` che certi
blocchi di codice possono essere ottimizzati
per la CPU target molto bene, altri no.
Per cui i benchmark, dipende da come sono
fatti, possono dare ottimi risultati.
Oppure no... :-)
All'epoca di Alpha, mi pare che Digital
sostenesse un incremento delle prestazioni.
La gente che usava il compilatore, invece,
diceva che il codice era generalmente poco
piu` lento (non troppo, pare).
bye,
--
piergiorgio