DOMANDA Linguaggio Assembly

Lyonxyx

Utente Attivo
893
265
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

Utente Attivo
1,149
752
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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.
 
  • Like
Reactions: Lyonxyx

Lyonxyx

Utente Attivo
893
265
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!
 
  • Like
Reactions: 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
 

Lyonxyx

Utente Attivo
893
265
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:
  • Like
Reactions: Lyonxyx

DispatchCode

Utente Attivo
1,149
752
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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.
 
  • Like
Reactions: Lyonxyx

gronag

Utente Èlite
21,279
7,250
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

Utente Attivo
1,149
752
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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
 

gronag

Utente Èlite
21,279
7,250
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 :)
 

Lyonxyx

Utente Attivo
893
265
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

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 28 21.5%
  • Gearbox

    Voti: 2 1.5%
  • Xbox & Bethesda

    Voti: 84 64.6%
  • Square Enix

    Voti: 10 7.7%
  • Capcom

    Voti: 6 4.6%
  • Nintendo

    Voti: 18 13.8%
  • Altro (Specificare)

    Voti: 11 8.5%

Discussioni Simili