Sistemi E Reti

Basi Numeriche

Emu8086: Sistemi di numerazione (Decimale, Esadecimale, Binario) e sulle regole di sintassi cruciali per l'uso di operandi immediati in emu8086

Durata

50 minuti

Software

emu8086

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.


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.







Basi Numeriche, Esadecimale, Sintassi Assembly, Operandi Immediati, Sistemi e Reti,