Xhack

Un forum dedicato all'hacking
 
IndiceIndice  PortalePortale  CalendarioCalendario  FAQFAQ  CercaCerca  RegistrareRegistrare  Lista utentiLista utenti  GruppiGruppi  Connessione  

Condividere | 
 

 assembler, le istruzioni base

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
giozh°_°
Moderatore
Moderatore


Numero di messaggi: 156
Data d'iscrizione: 18.08.07

MessaggioOggetto: assembler, le istruzioni base   Ven Ago 24, 2007 12: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 1:55 pm, modificato 1 volta
Tornare in alto Andare in basso
Vedere il profilo dell'utente
BlackLight
Moderatore
Moderatore


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

MessaggioOggetto: Re: assembler, le istruzioni base   Ven Ago 24, 2007 1: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
Tornare in alto Andare in basso
Vedere il profilo dell'utente http://blacklight.gotdns.org
giozh°_°
Moderatore
Moderatore


Numero di messaggi: 156
Data d'iscrizione: 18.08.07

MessaggioOggetto: Re: assembler, le istruzioni base   Ven Ago 24, 2007 1: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
Tornare in alto Andare in basso
Vedere il profilo dell'utente
 

assembler, le istruzioni base

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 su1

 Argomenti simili

-
» Base Targhetta By Zampto
» Istruzioni per l'uso - Come uccidere un gatto...
» 3DS: Istruzioni per l'uso [E no, non è un topic serio]
» [Screen] Nabbo CMS base Wake [Screen]
» R6 GOLD

Permesso del forum:Non puoi rispondere agli argomenti in questo forum
Xhack :: Programmazione :: Assembly-