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 6/10 [42 di 87] 

    

    Il file EXE in rapporto con il file MAP (Procedure EXTRN di tipo FAR)
     
bulletPer spirito d'osservazione vediamo che cosa succede se, nel programma  PROVA2.ASM, le 2 procedure EXTRN sono dichiarate di tipo FAR: il codice sorgente è pressocché identico a quello di prima (con FAR al posto di NEAR), mentre il listato prodotto dal MASM evidenzia ancora i 2 indirizzi Offset, lasciati a 0000 e marcati con una E (appunto per esterna), ma ora mostra anche altri 2 bytes (----) necessari per consentire al Linker di inserire anche la parte Segment dell'indirizzo delle procedure:

      

                           EXTRN KEYwait:FAR
                           EXTRN BIOScls:FAR
0000                _prog  SEGMENT BYTE PUBLIC 'CODE'
                           ASSUME CS:_prog,DS:_prog
0100                       ORG   0100H
0100 9A 0000 ---- E Main:  CALL  BiosCls
0105 9A 0000 ---- E        CALL  KeyWait
010A B4 4C                 MOV   AH,4CH
010C CD 21                 INT   21H
010E                _prog  ENDS
                           END   Main

      

bulletNelle figure seguenti vediamo i 2 files MAP (in alto) e EXE (in basso, con l'aiuto di Debug); aggiornati dalla nuova esigenza di codificare FAR le procedure.
bulletL'indirizzo del primo bytes da eseguire non è cambiato (Program entry point at 0000:0100) mentre la lunghezza del file (Length 0011AH) è ora 4 bytes più grande per garantire la presenza di un indirizzo di puntamento lontano; il disassembly del file EXE (parte bassa della figura seguente) conferma ancora entrambe le indicazioni e mostra le 2 procedure assunte dalla libreria siano state inserite dal Linker sempre sotto il Main:

      

C:\ARCH-LAB\LAVORO> type prova2.map
LINK : warning L4021: no stack segment

Start  Stop   Length  Name  Class
00000H 00119H 0011AH  _PROG CODE
 
Program entry point at 0000:0100

    

C:\ARCH-LAB\LAVORO> debug prova2.exe
Microsoft (R) Symbolic Debug Utility Version 4.00
Copyright (C) Microsoft Corp 1984, 1985. All rights reserved.
- U 100               ; comando Debug per Unassemble
--------------------------------- istruzioni del Main Program
0100 9A1301A430 CALL 30A4:0113;   CALL  BiosCls (far)
0105 9A0E01A430 CALL 30A4:010E;   CALL  KeyWait (far)
010A B44C        MOV  AH,4C    ;   MOV   AH,4CH
010C CD21        INT  21       ;   INT   21H
-----------------------------------------------------------
010E B400        MOV  AH,00    ;|
0110 CD16        INT  16       ;|Procedura KeyWait
0112 C3          RET           ;|
-----------------------------------------------------------
0113 B400        MOV  AH,00    ;|
0115 B003        MOV  AL,03    ;|Procedura BiosCls
0117 CD10        INT  10       ;|
0119 C3          RET           ;|
0116A 0000   ; prima istruzione non appartenente al programma

      

bulletL'analisi del codice macchina disassemblato ci suggerisce queste considerazioni: 
bulletil codice prodotto dal MASM è effettivamente di tipo lontano (FAR), almeno per la CALL (codice operativo 9A invece di E8) mentre per la RET viene mantenuta la codifica vicina (ancora codice operativo C3 invece CB); nonostante l'apparente discordanza non c'è incongruenza perchè la libreria definisce NEAR tutte le proprie procedure.
bulletil Linker ha sostituito i 2 byte vuoti 0000 con la parte offset dell'indirizzo delle 2 procedure, rispettivamente con 0113 e 010E (scritti alla rovescia, 1301 e 0E01, in memoria, valendo sempre la regola Lo- Hi). Ora questi numeri esprimono un reale indirizzo (assoluto, non relativo come nel caso delle procedure NEAR).
bulletil fatto nuovo è la presenza dei 2 bytes della parte segment dell'indirizzo, a sostituzione degli spazi lasciati vuoti (----) da MASM nel file oggetto: il numero 30A4 è stato scritto (nella giusta posizione nel programma EXE) dal loader del Dos nella fase di caricamento, in funzione delle indicazioni lasciate dal Linker nella Tabella di Rilocazione e in funzione del valore del primo segmento rilevato libero in memoria. In questo consiste la rilocabilità del programma EXE.

    

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