DOMANDA Linguaggio Assembly

Nicola.Mariano

Utente Attivo
905
268
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?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 
  • Mi piace
Reazioni: Nicola.Mariano

Nicola.Mariano

Utente Attivo
905
268
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!
 
  • Mi piace
Reazioni: DispatchCode

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
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
 

Nicola.Mariano

Utente Attivo
905
268
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?
 

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
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:
  • Mi piace
Reazioni: Nicola.Mariano

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 
  • Mi piace
Reazioni: Nicola.Mariano
U

Utente 16812

Ospite
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 ? ;)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Allora se hai dubbi, domande o vuoi chiarimenti... chiedi. ;)
 

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
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
 
U

Utente 16812

Ospite
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 :)
 

Nicola.Mariano

Utente Attivo
905
268
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!
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili