Se fai decide di imparare un po 'di assemblatore, dovresti probabilmente imparare qualcosa come 6502 assembler su un Commodore 64 (emulato, ovviamente) o 68000 su un Amiga.
Puoi avere un'idea del Commodore 64 qui ...
link
Il classico libro tutto-di-cui-sai-conoscere è quello descritto qui ...
link
Probabilmente puoi trovare una scansione PDF se ti guardi intorno.
IMO, 6502 è più facile di Z80 e 68000 è più semplice di 8086 - più set di istruzioni regolari ecc.
Ma la CPU è solo un aspetto dell'hardware. Inoltre, una CPU moderna è una bestia enormemente diversa e fa cose che sono trasparenti anche dal punto di vista dei compilatori, come la presentazione di uno spazio di indirizzi virtuali.
Un particolare vantaggio del 6502 sul C64 è che non solo la CPU è semplice, ma c'è anche un modo molto semplice di hackerare l'hardware. Mi divertivo molto a giocare con il chip musicale SID.
Quindi - probabilmente è un esercizio utile se non ci passi troppo tempo. Ho imparato 6502 assembler come seconda lingua quando avevo circa 14 anni, subito dopo Commodore Basic. Ma soprattutto sta ottenendo un modello di lavoro molto semplice in modo da poter aggiungere idee più sofisticate ad esso con un minimo di incomprensioni.
Alcune cose utili che puoi imparare lavorando nell'assemblatore ...
- Come funzionano i registri della CPU.
- Come funziona l'indirizzamento della memoria, incluso l'indirizzamento indiretto.
- Come funziona lo stack della CPU.
- Come funziona la logica bit a bit.
- Come la CPU controlla i dispositivi I / O.
- Come funzionano gli interrupt.
Una ragione particolare che raccomando è di ottenere una migliore intuizione del modo in cui i semplici passaggi operano interamente deterministicamente, meccanicamente e completamente senza intelligenza o buon senso. Fondamentalmente ci si abitua al modello imperativo di esecuzione nella sua forma più pura e ostinatamente ignorante.
Precisamente quanto è utile sapere la maggior parte di queste cose ora, però, è una domanda difficile.
Una cosa che non imparerai è come giocare bene con una memoria dell'erarchia. Quelle vecchie macchine avevano per lo più un semplice modello di memoria senza livelli di cache e nessuna memoria virtuale. Inoltre non imparerai molto sulla concorrenza: erano certamente modi per gestirli, ma per lo più significava interruzioni. Non dovevi preoccuparti dei mutex, ecc.
A volte, un modello mentale di come queste una volta hanno funzionato, o di come funziona l'assemblatore, può persino essere fuorviante. Ad esempio, pensare a un puntatore C come a un indirizzo può portare a problemi di comportamento non definiti. Un puntatore C viene normalmente implementato come un intero contenente un indirizzo, ma non è garantito che sia strettamente vero. Ad esempio, su alcune piattaforme bizzarre, diversi puntatori possono puntare in diversi spazi di indirizzi. Questo diventa importante quando vuoi fare aritmetica o logica bit a bit con due puntatori.
A meno che tu non abbia una di quelle bizzarre piattaforme, potresti non pensare che ti interessi, ma i compilatori in questi giorni hanno sempre più probabilità di sfruttare gli standard, un comportamento indefinito per l'ottimizzazione.
Quindi un modello mentale dell'architettura di sistema può essere utile, ma è comunque importante codificare le specifiche della lingua., non un modello ipotetico che la tua lingua e la tua piattaforma potrebbero non rispettare.
Infine, molti elementi utili del modello mentale provengono dall'idea di come i compilatori generano il codice, e la generazione di codice per i linguaggi moderni è molto diversa dai compilatori piuttosto banali disponibili in quel momento.
Questo è un mio libro preferito per questo ...
link
Oltre a ciò che riguarda l'analisi e gli AST ecc., copre la generazione del codice per una serie di paradigmi linguistici - imperativo, OOP, funzionale, logico, parallelo e distribuito - e anche per la gestione della memoria. Se vuoi sapere come funzionano le chiamate al metodo polimorfico senza impantanarsi nei dettagli del set di istruzioni della CPU, un libro come questo è tuo amico - e c'è una nuova edizione presto disponibile.