|
 |
Gli strumenti di Lavoro |
LINKER 4/10
[40 di 87] |
 |
|
A cosa serve il file MAP? |
|
 | Questo file può tornar comodo nella fase di
controllo del programma; è un file di testo
e perciò può essere letto con un editor
o semplicemente con il comando TYPE
del Dos. Osservando l'immagine visualizzata sul monitor, per i nostri 2
programmi pilota, notiamo che in entrambi viene
ribadito l'errore di collegamento (che spiegheremo nella pagina degli
errori), seguito dall'elenco dei
segmenti definiti nel codice sorgente (nel nostro caso uno solo, di
nome _PROG e
di classe CODE)
con l'indirizzo del primo byte (Start),
quello dell'ultimo (Stop)
e con il numero di bytes del programma eseguibile
(Length):
C:\ARCH-LAB\LAVORO> type prova.map
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 0010DH 0010EH _PROG CODE
Program entry point at 0000:0100 |
|
C:\ARCH-LAB\LAVORO> type prova1.map
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00118H 00119H _PROG CODE
Program entry point at 0000:0100 |
|
|
|
 | La dimensione (Length)
della parte eseguibile del
programma EXE esprime, naturalmente, il totale della lunghezza del Main
program e delle sue procedure; questa precisazione ci aiuta a capire in che
modo lavora il Linker. |
 | Nelle pagine seguenti indagheremo a fondo
su questo argomento, rapportando le informazioni dei files MAP con quelle
fornite dall'effettivo codice macchina prodotto. |
 | Naturalmente il file MAP
è molto più significativo se i segmenti definiti sono più di uno, come
nel caso classico di un programma EXE; gli
esempi che seguono mostrano il resoconto di questo file in funzione delle
scelte di allineamento
fatte per ciascun segmento nel programma sorgente:
STACK SEGMENT BYTE STACK 'STACK'
dataSG SEGMENT BYTE PUBLIC 'DATA'
_prog SEGMENT BYTE PUBLIC 'CODE'
Start Stop Length Name Class
00000H 0009FH 000A0H STACK STACK
000A0H 000B1H 00012H DATASG DATA
000B2H 000FBH 0004AH _PROG CODE
Program entry point at 000B:0002 |
STACK SEGMENT PARA STACK 'STACK'
dataSG SEGMENT PARA PUBLIC 'DATA'
_prog SEGMENT PARA PUBLIC 'CODE'
Start Stop Length Name Class
00000H 0009FH 000A0H STACK STACK
000A0H 000B1H 00012H DATASG DATA
000C0H 00109H 0004AH _PROG CODE
Program entry point at 000C:0000 |
|
STACK SEGMENT WORD STACK
'STACK'
dataSG SEGMENT WORD PUBLIC 'DATA'
_prog SEGMENT WORD PUBLIC 'CODE'
Start Stop Length Name Class
00000H 0009FH 000A0H STACK STACK
000A0H 000B1H 00012H DATASG DATA
000B2H 000FBH 0004AH _PROG CODE
Program entry point at 000B:0002 |
STACK SEGMENT PAGE STACK
'STACK'
dataSG SEGMENT PAGE PUBLIC 'DATA'
_prog SEGMENT PAGE PUBLIC 'CODE'
Start Stop Length Name Class
00000H 0009FH 000A0H STACK STACK
00100H 00111H 00012H DATASG DATA
00200H 00249H 0004AH _PROG CODE
Program entry point at 0020:0000 |
|
 | In ogni caso la prima 00000H);
possiamo notare che:
 | se l'allineamento scelto è il byte non viene sciupato alcun bytes (ogni
segmento è consecutivo al precedente). |
 | la situazione è identica alla precedente
con allineamento alla word
ma si tratta di un caso: la dimensione di ciascun segmento è pari per
cui l'inizio allineato alla locazione pari successiva è scontato. |
 | se l'allineamento è al paragrafo o alla pagina
tutti i segmenti iniziano ad indirizzi "tondi", al
netto rispettivamente, dei 16 e dei 256 bytes, cioè all'inizio del
paragrafo o della pagina successiva. |
 | Da notare che, in ogni caso, la locazione
iniziale (entry-point) del programma è sempre all'inizio del segmento
di codice: l'indirizzo fisico (per esempio
000B2H
o
000C0H)
viene sempre proposto in forma logica (000B:0002
o 000C:0000). |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|