Sto lavorando con Kip Irvine's "Assembly Language per x86 Processors, sesta edizione" e mi sto davvero divertendo.Perché il codice deve essere allineato ai limiti di indirizzo pari su x86?
Ho appena letto la mnemonico NOP nel paragrafo seguente:
"It [NOP] is sometimes used by compilers and assemblers to align code to
even-address boundaries."
L'esempio dato è:
00000000 66 8B C3 mov ax, bx
00000003 90 nop
00000004 8B D1 mov edx, ecx
Il libro afferma poi:
"x86 processors are designed to load code and data more quickly from even
doubleword addresses."
La mia domanda is: È la ragione per cui è così perché, per i processori x86, il libro si riferisce a (32 bit), la dimensione della parola di la CPU è a 32 bit e quindi può tirare le istruzioni con il NOP e elaborarle in una volta sola? Se questo è il caso, sto assumendo che un processore a 64 bit con una word size di una quadword farebbe questo con un ipotetico 5 byte di codice più un nop?
Infine, dopo aver scritto il mio codice, dovrei passare e correggere l'allineamento con NOP per ottimizzarlo, o il compilatore (MASM, nel mio caso), farebbe questo per me, come sembra suggerire il testo?
Grazie,
Scott
Tutto quello che vuoi sapere sull'architettura dei processori moderni è su http://www.agner.org/optimize/. L'allineamento richiesto per le istruzioni è indipendente dalla dimensione della parola ed è 16 byte per i moderni processori Intel.Non voglio rovinarti il divertimento, ma non devi fidarti di un libro che fa affermazioni generiche sulle prestazioni di "processori x86". Ogni singolo modello ha caratteristiche diverse. –
Grazie per il tuo commento! Non hai rovinato il mio divertimento - la gioia è nell'apprendimento e ho appena imparato un po 'di più da te! Controllerà anche il sito web. –
Questo libro sembra orribilmente obsoleto. 16bit x86 è molto antico, TBH Non vedo il valore nell'insegnare questa roba anche a scopo didattico. Forse come esempio contrario come _non_ progettare un linguaggio processore/assembly. – hirschhornsalz