- Distinguere e utilizzare le diverse basi numeriche (2, 10, 16) in ambito informatico
- Applicare correttamente le regole sintattiche dell'Assembler per gli operandi immediati
- Utilizzare i suffissi appropriati (h, b) per la definizione dei dati
- Riconoscere ed evitare errori comuni di identificazione (regola dello zero iniziale)
Le Basi Numeriche nell'Assembly x86
Quando lavoriamo con l'Assembly, dobbiamo specificare i valori (detti operandi immediati) che verranno caricati nei registri o usati nelle operazioni. Poiché la macchina lavora in binario, i programmatori usano principalmente l'esadecimale (per compattezza) e il decimale (per familiarità).
Per distinguere tra le basi numeriche, l'Assembler richiede l'uso di specifici suffissi. Se un numero non ha un suffisso, viene interpretato come Decimale per impostazione predefinita.
| Base | Suffisso Richiesto | Esempio di Valore (15 Decimale) | Descrizione |
|---|---|---|---|
| Decimale (Base 10) | Nessuno | 15 | Il valore è interpretato come base 10 (la nostra base quotidiana). |
| Esadecimale (Base 16) | h | 0Fh | La base più comune per gli indirizzi e i dati a basso livello. |
| Binario (Base 2) | b | 1111b | Meno usata per via della lunghezza delle sequenze di bit. |
La Regola Fondamentale: Lo Zero Iniziale
La notazione esadecimale (suffisso h) ha una regola di sintassi cruciale. In Assembly, un nome che inizia con una lettera (es. A, B, C, D, E, F) viene interpretato dall'Assembler come un'etichetta o un identificatore, non come un numero.
Per evitare questa ambiguità, se un valore esadecimale inizia con una cifra compresa tra A e F, è obbligatorio anteporre uno zero (0).
| Valore Esadecimale | Notazione Assembly Corretta | Notazione Sbagliata (ERRORE) |
|---|---|---|
| Fh | 0Fh | Fh (L'Assembler lo confonde con un'etichetta) |
| FFh | 0FFh | FFh (L'Assembler lo confonde con un'etichetta) |
| Ah | 0Ah | Ah (L'Assembler lo confonde con un'etichetta) |
| 1234h | 1234h | Nessun errore (Inizia con una cifra) |
LABORATORIO
Esercitazione: Debug della Sintassi
Impareremo a riconoscere gli errori di compilazione legati alle basi numeriche e alla regola dello zero iniziale.
- emu8086
1 Esercizio: Caccia all'Errore
Copia il seguente codice in emu8086 e prova a cliccare su Emulate. L'assemblatore genererà un errore. Correggi il codice applicando la regola dello zero iniziale.
ORG 100h
MOV AL, FFh ; Genera un errore!
MOV BL, 16 ; Carica 16 (decimale)
MOV CL, 10h ; Carica 16 (esadecimale)
RET
2 Esercizio: Conversioni Incrociate
Scrivi un programma che carichi nei seguenti registri i valori indicati, rispettando la sintassi:
- In AH: il valore decimale 20.
- In BH: il valore esadecimale AF.
- In CH: il valore binario 1100.
Perché AX mostra 0014?
Spiegazione: L'emulatore mostra i dati in esadecimale: il valore esadecimale corretto è 14h.