RP RetroProgramming Italia presenta un corso introduttivo alle CPU 8 bit 65xx, MC680x, Z80
Il presente corso è rivolto a principianti della retroprogrammazione in Assembly, possibilmente con pregressa esperienza nell’uso di linguaggi di alto livello. Si cercherà di mantenere elementare il livello della trattazione, mirando alla massima chiarezza: anche a discapito del rigore formale, laddove necessario.
La programmazione in linguaggio Assembly non assomiglia ad alcuno dei compiti che il lettore può avere n qui arontato. Su una nota enciclopedia online, alla voce dedicata all’Assembly, si legge (non senza un ampio sorriso) che qualche ingenuo anonimo estensore ha ritenuto necessario specicare che il linguaggio Assembly
non ore alcun controllo sui tipi. Ciò equivale a dire che, entrando in un grande autosalone, potremmo trovare un vistoso cartello che con serietà ci redarguisce: Attenzione! Le autovetture in vendita in questa concessionaria non sono omologate per la pesca d’altura..
Umorismo involontario a parte, un le sorgente in linguaggio Assembly si riduce sostanzialmente ad una sequenza di mnemonici di poche lettere (in corrispondenza biunivoca con le istruzioni vere e proprie) eventualmente seguiti da operandi (i dati o indirizzi su cui dette istruzioni operano) laddove previsti. Si lavora esclusivamente su registri e locazioni di memoria (spesso individuate da apposite label, ossia etichette), e anche le più elementari operazioni previste dal teorema di Böhm-Jacopini [BJ66], i cicli e le scelte, vengono implementate
in modo implicito e decisamente criptico per l’occhio di un programmatore di alto livello. Il risultato nale, dopo il cosiddetto assemblaggio (l’equivalente della compilazione per i linguaggi HLL), non è altro che una lunga sequenza di valori numerici naturali, ossia il codice eseguibile vero e proprio, nel quale sono intercalati secondo un preciso schema le istruzioni e i relativi dati.
Si tratta di un approccio unico, a stretto contatto con una mole notevole di dettagli hardware, anche per i più semplici microprocessori a 8 bit con set di istruzioni RISC1. Un approccio che richiede una costante attenzione agli aspetti di ottimizzazione ed ecienza, a maggior ragione se si parla di retroprogrammazione (o, ancora oggi, sui sistemi embedded con core a 4 e 8 bit di dataword).
Per la massima ecacia e qualità dei risultati, il percorso di studio individuale deve necessariamente seguire la consueta progressione: prima l’architettura hardware, poi il linguaggio macchina in sé, poi i vari Assembler con le loro idiosincrasie sintattiche e sistemi di macro profondamente incompatibili gli uni con gli altri (inclusi i moderni ambienti di cross-development, ormai sempre più necessari), poi la programmazione dei singoli chip periferici specializzati e inne le applicazioni, studiando e ristudiando il codice applicativo che ormai si trova in giro, tra disassemblati e rilasci al pubblico dominio, in quantità esorbitanti. L’assioma fondamentale per la programmazione low level a 8/16 bit è che si impara leggendo molto codice Assembly avanzato scritto da programmatori professionisti e ben preparati: lo studio della mediocrità, dice il grandissimo Harold Bloom, non può che generare altra mediocrità. A sua volta, comprendere nei dettagli tale codice richiede lo studio di svariate tipologie di testi, senza limitarsi al solo Assembly che è il punto di arrivo.