Assembly Base con NASM

Sommario terza parte



Capitolo 24:
Operatori, direttive e macro

24.1 Gli operatori per la fase di assemblaggio
24.1.1 Operatori aritmetici
24.1.2 Operatori logici
24.1.3 Operatori di scorrimento dei bit

24.2 Gli operatori relazionali e booleani
24.3 Le direttive
24.3.1 Le direttive condizionali per la fase di assemblaggio

24.4 Le macro
24.4.1 La direttiva EQU
24.4.2 Le direttive %DEFINE e %XDEFINE
24.4.3 La direttiva %MACRO
24.4.4 Macro con numero variabile di parametri
24.4.5 La direttiva %ROTATE
24.4.6 La direttiva %REP
24.4.7 Il "context stack"

24.5 Analogie tra macro e sottoprogrammi


Capitolo 25:
I sottoprogrammi

25.1 Analogie tra sottoprogrammi e funzioni matematiche
25.2 La struttura generale di una procedura Assembly
25.3 Procedure e trasferimento del controllo
25.3.1 Indirizzo in memoria di una procedura
25.3.2 Chiamata diretta intrasegmento
25.3.3 Chiamata indiretta intrasegmento
25.3.4 Chiamata diretta intersegmento
25.3.5 Chiamata indiretta intersegmento

25.4 Considerazioni generali sulle procedure
25.5 Passaggio di argomenti alle procedure
25.5.1 Passaggio degli argomenti per valore e per indirizzo
25.5.2 Convenzione C per il passaggio di argomenti ai sottoprogrammi
25.5.3 Convenzione Pascal per il passaggio di argomenti ai sottoprogrammi

25.6 Convenzioni per le variabili locali dei sottoprogrammi
25.7 Gestione degli argomenti e delle variabili locali con %DEFINE
25.8 L'indirizzo di una variabile locale
25.9 Convenzioni per i valori di ritorno dei sottoprogrammi
25.10 Programmi Assembly vecchio stile
25.11 Esercitazioni consigliate


Capitolo 26:
La ricorsione

26.1 La ricorsione nei linguaggi di programmazione
26.2 La ricorsione in Assembly
26.3 Vantaggi e svantaggi delle procedure ricorsive
26.4 Le Torri di Hanoi


Capitolo 27:
I modelli di memoria

27.1 Convenzioni DOS per i programmi eseguibili
27.1.1 Convenzioni DOS per il formato EXE
27.1.2 Convenzioni DOS per il formato COM

27.2 Il modello di memoria TINY
27.2.1 Programma TINY in formato EXE
27.2.2 Programma TINY in formato COM

27.3 Il modello di memoria SMALL
27.4 Il modello di memoria MEDIUM
27.5 Il modello di memoria COMPACT
27.6 Il modello di memoria LARGE
27.7 Il modello di memoria HUGE
27.8 La direttiva GROUP


Capitolo 28:
Linking tra moduli Assembly

28.1 Programmi Assembly contenuti in un unico file
28.1.1 Eseguibili in formato COM

28.2 Programmi Assembly distribuiti su due o più file
28.2.1 Le direttive EXTERN e GLOBAL
28.2.2 Assembling di TESTMAIN.ASM e TESTLIB1.ASM
28.2.3 Linking di TESTMAIN.OBJ e TESTLIB1.OBJ

28.3 Programmi in formato COM distribuiti su due o più moduli
28.4 Caso generale
28.5 I file di inclusione (Include file)
28.5.1 Uso degli include file per l'ordinamento dei segmenti di programma


Capitolo 29:
Interfaccia con i linguaggi di alto livello

29.1 I modelli di memoria
29.1.1 Indirizzamento predefinito nel modello TINY
29.1.2 Indirizzamento predefinito nel modello SMALL
29.1.3 Indirizzamento predefinito nel modello MEDIUM
29.1.4 Indirizzamento predefinito nel modello COMPACT
29.1.5 Indirizzamento predefinito nel modello LARGE
29.1.6 Indirizzamento predefinito nel modello HUGE
29.1.7 Indirizzamento predefinito nel modello FLAT
29.1.8 Memory model override
29.1.9 Convenzioni per il prolog code e l'epilog code
29.1.10 Prolog code e epilog code override
29.1.11 Le opzioni NEARSTACK e FARSTACK

