[Pillola]Assembler le basi>

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
kentaromiura
00giovedì 10 luglio 2003 09:14
Ora di fine stesura 23:45 ..(se c'e' qualche errore..)
kentaromiura
00giovedì 10 luglio 2003 09:14
Premessa:
innanzitutto premetto che questo 3d e' ispirato
dall' Adam Assembler Tutorial..non
vorrei che qualcuno mi chiamasse lamer
x questo.
non seguiro' passo passo, ma quasi..quindi detto
questo.. il link scritto nella guida e'
http://www.faroc.com.au/~blackcat ..ma probabilmente
e' un link morto..
l' assembler puo' sembrare difficile, ma in realta'
una volta capito il meccanismo si scopre che e' il
linguaggio piu' semplice che esista..solo che borioso;
scrivere 50 righe di codice per fare una cosa puo'
stufare..
Perche' l' assembler?
perche' una qualsiasi operazione scritta in assembler e
piu' veloce di qualsiasi altra fatta con un linguaggio di
programmazione..
ogni processore ha un set di direttive assembler diverse..
ma molte sono standard..piu' il processore e' nuovo
piu' direttive ha..
kentaromiura
00giovedì 10 luglio 2003 09:17
Lezione 1: I registri>
l'assembler lavora su dei registri;potete vedere un registro
come una variabile,un posto dove salvare i dati:
i piu' comuni sono:
Ax registro accumulatore comprende ah e al,comunemente usato 
per operazioni matematiche e di I/O.
Bx registro base comprende bh e bl,comunemente usato come base
o come puntatore
Cx registro contatore comprende ch e cl,usato nei cicli
Dx comprende dh e dl, simile al registro bx.

questi registri non sono specifici e potete metterci un valore
compreso tra 0 e 65535 o tra -32768 e 32767.Sono registri a 16bit.
Ax viene suddiviso a meta; ah e' la parte alta (high) al la bassa (low)
se salviamo in ax il valore 0a4c(in esadecimale)
ah conterra' 0a ed al conterra 4c.
registo  ax //\\
registro ah //
registro al   \\
         ax=ah+al (credo che ora abbiate capito..)

alcuni registri non verranno spiegati adesso ma approffonditi molto
dopo quindi per adesso li cito e basta:
CS il puntatore a dove il programma e memorizzato(vedi macchina di turing)
DS il puntotore alla zona dati
ES altro puntatore a dati(usato per accesso al video)
SS punta allo stack(pila di dati)
SI (source index)
DI (destination index)
BP (base pointer)
SP (stack pointer)
kentaromiura
00giovedì 10 luglio 2003 09:19
Lezione 1.5: conversione binario<>decimale<>esadecimale<>binario >
il binario e' un modo di scrivere un numero con sole 2 cifre(0,1)
il decimale con 10 cifre(0,1,2,3,4,5,6,7,8,9)
l' esadecimale con 16(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)

16 decimale=f in esadecimale= 1111 in binario.
conversioni:
decimale>binario
prendiamo un numero qualsiasi 47(esempio)
dividiamolo per 2 e riportiamo i resti a parte fino a 0
47 : 2

23 r 1      >Lsb(less significant bit)bit meno significante
11 r 1
5  r 1
2  r 1
1  r 0 
0  r 1      >Msb(most significant bit)bit piu' significante

ok, abbiamo i resti mettiamoli in ordine da Msb a Lsb
otteniamo 101111 che, guardacaso e' il valore che cerchiamo.
processo inverso binario->decimale
in binario ogni posizione delle cifre ha un valore
cosi' ad esempio in decimale
134=1*10^2 +3*10^1 +4*10^0)
cosi
in binario 101111 risulta =
1*2^5 +0*2^4 +1*10^3 +1*10^2 +1*10^1 1*10^0

cioe'
1* 2^5= 32
0* 2^4= 0
1* 2^3= 8
1* 2^2= 4
1* 2^1= 2
1* 2^0= 1
totale= 47

[SM=g27811]
kentaromiura
00lunedì 14 luglio 2003 09:24
da esadecimale a decimale
funziona come da binario a decimale, solo che a,b,c,d,e,f vanno trasformate
nei corrispettivi e la base e' 16:
esempio:
1fea=
1* 16^3=4096
f* 16^2->15 * 16^2=3840
e* 16^1->14 * 16^1=224
a* 16^0->10 * 16^0=10
totale
4096+3840+224+10=8170

da decimale a esadecimale

si divide il numero per 16 esempio poi si scrivono risultato e resto
(se il risultato/resto e' maggiore di nove si scrive la lettera
corrispondente seguendo la seguente tabella)
tabella di conversione
dec|exa
-------
 0 | 0
 1 | 1
 2 | 2
 3 | 3
 4 | 4
 5 | 5
 6 | 6
 7 | 7
 8 | 8
 9 | 9
10 | a
11 | b
12 | c
13 | d
14 | e
15 | f

27:16= 1 resto 11
siccome in esadecimale 11 e' uguale a b
il numero sara' 1b
quando il risultato e' > di 15 si ripete la divisione
257:16= 16 resto 1
16:16 =1 resto 0
257->101

[Modificato da kentaromiura 14/07/2003 9.27]

kentaromiura
00lunedì 14 luglio 2003 09:27
da binario a esadecimale e a ottale

avendo un numero binario prendiamolo ogni 4 cifre esempio:
10010110101000101 -->1 0010 1101 0100 0101
poi vediamo quanto vale ogni quartetto :
1->    1 in decimale->1 in esadecimale
1101->13 in decimale->D in esadecimale
0100-> 4 in decimale->4 in esadecimale
0101-> 5 in decimale->5 in esadecimale

totale :
10010110101000101 -->1D45 in esadecimale
se prendiamo invece a terne otteniamo l'equivalente in ottale
10010110101000101-->10 010 110 101 000 101->
10->2
010->2
110->6
101->5
000->0
101->5
quindi 10010110101000101-> 226505 in ottale

da ottale a decimale

stessa cosa del binario solo che la base e' 8
567->
5 * 8^2=320
6 * 8^1=48
7 * 8^0=7
totale 320+48+7=375

da ESADECIMALE A BINARIO
si prende cifra per cifra e si scrive l'equivalente in binario
efa=
e->14->1110
f->15->1111
a->10->1010
totale
111011111010

Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 04:58.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com