DOMANDA Linguaggio Assembly

Pubblicità

Nicola.Mariano

Utente Attivo
Messaggi
906
Reazioni
268
Punteggio
65
Salve ragazzi, non riesco proprio a comprendere i comandi più basilari di Assembly (MOV,SUB,DEC,ADD,ecc.) tantomeno i vari registri.
Qualcuno di voi può aiutarmi con un elenco delle varie funzioni?
 
Ciao.
Non si tratta di "comandi basilari", ma di istruzioni. Ciascuna di quelle istruzioni ha un codice particolare, chiamato opcodes.
Non hai specificato l'architettura però, suppongo sia 8086 (le stesse considerazioni valgono per x86 e x64 comunque).

MOV è l'assegnamento.
mov ax, bx significa assegnare al registro AX il valore del registro BX.

ADD è la somma.
add ax, bx significa sommare al valore contenuto in AX il valore contenuto in BX.

Il discorso è analogo per SUB (sottrazione) e le altre istruzioni con due operandi.

Alcune istruzioni accettano un solo operando, come INC e DEC e sono rispettivamente l'incremento ed il decremento di 1 unità. E' difficile farti un elenco completo, ma se guardi sul sito di giobe2000 (tanto per citarne uno) trovi tutte le istruzioni della CPU 8086.

Un registro è una piccolissima memoria, e fa parte della CPU. Si tratta di memorie molto piccole: AX e gli altri registri sono a 16bit. Le architetture a 32bit hanno registri a 32bit (AX è stato esteso, ed ha preso il nome di EAX, così gli altri in maniera analoga) e quelle a 64bit hanno registri a 64bit.
Le istruzioni accettano operandi di tipo registro, memoria e di tipo immediato (un valore, direttamente).

Scrissi un articolo sul linguaggio macchina; la prima parte penso ti possa essere d'aiuto: https://forum.tomshw.it/threads/il-linguaggio-macchina-del-8086.580474/

Ps. sono andato un pò spedito, non ho tempo ora; se hai domande specifiche rispondo più tardi.
 
Ciao.
Non si tratta di "comandi basilari", ma di istruzioni. Ciascuna di quelle istruzioni ha un codice particolare, chiamato opcodes.
Non hai specificato l'architettura però, suppongo sia 8086 (le stesse considerazioni valgono per x86 e x64 comunque).

MOV è l'assegnamento.
mov ax, bx significa assegnare al registro AX il valore del registro BX.

ADD è la somma.
add ax, bx significa sommare al valore contenuto in AX il valore contenuto in BX.

Il discorso è analogo per SUB (sottrazione) e le altre istruzioni con due operandi.

Alcune istruzioni accettano un solo operando, come INC e DEC e sono rispettivamente l'incremento ed il decremento di 1 unità. E' difficile farti un elenco completo, ma se guardi sul sito di giobe2000 (tanto per citarne uno) trovi tutte le istruzioni della CPU 8086.

Un registro è una piccolissima memoria, e fa parte della CPU. Si tratta di memorie molto piccole: AX e gli altri registri sono a 16bit. Le architetture a 32bit hanno registri a 32bit (AX è stato esteso, ed ha preso il nome di EAX, così gli altri in maniera analoga) e quelle a 64bit hanno registri a 64bit.
Le istruzioni accettano operandi di tipo registro, memoria e di tipo immediato (un valore, direttamente).

Scrissi un articolo sul linguaggio macchina; la prima parte penso ti possa essere d'aiuto: https://forum.tomshw.it/threads/il-linguaggio-macchina-del-8086.580474/

Ps. sono andato un pò spedito, non ho tempo ora; se hai domande specifiche rispondo più tardi.
Innanzitutto grazie per la celerità, e scusami per l'imprecisione.
Credo che mi affiderò al tuo articolo!
 
