Xhack
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
Xhack

Un forum dedicato all'hacking
 
IndiceIndice  PortalePortale  CercaCerca  Ultime immaginiUltime immagini  RegistratiRegistrati  Accedi  

 

 assembler, le istruzioni base

Andare in basso 
2 partecipanti
AutoreMessaggio
giozh°_°
Moderatore
Moderatore
giozh°_°


Numero di messaggi : 156
Data d'iscrizione : 18.08.07

assembler, le istruzioni base Empty
MessaggioTitolo: assembler, le istruzioni base   assembler, le istruzioni base EmptyVen 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
afro


Ultima modifica di il Ven Ago 24, 2007 3:55 pm - modificato 1 volta.
Torna in alto Andare in basso
BlackLight
Moderatore
Moderatore
BlackLight


Numero di messaggi : 277
Età : 37
Data d'iscrizione : 22.08.07

assembler, le istruzioni base Empty
MessaggioTitolo: Re: assembler, le istruzioni base   assembler, le istruzioni base EmptyVen 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 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.

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 Wink
Torna in alto Andare in basso
http://blacklight.gotdns.org
giozh°_°
Moderatore
Moderatore
giozh°_°


Numero di messaggi : 156
Data d'iscrizione : 18.08.07

assembler, le istruzioni base Empty
MessaggioTitolo: Re: assembler, le istruzioni base   assembler, le istruzioni base EmptyVen 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 Razz
Torna in alto Andare in basso
Contenuto sponsorizzato





assembler, le istruzioni base Empty
MessaggioTitolo: Re: assembler, le istruzioni base   assembler, le istruzioni base Empty

Torna in alto Andare in basso
 
assembler, le istruzioni base
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» assembler,le jump
» assembler, gli interrupt
» assembler (ci proviamo)
» assembler (black ho bisogno di te)
» assembler, utiliti per tastiera

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
Xhack :: Programmazione :: Assembly-
Vai verso: