Botta e risposta: FAQ per Assembly

Una raccolta delle più disparate domande che ho ricevuto via e-mail e che potrebbero essere utili prima di affrontare il corso.

Che conoscenza è richiesta?

Per affrontare il corso con serenità e non impazzire alle prime righe di codice, è necessario avere un infarinatura di base riguardo all’architettura degli elaboratori (le componenti base) e programmazione iterativa. Le nozioni verranno riprese mano a mano che il lettore si addentrerà nel corso; altrimenti Google è tuo amico!

Cosa mi serve per il corso?

Per il corso, oltre ad una buona dose di pazienza, ti serve una qualsiasi macchina che possa supportare il 32 bit (o l’emulazione di ambienti Intel-like a 32 bit). Utilizzeremo l’assemblatore integrato di default in tutte le piattaforme Unix-like, as e il linker ld. È consigliato inoltre disporre di un buon IDE grafico (no, non serve Word!).

Sto utilizzando MacOS Catalina o versioni successive..

Purtroppo Apple ha rimosso a partire da MacOS Catalina la possibilità di eseguire binari a 32 bit (per il momento affrontiamo solo programmazione a basso livello a 32 bit). In alternativa, una qualsiasi macchina virtuale a 32 bit potrebbe andare bene (consiglio: una qualsiasi distro unix-based! Vi agevolerà molto il lavoro).

Per i più curiosi, assemblare un qualsiasi programma (anche con le flag --static e --arch i386), produrrà il seguente errore:

bad CPU type in executable

Che sintassi useremo per il corso?

Per assembly, le due sintassi maggiormente utilizzate sono la GAS syntax e la Intel syntax. In questo corso, si utilizzerà maggiormente la syntax di Intel; introdurremo una sezione riguardo le principali differenze tra una sintassi e l’altra in modo da dare allo studente una conoscenza a 360 gradi.

Intel 8086? Siamo negli anni 90?

No, assolutamente. Il corso vuole essere esclusivamente didattico: perché introdurre un’architettura moderna che potrebbe richiedere più tempo ed conoscenze più approfondite? È caldamente consigliato invece approfondire le architetture a cui il lettore è interessato (ARM, x86_64, AMD), utilizzando i manuali d’uso sul Web.

Perchè un altro corso su Assembly?

Gli altri corsi sono spesso malvolentieri mal-interpretati (comprendono spesso C e Assembly insieme) e non hanno un approccio modulare. Fatte alcune eccezioni, in generale non sono soddisfatto di quello che ho trovato sul Web, quindi cercherò di scrivere alcuni articoli su Assembly, basandomi sulla mia esperienza da studente.

Non pretendo di essere voce di verità per nessuno, anche se ogni commento riguardo gli errori è ben apprezzato!

Hai altre domande? Scrivimi un’email.

Introduzione ad Assembly