Salve ragazzi, non riesco proprio a comprendere i comandi più basilari di Assembly (MOV,SUB,DEC,ADD,ecc.) tantomeno i vari registri.
Qualcuno di voi può aiutarmi con un elenco delle varie funzioni?
Guarda, non c'è molto da capire perché si tratta di operazioni davvero semplici ed elementari, prese in sé.
Ciò che invece è difficile è entrare nel paradigma, completamente diverso rispetto ad un linguaggio di alto livello: quelle "istruzioni" infatti, servono per costruire "comandi"

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Guarda, non c'è molto da capire perché si tratta di operazioni davvero semplici ed elementari, prese in sé.
Ciò che invece è difficile è entrare nel paradigma, completamente diverso rispetto ad un linguaggio di alto livello: quelle "istruzioni" infatti, servono per costruire "comandi"

Inviato dal mio Nexus 5 utilizzando Tapatalk
Ad esempio, perché se metto un'informazione in Al, va in AH?
Perché si usa DX?
 
Ci sono certi registri che vengono usati perché svolgono funzioni particolari, per il resto si usano convenzionalmente per certi tipi di dato così da dare coerenza al programma e fare in modo che sia ordinato.
Per esempio AH e AL sono lo stesso registro AX che può essere anche puntato in due parti, alta e bassa.

Assembly è legato all'architettura della CPU ed i registri, numero e loro uso sono la cosa più specifica e diversa di ogni processore.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Ultima modifica:
Ad esempio, perché se metto un'informazione in Al, va in AH?
Perché si usa DX?

AX, BX, CX, DX sono registri generali. Vengono usati, come dice il loro nome, un pò per tutto: dall'assegnamento di dati, alle operazioni etc etc.

Come dice rctimelines, ci sono convenzioni solitamente seguite.

AX (Accumulator), è utilizzato nelle operazioni matematiche come registro di destinazione.
CX (Counter) è utilizzato come registro di default con alcune operazioni. Utilizzando ad esempio LOOP questo registro viene decrementato.
DX è utilizzato per operazioni generali, può essere l'offset ad una stringa o il risultato di un calcolo o l'operando sorgente (o altro ancora).
BX, in pratica come DX.

E' possibile accedere al byte basso ed al byte alto dei registri generali. AX vede la parte alta in AH e la parte bassa in AL, BX in BH e BL e così via.

Sono tutte info che trovi nell'articolo di prima queste.
 
Salve ragazzi, non riesco proprio a comprendere i comandi più basilari di Assembly (MOV,SUB,DEC,ADD,ecc.) tantomeno i vari registri.
Qualcuno di voi può aiutarmi con un elenco delle varie funzioni?

Conosci già l'architettura del microprocessore 8086/88 ? :skept:
Sai quali sono le modalità di funzionamento di un microcomputer a 16/32 bit ? ;)
 
Ma stai parlando di scuola? Perché usi il plurale?
E poi: hai dubbi sulle istruzioni, ma non ti è stato spiegato ancora nulla, non ti sembra un po' prestino per chiedere in un forum?

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Se non si conosce l'architettura hardware di un microprocessore non è possibile affrontare lo studio del "software" del microprocessore stesso in quanto le caratteristiche e, diciamo, la complessità del "set" di istruzioni a disposizione del sistema riflettono l'architettura dell'unità centrale e le potenzialità dei suoi "circuiti di calcolo" :sisi:
Tra l'altro da questo punto di vista esiste un'enorme differenza tra i sistemi a 8-bit e quelli a 16/32/64-bit, previsti per elaborazioni più complesse :sisi:
Vedremo in seguito l'architettura di un microprocessore a 8-bit: quello che per ora possiamo dire è che a ciascuna istruzione corrisponde univocamente un'operazione e in particolare le istruzioni di calcolo devono definire le variabili su cui operano :sisi:
Ogni variabile viene identificata da una cella di memoria che la contiene, ciò significa che la "selezione" di una variabile viene effettuata definendo l'indirizzo della locazione di memoria a cui tale variabile appartiene :D
Cosa significa tutto questo ? :look:
Significa che il "contenuto informativo" di un'istruzione è definito da due, per così dire, "strutture": il codice operativo, specifico per ciascuna operazione, e l'identificatore dell'operando (o degli operandi) coinvolto ;)
Generalmente le limitazioni dei circuiti di decodifica impongono l'utilizzo di un registro, di solito "l'accumulatore", come operando (ma anche come "destinatario" del risultato) in modo da ridurre il numero di operandi in memoria ad uno :asd:
Per farti un esempio, anche una semplice somma di due variabili implica la definizione di tre indirizzi delle variabili (i due addendi più la variabile "somma"), ciò che comporterebbe un "formato" abbastanza lungo :sisi:
Conviene "smembrare" l'operazione in tre istruzioni elementari: 1) carica il registro accumulatore con var1 (il primo addendo); 2) somma l'accumulatore con var2 (il secondo addendo); 3) memorizza il risultato var3 (variabile "somma") nell'accumulatore :D
Tutto ciò che ho scritto viene visto in un'ottica molto "semplificata" e del resto non è questa la sede adatta per poter affrontare questi argomenti: ne parlerò, tempo permettendo, più in dettaglio nei miei articoli dedicati alla Cibernetica, diciamo, "generale" :asd:
Per concludere vorrei ricordare che è importante conoscere le diverse modalità di indirizzamento delle istruzioni che, tra l'altro, determinano il "formato" di tali istruzioni e la lunghezza degli operandi ;)
A presto :)
 
