Regole per programmare in Assembly

tramite: O2O
Difficoltà: media
16

Introduzione

Prima di tutto, per chi non lo sapesse, una breve presentazione di questo linguaggio di programmazione. L'assembly è stato uno dei primi linguaggi mai sviluppati e viene detto di "basso" livello o meglio definito come linguaggio macchina. Questo perché ogni comando che esiste compie una e una singola azione ben precisa e delineata in modo tale da non esservi equivoci; questi comandi "parlano" direttamente alla macchina e quindi alla CPU e ai vari registri (A0-A7, D0-D7) che si trovano nella stessa, gestendo dati e registri grazie all'I/O (input, output - le tastierie e il mouse parlando in modo semplice) dalle memorie esterne (Gli hard disk oppure le penne USB).
È tuttavia necessario precisare che è impossibile imparare a programmare semplicemente laggendo queste regole in quanto per farlo è necessario un emulatore appositamente sviluppato e tantissima pratica senza contare inoltre di continui stimoli che portano il programmatore a migliorarsi sempre più.
Ecco quindi alcune delle regole per programmare in Assembly.

26

La definizione delle variabili

All'interno del linguaggio vi sono 3 tipologie di variabili:
- variabile. B a 8 byte
- variabile. W a 16 byte
- variabile. L a 32 byte
che sono definibili attraverso i comandi [DC. B/W/L valore] (Se sono valori noti come ad esempio 5 oppure 17 oppure un il carattere 'B') oppure [DS. B/W/L valore] se invece vogliamo allocare uno spazio di memoria in cui mettere valori di cui però non conosciamo l'esatto quantitativo.
È possibile anche definire una variabile che deve rimanere fissa durante l'esecuzione del programma (Che di solito si usa per il conteggio degli indici e quindi che deve essere necessariamente usata insieme alla dichiarazione di vettori, stringhe oppure matrici) attraverso:
nome_variabile EQU valore_variabile.
I vettori, le stringhe e le matrici, nonostante siano un'insieme di valori tutti insieme, si dichiarano comunque tutti utilizzando:
nome_variabile DC. B/W/L valori_vettore/stringa/matrici tutti.

36

Spostamento

Per spostamento si intende quell'azione fatta dal compilatore che prende il valore da una variabile e lo inserisce in un'altra secondo quello che è il volere del programmatore.
Ovviamente però le due variabili devono essere del medesimo tipo.
Per spostare un valore da una variabile a un'altra esiste il comando MOVE. B/W/L variabile_in_cui_spostare_il_valore, variabile_in_cui_risiede_il_valore
(Esempio esplicativo)
Se ho definito:
A DC. W 7
B DC. W 6
per passare A in B eseguo il comando
MOVE. W A, B.
È possibile inoltre spostare valori da variabili definite (A ad esempio) a variabili del processore (D0-D7) in modo tale da facilitare il compito allo stesso nella gestione dei dati. (Questo è passaggio è obbligatorio in caso si voglia utilizzare un CMP oppure un sottoprogramma).
Inoltre attraverso il comando LEA è possibile spostare valori in registri del processore (A0-A7) per i motivi sopra citati.
Ovviamente è anche possibile, in fase di esecuzione, assegnare un valore numerico ad un registro o una variabile precedentemente lasciata vuota (Definendola attraverso il DS. B/W/L come detto nel paragrafo precedente) attraverso il comando:
MOVE. W #0, A.
In questo modo la variabile A assumerà valore 0.

Continua la lettura
46

Comparazione

Con comparazione si intende un particolare comando che mette in relazione due elementi confrontandoli e dando un risultato diverso in base all'esito della comparazione; uno dei due valori inseriti tuttavia deve essere necessariamente una variabile del processore (D0-D7) con un'altra variabile. Questa comparazione è alla base della formazione di qualsiasi costrutto logico (If, if else, while del c/c++ per fare un esempio). Si procede quindi digitando il comando
CMP. W A, D0.
In questo modo A viene comparato con D0. È necessario porre attenzione al fatto che i valori da comparare devono essere del medesimo tipo, altrimenti non solo il programma potrebbe non compilare, ma nei peggiori dei casi, potrebbero apparire dei bug in fase di esecuzione.

56

Salto Condizionato/Incondizionato

