Auron

The quieter you become, the more you hear


    Intro all'Assembly

    Condividi
    avatar
    Admin
    Admin

    Numero di messaggi : 301
    Reputazione : 127
    Data d'iscrizione : 08.05.09
    Età : 24
    Località : Gallarate

    Intro all'Assembly

    Messaggio  Admin il Lun Giu 01, 2009 6:27 pm

    Assembly applicato al x86 (introduzione alla logica ke non si addentra nel particolare)

    Al giorno d'oggi esistono molti linguaggi di programmazione ad alto livello con i quali è possibile creare programmi complessi, più o meno efficienti e con i quali è possibile programmare ogni parte di un computer, ma se si vuole sfruttare al meglio le risorse messe a disposizione dal PC , se si vuole scrivere routine veloci allora l'unico linguaggio adatto è ancora il buon vecchio ASSEMBLY.
    Programmando in Assembly si ha il controllo completo del computer ogni singolo bit di ogni singolo registro è nelle tue mani, hai il potere assoluto sulla macchina, però ...
    Però è anche vero che programmare in Assembly non è del tutto facile, si deve tener conto di moltissime cose, un piccolo particolare trascurato ha come conseguenza il CRASH del sistema!! Una prerogativa della programmazione in Assembly è la conoscenza dell'Hardware sottostante , è quindi necessario conoscere la struttura della CPU dei registri delle porte e delle schede presenti per poterle programmare.
    Questa serie di tutorial non vuole essere esaustivo in tutti gli aspetti della programmazione Assembly, si tratta di un' introduzione, un punto di partenza per entrare in questo mondo. Cominceremo dalle cose più semplici.
    I tools di cui avrete bisogno sono un COMPILATORE e un LINKER , i miei esempi sono scritti per il compilatore della Borland TASM 3.1 ma si possono facilmente adattare ad altri compilatori.
    Inoltre dovreste procuravi una documentazione degli interrupt del BIOS e del DOS reperibile via FTP al sito : ftp://x2ftp.oulu.fi/pub/msdos/programming oppure qui.
    (Si tratta della famosissima lista di Ralph Brown).
    Infine vi serve un editor di testo, va bene anche l'EDIT del DOS
    ma vi consiglio un ambiente integrato per programmare in Assembly reperibile anche questo su internet al sito
    http://www.inf.tu-dresden.de/~ok3/asmedit.html,
    si tratta dell'ASM EDITOR scritto da Olaf Krusche e Tilo Elstner
    (questo vi facilita molto il lavoro di compilazione e linkaggio).
    Beh ora basta con le chiacchiere cominciamo ad addentrarci nel magnifico mondo della programmazione in ASSEMBLY.... buon lavoro!

    1) Sistemi di numerazione ed elementi di logica

    Ogni buon programmatore dovrebbe conoscere almeno 2 sistemi di numerazione oltre quello decimale imparato alle scuole elementari: il sistema BINARIO e quello ESADECIMALE.
    Il sistema di numerazione binario è particolarmente legato ai calcolatori in quanto essi possono riconoscere solo segnali aventi due valori : uno alto e uno basso ; per cui si associa al valore alto la cifra binaria 1 e a quello basso la cifra binaria 0 (oppure H e L, o ancora VERO e FALSO).
    Infatti nel sistema binario esistono solo due cifre 0 e 1 appunto e i numeri ma anche tutte le altre informazioni vengono rappresentate con sequenze di Zero e di Uno.
    Il sistema di numerazione binario è un sistema posizionale come quello decimale, cosa vuol dire: consideriamo il numero decimale 237 , esso può essere scomposto in questo modo:

    237 = 2 * 10^2 + 3 * 10^1 + 7 * 10^0

    ossia le cifre del numero vengono moltiplicate per le potenze di dieci (da cui decimale) crescenti da destra verso sinistra. I numeri binari vengono costruiti nello stesso modo solo che invece di potenze di 10 si usano le potenze di 2, quindi considerando il seguente numero binario, scomponendolo ed effettuando i calcoli si ottiene il corrispondente numero decimale :

    11010010 = 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210

    Ora che abbiamo visto la conversione Base 10 -> Base 2 vediamo come si effettua l'operazione inversa.
    L'algoritmo è abbastanza semplice :

    1 - Si divide la cifra decimale per 2
    2 - Se il quoziente è intero si scrive 0 se non è intero 1
    3 - Si divide il quoziente ancora per 2 e si ripete il passo 3
    4 - La sequenza ottenuta RIBALTATA è la rappresentazione binaria del numero decimale


    _________________

    Sign by Danasoft - For Backgrounds and Layouts


    [/
    avatar
    Admin
    Admin

    Numero di messaggi : 301
    Reputazione : 127
    Data d'iscrizione : 08.05.09
    Età : 24
    Località : Gallarate

    Re: Intro all'Assembly

    Messaggio  Admin il Lun Giu 01, 2009 6:32 pm

    Vediamolo applicato al numero decimale 145 (questo è lo schema che di solito si utilizza):


    Codice:
         
                                145 |
                                  72 | 1   ( cifra - significativa )
                                  36 | 0
                                  18 | 0
                                  9 | 0
                                  4 | 1
                                  2 | 0
                                  1 | 0
                                  0 | 1    (cifra + significativa )

    Quindi 145 in base 10 equivale a 10010001 in base 2. Semplice vero ??
    NOTA: Una cosa da notare è che con N cifre binarie possiamo rappresentare tutti i numeri da 0 fino a 2^N-1.

    Ora che abbiamo conosciuto i numeri in base 2 andiamo a conoscere i numeri in base 16 che risultano utili in quanto ogni cifra esadecimale corrisponde a 4 cifre binarie e il passaggio da una base all'altra risulta facile.
    Tanto per cominciare le cifre del Sistema esadecimale sono 16, direte 10 le conosciamo ma le altre 6 ?? Beh si usano anche le prime sei lettere dell'alfabeto :

    Codice:
        DEC    0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
        HEX    0  1  2  3  4  5  6  7  8  9    A    B    C    D    E    F


    _________________

    Sign by Danasoft - For Backgrounds and Layouts


    [/
    avatar
    Admin
    Admin

    Numero di messaggi : 301
    Reputazione : 127
    Data d'iscrizione : 08.05.09
    Età : 24
    Località : Gallarate

    Re: Intro all'Assembly

    Messaggio  Admin il Lun Giu 01, 2009 6:34 pm

    Anche il sistema esadecimale è posizionale e quindi la conversione Hex ->Dec si fa nello stesso modo visto prima ( naturalmente si usano le potenze di 16).
    Un'altra conversione che serve spesso è quella da Esadecimale a Binario e viceversa.
    Sono entrambe molto semplici in quanto come dicevamo prima tutte le cifre esadecimali si possono codificare con quattro cifre binarie

    Codice:

                                    Hex            Bin
                                    0              0000
                                    1              0001
                                    2              0010
                                    3              0011
                                    4              0100
                                    5              0101
                                    6              0110
                                    7              0111
                                    8              1000
                                    9              1001
                                    A              1010
                                    B              1011
                                    C              1100
                                    D              1101
                                    E              1110
                                    F              1111


    _________________

    Sign by Danasoft - For Backgrounds and Layouts


    [/
    avatar
    Admin
    Admin

    Numero di messaggi : 301
    Reputazione : 127
    Data d'iscrizione : 08.05.09
    Età : 24
    Località : Gallarate

    Re: Intro all'Assembly

    Messaggio  Admin il Lun Giu 01, 2009 6:36 pm

    Per ora basta, cmqricordate ke questa guida nn si addentrerà nei particolari. Bene spero ke v sia piaciuta


    _________________

    Sign by Danasoft - For Backgrounds and Layouts


    [/

    Contenuto sponsorizzato

    Re: Intro all'Assembly

    Messaggio  Contenuto sponsorizzato


      La data/ora di oggi è Lun Nov 19, 2018 9:23 am