Microprocessori e sistemi embedded sono comunemente programmati con linguaggi ad alto livello come C e Python, linguaggi che rendono chiara la programmazione senza necessariamente conoscere intimamente l'hardware per cui si realizza il programma. L'assembly, dal canto suo, offre l'opportunità di programmare l'hardware colloquiando direttamente con il microprocessore indirizzando dati verso registri, memorie e I/O con semplici istruzioni.Questo libro infatti propone un corso in 20 capitoli per apprendere le basi della programmazione in assembly adoperando un simulatore software del microprocessore Z80, il miglior candidato didattico per l'apprendimento di questo linguaggio a basso livello.Anche se ogni microprocessore ha un proprio linguaggio assembly, saper già programmare un determinato microprocessore rende più facile passare ad un altro poiché molti procedimenti sono simili. È necessario soltanto assimilare le nuove modalità con cui sono proposti i codici mnemonici ed istruzioni univoche che ogni CPU possiede e non utilizzabili sulle altre.Un simulatore replica totalmente il sistema di riferimento ed è capace di eseguire un programma a velocità ridotta consentendo di esaminare la movimentazione dati in registri, memorie e I/O in tempo reale oppure nella modalità passo-passo eseguendo un'istruzione alla volta per cogliere ogni istante dell'esecuzione. Sono analizzate le istruzioni più comuni delle numerose disponibili seguendo un percorso logico nel proporle; ogni capitolo aggiunge nuove complessità impiegando le istruzioni già apprese nel precedente capitolo realizzando soluzioni a successivi programmi. La programmazione in assembly completa lo studio dei sistemi a microprocessori svelando quei meccanismi nascosti del software che governa l'hardware a livello di bit.