C64 Bedtime Coding (ITA) – Linguaggio Macchina (#02)

(Articolo di Phaze101)

C64 Bedtime Coding - 02

Linguaggio Macchina

 

Cos’è il Linguaggio Macchine

Quindi, cos’è il Linguaggio Macchina? Che faccia ha?

Questo è un semplice listato in Linguaggio Macchina per 6502:

A2 01
8E 84 03
A9 02
6D 84 03
8D 85 03
60

Come potete vedere, per un essere umano sembra privo di significato. Per lo meno per la maggior parte, perché sono sicuro che un guru del 6502 sarebbe in grado di tradurlo al volo.

Ma questo modo di scrivere In Linguaggio Macchina è un po’ estremo, e non saremo obbligati ad usarlo.

E’ quello che il computer alla fine comprende, certo trasformato poi in binario (non in esadecibale), meglio ancora in segnali elettrci +5V o 0V, ma così andiamo troppo verso il profondo dell’hardware.

Vediamo invece come rendere le cose più semplici.

Partiamo da un po’ di Basic

Di seguito un semplice programma basic. Nulla di speciale, è veramente molto semplice: assegna un valore a X e Y, mette la somma dentro A e la stampa.

10 LET X = 1
20 LET Y = 2
30 A = X + Y
40 PRINT A

Cosa succede quando scriviamo un programma così semplice? Quando diciamo al computer di eseguirlo, viene tradotto in Linguaggio Macchina e solo allora eseguito. Ovviamente è un processo lento, perché la traduzione deve avvenire prima che parta l’esecuzione vera e propria.

Ho semplificato il processo reale, ma giusto per far capire a tutti, anche chi è proprio alle prime armi, qual è il processo che viene seguito. Questo excursus è utile per comprendere cosa diremo in seguito.

Cos’è un Assembler?

Un assembler è un programma che aiuta un essere umano a scrivere in assembly.

L’assembly usa dei comandi mnemonici (rappresentati da 3 caratteri nel caso del 6502) per rappresentare le istruzione della CPU.

Scrivere codice assembly vuol dire usare questi comandi. Ecco un listato in assembly che fa praticamente la stessa cosa del programma basic visto prima

LDX  #\$1        ;Carica nel registro X il valore 1
STX \$C000      ;Carica il valore di X nella locazione di memoria /$C000
LDA #\$2        ;Carica nel registro A il valore 2
ADC \$C000      ;Somma il valore del registro X precedentemente
                        ;caricato nella locazione /$c000 al registro A
STA \$C001      ;Carica il risultato nella locazione di memoria /$C001
RTS

Per una persona è molto più leggibile del listato in linguaggio macchina visto all’inizio. Per programmare in assembly dovremo imparare queste istruzioni. Il 6502 ne ha 56 ed ognuna di esse ha delle variazioni.

Per eseguire questo programma tutto quello che dovremmo fare è dire all’assembler di – appunto – assemblare (cioè convertire) il codice assembly in codice linguaggio macchina.

Una volta che questo è fatto e non ci sono errore, può essere eseguito, e questo verrà fatto alla velocità dell’hardware, nessuna conversione deve essere fatta prima.

Il format del linguaggio Assembly

Una tipica linea di linguaggio assembly consiste di alcuni elementi. Di solito è formato da 4 o 5 colonne. La maggior parte delle volte la colonna 1 non è usata. Altra cosa, di solito le colonne sono gestite con il tasto tab che normalmente produce 4 o 8 spazi. Personalmente preferisco gli 8 spazi.

Colonne di un listato assembly Colonna 1: Il numero di linea

La maggior parte degli assembler non richiedono questa colonna ma di solito viene comunque mostrata automaticamente. Quando c’è un errore l’assembler indica in quale numero di riga, ad esempio.

Colonna 2: L’Etichetta

L’etichetta serve per eseguire salti assoluti, a subroutine o condizionali usando un riferimento mnemonico. Può anche essere l’unico elemento della riga di codice.

Colonna 3: L’Opcode

E’ l’istruzione assembly, che sia LDA, STA, JMP o altro. Può anche essere l’unico elemento della riga di codice.

Colonna 4: L’Operando

Contiene l’operando per gli opcode per cui è previsto, come #$01 o $0400. Può anche essere un’etichetta nel caso l’opcode sia un’istruzione di salto. Ovviamente non tutti gli opcode prevedono un operando.

Colonna 5: Il Commento

Un commento è opzionale, serve a descrivere cosa state facendo. Alcuni assembler possono usare un simbolo diverso per indicare un commento, ma la maggior parte delle volte è un punto e virgola (;)

La prossima settimana

Questo è tutto per il momento. Spero ti sia piaciuto leggerlo e se avate domande inviatemi un messaggio. Nell’articolo delle prossime settimane spiegherò i registri della CPU.

Per ora, le cose sono un po ‘lente poiché devo coprire la teoria, ma posso assicurarvi che cambierà.

Coding is fun 😊

 

Tutti L Articoli

Italian

Articolo 3
https://sys64738.org/2019/03/c64-bedtime-coding-ita-i-registri-della-cpu-03/

Articolo 2
https://sys64738.org/2019/03/c64-bedtime-coding-ita-linguaggio-macchina-02/

Articolo 1
https://sys64738.org/2019/03/c64-bedtime-coding-introduzione-e-basi-01/

English

Article 3
https://sys64738.org/2019/03/c64-bedtime-coding-eng-the-cpu-registers-03/

Article 2
https://sys64738.org/2019/03/c64-bedtime-coding-eng-machine-language-02/

Article 1
https://sys64738.org/2019/03/c64-bedtime-coding-introduction-basics-01/