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

LINKER 9/10 [45 di 87] 

    

    Quali sono gli errori di collegamento più frequenti?
     
bulletNel corso degli esempi di questo paragrafo abbiamo spesso citato l'errore LINK : warning L4021: no stack segment, tipico dell'azione del Linker sugli oggetti  (OBJ) ottenuti a partire da un sorgente organizzato per generare, alla fine, un programma di tipo COM:
bulletLa segnalazione è sacrosanta perchè questi sorgenti definiscono solo un segmento (quello di codice, indicato con _prog, nei nostri esempi) nel quale, per la natura intrasegmentale dei files COM, viene a trovarsi ogni componente funzionale di un eseguibile, compreso lo stack (ne riparleremo nelle pagine del paragrafo Exe2Bin).
bulletla segnalazione è dunque ovvia: il segmento di stack non c'è proprio! Del resto si tratta di un errore warning e può quindi essere tranquillamente ignorato.

      

bulletUn altro errore che possiamo osservare con una certa frequenza, LINK : error L2029: Unresolved externals::
bulletè dovuto all'inesatta formulazione del comando LINK; abbiamo già suggerito come si deve dare inizio al collegamento degli oggetti chiamati a formare l'eseguibile EXE, ma spesso per inesperienza dimentichiamo di specificare il nome della libreria nella quale il Linker deve cercare le procedure dichiarate EXTRN nel programma sorgente.
bulletdi solito dopo la segnalazione segue l'elenco dettagliato di tutte le etichette (di procedure) esterne non risolte, chiuso dal numero consuntivo degli errori commessi:
     
C:\Arch-Lab\Lavoro>link prova2.exe
Microsoft (R) Overlay Linker Version 3.64 
Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

Run File [PROVA2.EXE]: 
List File [NUL.MAP]: 
Libraries [.LIB]: 
LINK : warning L4021: no stack segment

LINK : error L2029: Unresolved externals:

VIA_CUR in file(s):
PROVA2.OBJ(PROVA2.ASM)
BIOSCLS in file(s):
PROVA2.OBJ(PROVA2.ASM)

There were 2 errors detected

      

bulletPer prevenire questo errore è bene abituarsi a dare un comando di collegamento del tipo:
     
LINK prova,prova,nul,Giobe.Lib /NOE

      

bulletSe si tenta di collegare oggetti non presenti, per esempio perchè un precedente errore di compilazione non ha permesso la creazione dell'OBJ, il Linker da il seguente errore: LINK: fatal error L1093: PROVA2.OBJ: object not found.
     
bulletUna segnalazione d'errore non molto frequente ma che genera panico perchè è piuttosto difficile da correggere è la seguente: fixup offset exceeds field width; si presenta:
bulletquando il programma sorgente dichiara una procedura EXTRN di tipo NEAR e la libreria che la definisce la dichiara FAR; l'uso delle matrici preconfezionate e della libreria Giobe.LIB rende impossibile questa segnalazione (almeno per questa  causa): sia le dichiarazioni interne (in libreria) che quelle esterne (nel sorgente) sono implicitamente di tipo NEAR.
bulletl'errore può essere segnalato anche se il codice macchina del nostro eseguibile ha superato la dimensione massima di 64k (superamento dell'ampiezza del campo) e nei nostri programmi la cosa è senz'altro da escludere!

      

bulletPer finire mostriamo un errore simile al precedente, poco probabile nelle nostre esperienze future, dovuto alla cattiva gestione delle etichette di un programma; nel caso specifico la variabile ATTRIB è stata definita in un segmento specifico per dati (in una struttura EXE), ma la libreria,  linkata all'oggetto così generato da MASM, da  per scontato che la variabile sia nel segmento di codice, _prog; notare come il Linker si sforzi di dare la maggior quantità possibile di informazioni sull'errore (ben 3 righe):

      

C:\Arch-Lab\Lavoro>link prova2.exe
Microsoft (R) Overlay Linker Version 3.64 
Copyright (C) Microsoft Corp 1983-1988. All rights reserved.

Run File [PROVA2.EXE]: 
List File [NUL.MAP]: 
Libraries [.LIB]: giobe

GIOBE.LIB(bios08.ASM) : error L2002: fixup overflow at 0011 in segment _PROG
pos: E80 Record type: 48dotto
target external 'ATTRIB'

There were 1 errors detected

    

Pagina Precedente Capitolo 2 Pagina Successiva LINKER 9/10   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
45 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