Perché un programmatore di livello assembly ha bisogno dell'architettura di un processore?
Tutto ciò che fa l'assemblaggio è sostituire i modelli di bit delle istruzioni con mnemotecniche leggibili dall'uomo. Alcuni assemblatori hanno alcune comodità come le variabili e le macro, ma questo è tutto.
Si sta effettivamente programmando a livello di set di istruzioni, il che significa che è necessario conoscere la semantica e le regole di quella ISA.
Per programmare in assembly, è necessario:
- Conoscere le istruzioni disponibili, le loro modalità di indirizzamento e i loro effetti collaterali.
- Conoscere i registri disponibili: quanti sono? Per cosa possono essere usati? Quali sono le regole associate al loro utilizzo?
E questa è solo roba a livello ISA. Se volete fare le cose bene, dovrete conoscere anche l'implementazione. Perché ammettiamolo: se state facendo le cose in assembly probabilmente avete a che fare con risorse molto limitate. Conoscere il costo del ciclo e della memoria di ogni istruzione è importante per la velocità. Per la tempistica, avrete anche bisogno di sapere come il processore (e la macchina) gestisce gli interrupts.
E ci sono anche altre cose. Per esempio, potreste voler usare lo stack: quali convenzioni usa? Il processore ha una mappa di memoria piatta? Una segmentata? Come viene gestito l'I/O?
Queste sono tutte cose che un futuro programmatore assembly deve sapere. Programmare in assembly non significa solo sapere quali istruzioni sono disponibili. A differenza di qualcosa come il C, non c'è astrazione dell'hardware.
Articoli simili
- Perché il linguaggio assembly è migliore del linguaggio a livello macchina?
- Qual è la differenza tra un linguaggio assembly e un linguaggio ad alto livello?
- Qual è la differenza tra linguaggio macchina, linguaggio assembly e linguaggio di alto livello nei computer?
- Qual è il modo migliore per imparare l'architettura del braccio? Come posso capire le basi di qualsiasi processore e braccio?