Il salto è un particolare comando che permette al programmatore, in caso siano verificate certe condizioni, di tralasciare un pezzo di codice e passare direttamente avanti oppure semplicemente mandare in "Loop" il programma in modo tale che continui a mostrare, oppure a fare, sempre le medesime azioni. Il comando di salto viene inserito subito dopo il CMP: esso infatti restituisce una comparazione fra due valori e in base al risultato di essa il compilatore eseguirà un comando secondo questo schema:
- BEQ: se i valori sono uguali vai a ...
- BNE: se i valori non sono uguali vai a ...
- BGE: se il primo valore è più grande dell'altro vai a ..
Esistono inoltre altri tipo di codici oltre i 3 sopra elencati ma essi non sono validi per tutti i tipi di CPU (Questo perche nonostante l'assembly sia un linguaggio generale, in base alla macchina che si applica, esempio Motorola 68000, esso potrebbe essere interpretato in maniera differente), per questo è necessario vedere ogni singolo caso.
Esiste inoltre un altro comando che fa "saltare" il programma in un punto a scelta, detto JMP: esso viene detto salto incondizionato perché appena arriverà il turno di quel comando esso salterà "incondizionatamente" a un punto predefinito.

66

Sottoprogrammi

Un sottoprogramma è un insieme di istruzioni esterne al main (Cioè il corpo principale del programma) che viene attivato grazie ad un salto incondizionato. Esso può contenere tutte le istruzioni che è possibile eseguire nel main ma essi sono generalizzabili, nel senso che non dipendono dal corpo principale del programma, ma possono essere riutilizzati per altri programmi scritti ex novo. Il vantaggio di questi ultimi è che è possibile richiamarli in modo infinito facendo compiere, ad esempio, sempre la stessa azione alla CPU su variabili diverse senza necessariamente riscrivere o ricopiare pezzi interi di codice. Per utilizzare un sottoprogramma è necessario che tutti i valori siano inseriti in registri o variabili della CPU in modo che questa li possa richiamare rapidamente nello stesso e lavorarci. Questo si fa perché tutte le operazioni eseguite in un sottoprogramma avvengono solo all'interno della CPU senza compiere accessi in memoria; questo è uno dei motivi per cui spesso i programmi vengono divisi in più sottoprogrammi in modo da renderne più veloce l'esecuzione. Oltre questo però qualsiasi stringa di codice valida nel main, sarà altrettanto valida in un sottoprogramma.

Potrebbe interessarti anche

Segnala contenuti non appropriati

Tipo di contenuto
Devi scegliere almeno una delle opzioni
Descrivi il problema
Devi inserire una descrizione del problema
Si è verificato un errore nel sistema. Riprova più tardi.
Verifica la tua identità
Devi verificare la tua identità
chiudi
Grazie per averci aiutato a migliorare la qualità dei nostri contenuti

Guide simili

Programmazione

Regole per programmare in Ladder

In questo articolo imparerete le 5 regole per programmare in Ladder. Il circuito in Ladder è simile in struttura, elementi, simboli e funzioni di controllo logico. Ci sono anche altri aspetti della fase, ma hanno molte differenze. Quindi per programmare...
Programmazione

Guida alla programmazione in Assembly

Il linguaggio assembly è il linguaggio di programmazione più vicino alla realtà fisico-elettronica di una macchina. L'assembly permette di ignorare la forma binaria del programma finale e sostituire i codici in linguaggio macchina con una sequenza...
Programmazione

Regole per programmare in ActionScript

Action Script è un nome che suonerà familiare a tutti coloro che si intendono di programmazione. Si tratta, infatti, del linguaggio di programmazione di Flash utilizzato per la creazione di videogames basati su browser. Esistono ben tre versioni di...
Programmazione

Regole per programmare in Rust

I linguaggi di programmazione fanno parte dell'universo informatico sin dagli inizi. Tutti noi ricorderemo sicuramente il vecchio prompt dei comandi sul nostro primo PC. Si apriva una finestrella nera in cui dovevamo digitare specifiche espressioni, spesso...
Programmazione

Regole per programmare in Occam

Occam è un linguaggio di programmazione sviluppato dall'azienda INMOS per i suoi modelli di microprocessori con architetture parallele. Ideati negli anni Ottanta da una modesta azienda inglese, gli INMOS Transputer rappresentarono l'avanguardia della...
Programmazione

Regole per programmare in Ruby

Il linguaggio di programmazione chiamato Ruby è basato su una piattaforma open source assolutamente dinamico, caratterizzato da una sintassi semplice e produttivo, naturalmente facile da leggere ed agevole da scrivere. Creato in Giappone, Ruby è caratterizzato...
Programmazione

Regole per programmare in Applescript

AppleScript, nato negli anni '90 come una sorta di estensione del MacOS che viene caricata al suo avvio, è un software di programmazione che permette agli utenti di sviluppare diverse tipologie di applicazioni, da quelle più complesse di stampo matematico,...
Programmazione

Regole per programmare in Linda

Linda è il nome di un linguaggio di programmazione non molto diffuso. È un linguaggio che estende quelli più conosciuti, come Java e C++, in modo tale da poter sviluppare applicazioni in ambiente distribuito. Appartiene alla famiglia di linguaggi a...
I presenti contributi sono stati redatti dagli autori ivi menzionati a solo scopo informativo tramite l’utilizzo della piattaforma www.o2o.it e possono essere modificati dagli stessi in qualsiasi momento. Il sito web, www.o2o.it e Arnoldo Mondadori Editore S.p.A. (già Banzai Media S.r.l. fusa per incorporazione in Arnoldo Mondadori Editore S.p.A.), non garantiscono la veridicità, correttezza e completezza di tali contributi e, pertanto, non si assumono alcuna responsabilità in merito all’utilizzo delle informazioni ivi riportate. Per maggiori informazioni leggi il “Disclaimer »”.