Lo scopo che ci si prefigge è quello di scrivere presto e bene programmi in assembly Win32 e quindi la teoria necessaria sarà introdotta di volta in volta con eventuali richiami a schede di approfondimento.
Questa raccolta di appunti presuppone che il lettore conosca un poco l'assembly a 16 bit e sappia come usare MASM oppure TASM. In caso contrario sarà opportuno consultare qualcuno dei corsi ASMx riportati nel Portale del corso.

Bene, è tutto per iniziare.
Nel testo saranno utilizzati 3 tipi di grafia ed alcune simbologie:

  • Argomenti riguardanti Windows o le funzioni API.
  • Argomenti riguardanti l'assembly.
  • Listati o righe di codice sorgente ASM.
  • approfondimento   Scheda di approfondimento.
  • download   Download.



  •       Il processore di riferimento è l'80386 in quanto: è a 32 bit, dispone della modalità protetta, ed il suo nucleo principale di istruzioni è contenuto in tutte le versioni successive dei processori Intel e compatibili fino all'attuale Pentium IV. Questa scelta assicura la compatibilità del codice con tutti i processori successivi.

         I programmi per Win32 sono eseguiti in modalità protetta (protected mode), ciascuno in uno spazio virtuale separato e unico. Cio' significa che ogni programma Win32 disporra' dei suoi propri 4 GB (232 byte) di spazio di indirizzamento (address space).
    Ogni programma può virtualmente emettere indirizzi che vanno dal minimo 00000000h al massimo FFFFFFFFh.
    Un programma non può curiosare nello spazio degli altri programmi in quanto e' solo nel suo address space. Tale caratteristica aiuta a ridurre la probabilita' che un programma scriva accidentalmente o intenzionalmente sul codice/dati di un altro. Il modello di memoria utilizzato è unico e si chiama Flat Memory Model. Sono spariti i vari modelli disponibili negli ambienti a 16 bit con tutte le loro limitazioni e complicazioni. Non esistono più i famigerati segmenti da 64 KB. La memoria e' un largo e continuo spazio di 4 GB. Tutto cio' rende la programmazione in assembly per Win32 semplice quasi quanto quella in C.

         Ecco lo scheletro di un tipico programma Win32. Se non risultasse chiara qualche parte di codice, niente paura, in seguito tutto diverrà più comprensibile.

    
    .386 
    .MODEL FLAT, STDCALL 
    .DATA 
        [ Dati inizializzati ] 
        .............. 
    .DATA? 
        [ Dati NON inizializzati ] 
        .............. 
    .CONST 
        [ Costanti ]
        .............. 
    .CODE 
    [etichetta]: 
        [ Codice ASM del programma ] 
        .............. 
    end [etichetta]

          Analizziamo adesso questa struttura, tenendo presente che solo le voci in rosso sono obbligatorie, le altre possono esserci a seconda del tipo di applicazione. Quindi lo scheletro minimo è costituito solo dalle parti in rosso.

    .386
    Questa e' una direttiva per l'assemblatore ML.EXE (che si userà per compilare i programmi) con cui fissiamo l'uso del set di istruzioni 80386. Sarebbe possibile usare anche .486, .586 ma la scelta piu' sicura e' quella di utilizzare sempre .386, in base a quanto detto all'inizio sulla compatibilità.

    .MODEL FLAT, STDCALL
    .MODEL e' una direttiva per l'assembler che specifica il modello di memoria del programma. Sotto Win32, esiste un solo modello di memoria, il modello FLAT.
    STDCALL specifica la convenzione sull'ordine con cui avviene il passaggio dei parametri quando si effettua una chiamata a sottoprogramma e su chi deve provvedere alla pulizia dello stack dopo la chiamata stessa. Per il momento non è molto importante la comprensione di questo dettaglio. approfondimento


    .DATA
    Questa sezione, se presente, contiene i dati inizializzati del programma.

    .DATA?
    Questa sezione, se presente, contiene i dati NON inizializzati del programma. Generalmente si utilizza per riservare una parte di memoria senza inizializzarla.

    .CONST
    Questa sezione, se presente, contiene le costanti usate dal programma. Le costanti in questa sezione non potranno mai essere modificate dal programma. Sono semplicemente costanti.

    .CODE
    Qui vengono scritte le istruzioni del programma, contenute tra "[etichetta]:" e "end [etichetta]".

    end
    Costituisce la chiusura della sezione .CODE.


    Riassumendo:
    • In un programma Win32 ci sono fino a quattro tipi di Sezioni (Dati e Codice).
    • L'inizio di ciascuna sezione chiude automaticamente la sezione precedente.
    • L'ultima sezione (.CODE) viene chiusa dalla end finale.
    • Non è necessario utilizzare tutte e tre le sezioni Dati, si dichiareranno solo quelle da usare.
    • Tutto il codice è contenuto nella sezione .CODE.
    • Ricordarsi di apporre l'etichetta di inizio codice e di citare la medesima dopo la end di chiusura.

    MASM32 7.0 freeware
    E' la raccolta principale di software e documentazione per creare e sviluppare applicativi per Win32 in linguaggio assembly. Utilizza MASM 6.1xx di Microsoft ed una vasta libreria di routine già pronte. Contiene un editor essenziale da cui è possibile sviluppare e provare piccoli applicativi.

    RadASM 1.2.1.4h freeware
    RadASM è un editor configurabile per lavorare con diversi assemblatori a 32 bit, tra cui MASM. Il suo funzionamento a finestre multiple consente di tenere aperti tutti i file in lavorazione. E' l'editor di supporto ideale per MASM32. Il ricco menù è ulteriormente personalizzabile ed estendibile. Ottimo.


    Gif Animator Lite 1.0 freeware
    Ottimo per convertire in .GIF immagini con altri formati. Consente la realizzazione di piccole animazioni. Utile per generare zone trasparenti. Non può mancare nella cassetta degli attrezzi.
    Prima di effettuare il download occorre registrarsi gratuitamente.