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 5/10 [41 di 87] 

    

   Aggiornato 10 luglio 2010
    Il file EXE in rapporto con il file MAP (Procedure EXTRN di tipo NEAR)
     
bulletIl sorgente PROVA1.ASM definisce e chiama 2 procedure; nella figura che segue viene mostrato il programma  PROVA2.ASM, funzionalmente identico al precedente ma sostanzialmente differente, dato che obbliga il Linker a cercare le 2 procedure di prima dentro la libreria Giobe.LIB; notiamo il sorgente (a sinistra, con le 2 dichiarazioni EXTRN di tipo NEAR) e il listato prodotto dal MASM (a destra, con i 2 indirizzi Offset lasciati a 0000, e marcati con una E, appunto per esterna):

      

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

      

bulletNelle figure seguenti vediamo ora cosa ci dice il file opzionale MAP (in alto) e come viene visualizzato il codice EXE (in basso, con l'aiuto di Debug); entrambi i files sono generati dal Linker.

      

bullet In particolare il file MAP anticipa l'indirizzo del primo bytes da eseguire (Program entry point at 0000:0100) e la lunghezza del file (Length 00116H) corrispondente all'indirizzo del primo bytes non appartenente all'eseguibile; il disassembly del file EXE (parte bassa) conferma entrambe le indicazioni e mostra come il Linker abbia inserito le 2 procedure assunte dalla libreria subito sotto il Main:

      

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

Start  Stop   Length  Name  Class
00000H 00115H 00116H  _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 E80C00 CALL 010F  ;   CALL  BiosCls (near)
0103 E80400 CALL 010A  ;   CALL  KeyWait (near)
0106 B44C   MOV  AH,4C ;   MOV   AH,4CH
0108 CD21   INT  21    ;   INT   21H
-----------------------------------------------------------
010A B400   MOV  AH,00 ;|
010C CD16   INT  16    ;|istruzioni della Procedura KeyWait
010E C3     RET        ;|
-----------------------------------------------------------
010F B400   MOV  AH,00 ;|
0111 B003   MOV  AL,03 ;|istruzioni della Procedura BiosCls
0113 CD10   INT  10    ;|
0115 C3     RET        ;|
0116 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 vicino (NEAR): infatti sia CALL che RET sono codificate con codici operativi vicini, E8 e C3
bulletil Linker ha sostituito i valori vuoti 0000 delle 2 procedure rispettivamente con 000C e 0004; osserva come valga la regola Lo- Hi, per la quale in memoria sono scritti alla rovescia, 0C00 e 0400, prima il byte meno significativo (Low) e poi quello più significativo (High).
bullet si nota subito che questi numeri non sono indirizzi di offset (rispettivamente uguali a 010F e 010A, come si legge dall'operando di CALL) ma rappresentano un indirizzo relativo, cioè indicano il numero di bytes da aggiungere a quello dell'istruzione che li ospita per trovare la procedura a cui si riferiscono, rispettivamente 0C (=12) e 04 (=4) bytes in avanti
bulletpoichè il salto delle locazioni è in avanti, nel conto espresso dal numero dei bytes da aggiungere non si tiene conto di quelli che costituiscono l'istruzione di partenza e di d'arrivo; se il salto fosse indietro, l'indirizzo relativo terrà invece conto anche di questi !!

    

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