29.2 Sintassi avanzata per le procedure
29.2.1 Macro per il prolog code e l'epilog code di una procedura
29.2.2 Macro per la chiamata di una procedura
29.2.3 Libreria di macro per le procedure C e Pascal
29.2.4 Riscrittura di TestProc con una sintassi più avanzata

29.3 Indirizzamento delle variabili locali di una procedura
29.4 Convenzioni per i segmenti di programma
29.4.1 Il segmento principale per i dati statici inizializzati
29.4.2 Il segmento principale per i dati statici non inizializzati
29.4.3 Il segmento principale per i dati statici costanti
29.4.4 Il segmento di stack per i dati dinamici
29.4.5 Il gruppo DGROUP
29.4.6 I segmenti aggiuntivi per i dati statici inizializzati
29.4.7 I segmenti aggiuntivi per i dati statici non inizializzati
29.4.8 Il segmento principale per il codice
29.4.9 I segmenti aggiuntivi per il codice
29.4.10 Considerazioni generali sulle convenzioni per i segmenti di programma

29.5 Esempi pratici
29.5.1 Modello TINY
29.5.2 Modello SMALL
29.5.3 Modello MEDIUM
29.5.4 Modello COMPACT
29.5.5 Modelli LARGE e HUGE
29.5.6 Modello FLAT
29.5.7 Programmi Assembly distribuiti su due o più file

29.6 Le istruzioni ENTER e LEAVE
29.7 Considerazioni finali


Capitolo 30:
Interfaccia tra C e Assembly

30.1 Tipi di dati del C
30.2 Convenzioni per i compilatori C
30.2.1 Segmenti di programma
30.2.2 Stack frame
30.2.3 Valori di ritorno

30.3 Le classi di memoria del C
30.4 Gestione degli indirizzamenti in C
30.5 Protocollo di comunicazione tra C e Assembly
30.6 Esempi pratici
30.6.1 Chiamate incrociate tra moduli C e moduli Assembly
30.6.2 Generazione dell'eseguibile
30.6.3 Riscrittura di ASMMOD1.ASM con le macro di LIBPROC.MAC e STDSEGM.MAC
30.6.4 Ulteriori dettagli sul programma CMOD1.EXE
30.6.5 Programma CMOD1.EXE con modello LARGE
30.6.6 Funzioni che restituiscono strutture per valore
30.6.7 Interscambio di variabili di tipo Floating Point
30.6.8 Allineamento dei dati al BYTE e alla WORD

30.7 Argomenti dalla linea di comando
30.8 Assembly inline


Capitolo 31:
Interfaccia tra Pascal e Assembly

31.1 Tipi di dati del Pascal
31.2 Convenzioni per i compilatori Pascal
31.2.1 Segmenti di programma
31.2.2 Stack frame
31.2.3 Valori di ritorno

31.3 Le classi di memoria del Pascal
31.4 Gestione degli indirizzamenti in Pascal
31.5 Protocollo di comunicazione tra Pascal e Assembly
31.6 Esempi pratici
31.6.1 Generazione dell'eseguibile
31.6.2 Allineamento dei dati al BYTE e alla WORD

31.7 Assembly inline


Capitolo 32:
Interfaccia tra BASIC e Assembly

32.1 Tipi di dati del BASIC
32.2 Convenzioni per i compilatori BASIC
32.2.1 Segmenti di programma
32.2.2 Stack frame
32.2.3 Valori di ritorno

32.3 Le classi di memoria del BASIC
32.4 Gestione degli indirizzamenti in BASIC
32.5 Protocollo di comunicazione tra BASIC e Assembly
32.6 Esempi pratici
32.6.1 Generazione dell'eseguibile



Appendici


Appendice A: Tabella dei codici ASCII estesi
Appendice B: Tabella dei codici di scansione della tastiera
Appendice C: Tabella di conversione tra le principali basi numeriche
Appendice D: Header di un file EXE per DOS
Appendice E: Il Program Segment Prefix
Appendice F: Tabella delle istruzioni della CPU (RM)
Appendice G: Vettori di interruzione in modalità reale