Ma stai parlando di scuola? Perché usi il plurale?
E poi: hai dubbi sulle istruzioni, ma non ti è stato spiegato ancora nulla, non ti sembra un po' prestino per chiedere in un forum?

Inviato dal mio Nexus 5 utilizzando Tapatalk
Sì, parlo al plurale perché lo stiamo studiando a scuola.
Avrei voluto non dover chiedere, però ieri abbiamo fatto il compito, e mi serviva urgentemente un aiuto.

Se non si conosce l'architettura hardware di un microprocessore non è possibile affrontare lo studio del "software" del microprocessore stesso in quanto le caratteristiche e, diciamo, la complessità del "set" di istruzioni a disposizione del sistema riflettono l'architettura dell'unità centrale e le potenzialità dei suoi "circuiti di calcolo" :sisi:
Tra l'altro da questo punto di vista esiste un'enorme differenza tra i sistemi a 8-bit e quelli a 16/32/64-bit, previsti per elaborazioni più complesse :sisi:
Vedremo in seguito l'architettura di un microprocessore a 8-bit: quello che per ora possiamo dire è che a ciascuna istruzione corrisponde univocamente un'operazione e in particolare le istruzioni di calcolo devono definire le variabili su cui operano :sisi:
Ogni variabile viene identificata da una cella di memoria che la contiene, ciò significa che la "selezione" di una variabile viene effettuata definendo l'indirizzo della locazione di memoria a cui tale variabile appartiene :D
Cosa significa tutto questo ? :look:
Significa che il "contenuto informativo" di un'istruzione è definito da due, per così dire, "strutture": il codice operativo, specifico per ciascuna operazione, e l'identificatore dell'operando (o degli operandi) coinvolto ;)
Generalmente le limitazioni dei circuiti di decodifica impongono l'utilizzo di un registro, di solito "l'accumulatore", come operando (ma anche come "destinatario" del risultato) in modo da ridurre il numero di operandi in memoria ad uno :asd:
Per farti un esempio, anche una semplice somma di due variabili implica la definizione di tre indirizzi delle variabili (i due addendi più la variabile "somma"), ciò che comporterebbe un "formato" abbastanza lungo :sisi:
Conviene "smembrare" l'operazione in tre istruzioni elementari: 1) carica il registro accumulatore con var1 (il primo addendo); 2) somma l'accumulatore con var2 (il secondo addendo); 3) memorizza il risultato var3 (variabile "somma") nell'accumulatore :D
Tutto ciò che ho scritto viene visto in un'ottica molto "semplificata" e del resto non è questa la sede adatta per poter affrontare questi argomenti: ne parlerò, tempo permettendo, più in dettaglio nei miei articoli dedicati alla Cibernetica, diciamo, "generale" :asd:
Per concludere vorrei ricordare che è importante conoscere le diverse modalità di indirizzamento delle istruzioni che, tra l'altro, determinano il "formato" di tali istruzioni e la lunghezza degli operandi ;)
A presto :)
Ti ringrazio per la precisione!
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top