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

ASSEMBLATORE 7/17 [26 di 87] 

    

    Cosa contiene il file OBJ?
     
bulletAbbiamo più volte avuto occasione di parlare del codice oggetto (.OBJ) prodotto dall'assemblatore MASM; sappiamo che si tratta di un file contenente bytes, nel senso che assomiglia molto al codice macchina effettivo (.COM) che il processore sarà chiamato ad eseguire, dopo essere stato trasferito in memoria.

      

bulletIl problema sta nel fatto che, una rapida occhiata sulle dimensioni dimostra che il primo è quasi 5 volte più grande del secondo...

      

PROVA.COM 14 15/08/01 18.58   PROVA1.COM 25 16/08/01 12.37
PROVA.OBJ 78 15/08/01 18.57   PROVA1.OBJ 108 16/08/01 12.36

      

bulletNe consegue che l'80 per cento di questo file non è codice eseguibile, ma contiene informazioni necessarie al linker (nella fase successiva) per mantenere per esso la caratteristica della rilocabilità e per renderlo effettivamente eseguibile.

      

bulletMa questa è una storia già ampiamente discussa. In questa sede cercheremo solo di capire cosa c'è dentro questo file.

      

bulletLa documentazione sull'argomento è introvabile e, per altro poco significativa; l'organizzazione interna dei bytes a favore del linker LINK.EXE è un problema che riguarda solo questo applicativo: a noi interessa solo che faccia bene il suo lavoro, cioè la trasformi l'OBJ in EXE.

      

bulletTuttavia, sorretto da una innata curiosità ho provato ad analizzare i 2 files OBJ disponibili con l'aiuto del prezioso Debug; il risultato è raccolto nelle 2 tabelle:

      

C:\ARCH-LAB\LAVORO> debug

---[prova.OBJ -  78-byte]----------------------------------------
 80 0B
00 09 50 52 4F 56 41 2E 41 53 4D D5 96 0D    PROVA.ASM 
 00 00 04 43 4F 44 45 05 5F 50 52 4F 47 A2 98 07    CODE  _PROG 
 00 28 0E 01 03 02 01 24 88 04 00 00 A2 00 D2 A0  
 12 00 01 00 01 B4 00 B0 03 CD 10 B4 00 CD 16 B4   
 4C CD 21 83 8A 07 00 C1 00 01 01 00 01 AB        

---[prova.COM - 14 bytes]----------------------------------------

 
B4 00 B0 03 CD 10 B4 00 CD 16 B4 4C CD 21 

    

C:\ARCH-LAB\LAVORO> debug 
 
---[prova1.OBJ -  108 bytes]-------------------------------------
 
80 0C 00 0A 70 72 6F 76 61 31 2E 41 53 4D 02 96   prova1.ASM 
 0D 00 00 04 43 4F 44 45 05 5F 50 52 4F 47 A2 98   CODE  _PROG
 07 00 28 19 01 03 02 01 19 88 04 00 00 A2 00 D2  
 A0 1D 00 01 00 01 EB 0D 90 B4 00 CD 16 C3 B4 00 
 B0 03 CD 10 C3 E8 00 00 E8 00 00 B4 4C CD 21 9A
 9C 0F 00 84 10 00 01 01 08 01 84 13 00 01 01 03
 01 19 8A 07 00 C1 00 01 01 00 01 AB  

---[prova1.COM - 25 bytes]---------------------------------------
 EB 0D 90 B4 00 CD 16 C3 B4 00 B0 03 CD 10 C3 E8
 F6 FF E8 EE FF B4 4C CD 21

      

bulletOsservando i risultati possiamo localizzare delle aree funzionalmente riconoscibili e altre comunque presenti in entrambe le tabelle:

      

bulletLe zone verdi sono le stringhe ascii con il nome del file sorgente e quello da noi scelto per il segmento di codice; da notare la tecnica (molto diffusa a livello di sistema) di anteporre alla stringa il numero dei suoi caratteri, a beneficio della procedura che provvederà ad interpretarla.
bulletle zone gialle sono il codice macchina effettivo; il confronto con quello definitivo (estratto dal file COM e aggiunto in basso) mette in evidenza le differenze; in particolare nel secondo programma, che implementa la tecnica della chiamata di procedure, si notano chiaramente (aree gialle) i 2 bytes 00H, sostituiti alla fine (dal linker) con l'effettivo valore.
bulletle zone grigie sono sequenze di bytes non documentate presenti in entrambi gli OBJ.
bulleti rimanenti bytes sono invece sequenze di bytes non documentate che assumono valori diversi nei 2 OBJ.

      

bulletPer finire può essere interessante un esame comparato del contenuto dei 2 files OBJ; da notare la zona del codice macchina effettivo, ora integrata con la traduzione mnemonica (assembly) dei codici esadecimali:

      

---[prova.OBJ - 78-byte]------
80 0B 00
09
50 52 4F 56 41 2E 41 53 4D
D5 96 0D
04
43 4F 44 45
05
5F 50 52 4F 47
A2 98 07 00 28

0E
01 03 02 01

24
8
8 04 00 00 A2 00 D2 A0
12
00 01 00 01
              
B4 00 
INIZIO: MOV AH,00H
CD 16 
         INT 16H

B4 00          MOV AH,00H
B0 03 
         MOV AL,03H
CD 10 
         INT 10H



B4 4C          MOV AH,4CH
CD 21
          INT 21H

83

8A 07 00 C1 00 01 01 00 01 AB 

---[prova.COM - 14 bytes]-----


B4 00 
CD 16 

B4 00 
B0 03 
CD 10 



B4 4C 
CD 21
---[prova1.OBJ - 108 bytes]-----
80 0C 00
0A
70 72 6F 76 61 31 2E 41 53 4D
02 96 0D 00 00
04
43 4F 44 45
05
5F 50 52 4F 47
A2 98 07 00 28
 
19
01 03 02 01

19
88 04 00 00 A2 00 D2 A0

1D
00 01 00 01

EB 0D 90
 
INIZIO: JMP Main
B4 00
    
KeyWait:MOV AH,00H
CD 16             INT 16H
C3
               
RET
B4 00
    
BiosCls:MOV AH,00H
B0 03
            
MOV AL,03H
CD 10
            
INT 10H
C3
               
RET
E8
00 00 
Main:   CALL BiosCls
E8
00 00 
         CALL KeyWait
B4 4C
             
MOV AH,4CH
CD 21
             INT 21H

9A 9C 0F 00 84 10 00 01 01 08 01
84 13 00 01 01 03 01 19
8A 07 00 C1 00 01 01 00 01 AB


---[prova1.COM - 25 bytes]------
EB 0D 90 
B4 00 
CD 16 
C3 
B4 00 
B0 03 
CD 10 
C3 
E8
F6 FF  
E8
EE FF  
B4 4C 
CD 21

    

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