Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Capitolo 2

Home » Programma il Computer » Tutorial Assembly

Capitolo 2 - Gli strumenti di lavoro

  Gli strumenti di Lavoro

EX2BIN 5/6 [51 di 87] 

    

    Come è fatto il file COM? 
     
bulletIl file COM è generato da Exe2Bin a partire dalla versione EXE prodotta dal linker a sua volta ottenuto dall'oggetto (OBJ) associato dal compilatore al nostro programma sorgente (ASM).

      

bulletSi tratta di un file dal contenuto essenziale, detto immagine della memoria perché la sequenza dei suoi bytes è esattamente quella che sarà presente in memoria dopo il suo trasferimento.

      

bulletIn altre parole il codice macchina memorizzato in questo file è assoluto, cioè non ha bisogno di essere rilocato come accadeva per l'EXE da cui deriva.

      

bulletI files di tipo COM sono intrasegmentali, cioè possono disporre della quantità di memoria di un solo segmento, cioè di un'area di 64 kBytes.

      

bulletLa disponibilità di un solo segmento obbliga il Sistema Operativo a prendere provvedimenti, al fine di assicurare tutte le strutture di solito necessarie nella normale esecuzione del codice macchina; in particolare:
bulletassicura la presenza di uno stack, riservando ad esso la parte finale dell'unico segmento e inizializzando a queste locazioni il puntatore SS:SP. Sebbene, in generale, la presenza di un meccanismo che tende a scrivere la memoria indietro non provochi particolari disagi, l'uso di questa struttura deve stimolare una grande attenzione ..
bulletassicura la presenza del prefisso di segmento di programma (PSP) riservando ad esso le prime 256 locazioni del segmento; per questo è necessario scrivere la pseudoOperazionne ORG 0100H all'inizio del nostro sorgente (0100H = 256)
bulletla conseguenza logica è che il codice eseguibile di un programma COM inizia sempre all'offset 0100H, dentro il segmento che lo ospita: per questo il Sistema Operativo provvede a caricare questo valore nel puntatore di programma (IP).
bulletgli eventuali dati del programma non potendo disporre di un proprio segmento, devono essere inclusi nel segmento di codice; di solito la tecnica utilizzata è quella di inserire la zona delle variabili tra un'istruzione di salto al Main Program (espressa nel programma sorgente come prima istruzione) e le istruzioni del Main Program stesso:
     
_prog    SEGMENT BYTE PUBLIC 'CODE'
        
ASSUME  CS:_prog,DS:_prog
         ORG   0100H
INIZIO:  JMP   Main
ATTRIB   DB    0FH    ;zona dei dati
dato     Dw    1278H  ;

Main:    MOV    AL,CS:[ATTRIB] 
         MOV    AH,,4CH
         INT    21H
_prog    ENDS
         END INIZIO

      

bulletLa struttura dei COM è certamente molto semplice: questo è un vantaggio perchè si presenta in modo compatto e veloce da caricare in memoria, ma per altri versi evidenzia le sue limitazioni; in ogni caso se nella cartella sono presenti 2 files con lo stesso nome, rispettivamente con estensione COM e EXE, viene sempre eseguito il primo! Il confronto delle dimensioni dei nostri programmi pilota, prima e dopo la cura di Exe2Bin, la dice lunga: 

      

PROVA.EXE 782 15/08/01 18.57   PROVA1.EXE 793 16/08/01 12.37
PROVA.COM 14 15/08/01 18.58   PROVA1.COM 25 16/08/01 12.37

      

bulletPer levarci la curiosità di vedere il valore dei 14 bytes di Prova.COM e dei 25 bytes di Prova1.COM non è necessario usare DiskEdit (come per gli EXE); basta Debug:

      

C:\ARCH-LAB\LAVORO> debug prova.com
-d 100


0100 B4 00 B0 03 CD 10 B4 00 CD 16 B4 4C CD 21
-u 100
0100 B400   MOV AH,00
0102 B003   MOV AL,03
0104 CD10   INT 10
0106 B400   MOV AH,00
0108 CD16   INT 16
010A B44C   MOV AH,4C
010C CD21   INT 21

    

C:\ARCH-LAB\LAVORO> debug prova1.com
-d 100



0100 EB 0D 90 B4 00 CD 16 C3 B4 00 B0 03 CD 10 C3 E8
0110 F6 FF E8 EE FF B4 4C CD 21
-u 100
0100 EB0D   JMP  010F
0102 90     NOP
0103 B400   MOV  AH,00
0105 CD16   INT  16
0107 C3     RET
0108 B400   MOV  AH,00
010A B003   MOV  AL,03
010C CD10   INT  10
010E C3     RET 
010F E8F6FF CALL 0108
0112 E8EEFF CALL 0103
0115 B44C   MOV  AH,4C
0117 CD21   INT  21

      

bulletOsserva la sequenza dei bytes visualizzata dal dump (-d 100) della memoria e confrontali con gli stessi bytes organizzati in forma di programma dall'unassembly (-u 100): puoi imparare a distinguere i bytes dei codici operativi delle varie istruzioni e quelli dei rispettivi operandi.

    

Pagina Precedente Capitolo 2 Pagina Successiva EX2BIN 5/6   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
51 di 87
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

    

CAP 2 » 1. Catena di Compilazione 2. Editor 3. Assemblatore 4. Linker 5. Exe2Bin
6.
Ambiente di Lavoro 7. Gestore d'Ambiente Macro 8. Gestore d'Archivi OG
9. Matrici per i Programmi Sorgente 10. Gestore di Librerie Lib 
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati