| | assembler, le istruzioni base | |
| | Autore | Messaggio |
---|
giozh°_° Moderatore
Numero di messaggi : 156 Data d'iscrizione : 18.08.07
| Titolo: assembler, le istruzioni base Ven Ago 24, 2007 2:28 pm | |
| oggi parlerò delle istruzioni di base dell'asm. una di queste è la mov, che serve per spostare i dati. la sintassi della mov è questa - Codice:
-
mov destinazione,sorgente esistono diversi tipi di mov 1°indirizzamento immediato - Codice:
-
mov bx,0410 questa mov mette in bx il numero 0410 (ovviamente in esadecimale) quindi per quanto detto nel primo tutorial di assembler visto che i registri si dividono in 2 sottoregistri da 8 bit l'uno in bh ci sarà 04 mentre in bl ci sarà 10. 2°indirizzamento a registro - Codice:
-
mov cx,ax questa istruzione secndo voi cosa fa??? copia e sollolineo COPIA semplicemente il contenuto di di ax in cx, ma ax non viene azzerato. 3°indirizzamento diretto - Codice:
-
mov [0310],cl attenzione alle parentesi quadre... quelle indicano che quel numero fa riferimento alla cella di memoria 0310, quindi queste mov sposta i dati contenuti in cl nella cella di memoria 0310 4°indirizzamento tramite registro - Codice:
-
mov cx,[bx] questa mov sposta i dati contenuti nella cella di memoria scritta in bx, nel registro cx. esempio - Codice:
-
mov bx,0100 ;mette in bx 0100 mov [bx],0210 ;mette nella cella puntata da bx 2010 mov cx,[bx] ;copia 0210 in cx
vi chiederete perche allora non hai fatto direttamente mov [0100],0210???? perche non si puo mettere direttamente un dato nella cella di memoria, perche bisogna sempre passare per i registri, questo perche il processore è progettato secondo l'architettura master-slave (wikipedia insegna) altre istruzioni basilari sono la inc, la dec la sub e la add la inc incrementa il valore di un registro, mentre la dec lo decrementa - Codice:
-
inc bx ;incrementa bx di 1 dec bx ;decrementa bx invece add somma il contenuto di due registri, o ilcontenuto di un registro con un numero, mentre dec li sottrae, la sintassi è sempre la stessa dell'inc e della dec, c'è da ricordarsi che il risultato va ovviamente nel registro di destinazione, ovvero il primo che scrivete dopo il comando. per adesso è tutto. appena possibile vi spiego le jump e così iniziamo a fare qualche programma. a presto
Ultima modifica di il Ven Ago 24, 2007 3:55 pm - modificato 1 volta. | |
| | | BlackLight Moderatore
Numero di messaggi : 277 Età : 37 Data d'iscrizione : 22.08.07
| Titolo: Re: assembler, le istruzioni base Ven Ago 24, 2007 3:41 pm | |
| - Citazione :
- inc bx,01h ;incrementa bx di 01, h sta per esadecimale
dec bx,01h ;decrementa bx Piccola imprecisione inc e dec sono due istruzioni unarie, che prendono come unico parametro il registro da incrementare o decrementare (sottointeso, di una unità). In genere se provi ad assemblare quel frammento di codice (l'ho testato su GAS e NASM) ottieni un errore, in quanto quella è una sintassi usata per add e sub, ma non per inc e dec. - Citazione :
- vi chiederete perche allora non hai fatto direttamente mov [0100],0210???? perche non si puo mettere direttamente un dato nella cella di memoria, perche bisogna sempre passare per i registri, questo perche il processore è progettato secondo l'architettura master-slave (wikipedia insegna)
In realtà ci sono (perlopiù c'erano) macchine che prevedevano lo spostamento di dati memoria-memoria (tra queste lo storico VAX, se qualcuno di voi era nell'informatica negli anni '70-'80 o è appassionato come me di retrocomputing probabilmente lo conoscerà). Il motivo per cui l'Intel, e successivamente tutte le case hardware che hanno prodotto CPU, hanno scelto di non prevedere questo tipo di indirizzamenti è stato per ragioni di ottimizzazione del processore. Includere istruzioni per lo spostamento diretto di dati in memoria avrebbe significato introdurre, nell'ISA, un grandissimo numero di istruzioni. Ogni istruzione per lo spostamento registro-registro o registro-memoria avrebbe dovuto avere un duale memoria-memoria (a livello di ISA scrivere mov ax,bx e mov ax,[01h] corrisponde a due istruzioni diverse). Ciò avrebbe significato rendere molto più complessa l'ISA (instruction set architecture) della CPU, con l'aggiunta di molte nuove istruzioni, e di conseguenza rendere l'esecuzione del codice più lenta, in quanto nella fase di fetch la CPU deve 'spulciare' tra più istruzioni. Oltre a questo, una scelta del genere avrebbe aumentato il prezzo del processore, in quanto per implementare nuove istruzioni bisogna fisicamente costruire ulteriori reti logiche sulla CPU, che fisicamente si traducono in un numero maggiore di transistor, componenti elettronici ed interconnessioni. Per questo le macchine Intel-based, pur rimanendo macchine CISC (a differenza, per esempio, dei vecchi Power PC che erano macchine tipicamente RISC), hanno fatto la scelta di impedire gli indirizzamenti diretti in memoria senza un registro di appoggio. Per il resto, ottima guida | |
| | | giozh°_° Moderatore
Numero di messaggi : 156 Data d'iscrizione : 18.08.07
| Titolo: Re: assembler, le istruzioni base Ven Ago 24, 2007 3:55 pm | |
| - Citazione :
Piccola imprecisione Wink inc e dec sono due istruzioni unarie, che prendono come unico parametro il registro da incrementare o decrementare (sottointeso, di una unità). In genere se provi ad assemblare quel frammento di codice (l'ho testato su GAS e NASM) ottieni un errore, in quanto quella è una sintassi usata per add e sub, ma non per inc e dec. hai ragione, infatti spesso e volentieri anche a scuola sbagliavo a scrivere questa istruzione | |
| | | Contenuto sponsorizzato
| Titolo: Re: assembler, le istruzioni base | |
| |
| | | | assembler, le istruzioni base | |
|
Argomenti simili | |
|
| Permessi in questa sezione del forum: | Non puoi rispondere agli argomenti in questo forum.
| |
| |
| |