Sezione |
Indirizzi Base
Registri Interni
|
Capitolo 2 |
Gli strumenti di Lavoro |
ASSEMBLATORE 7/17 [26 di 87] |
|
|
Abbiamo 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. |
|
Il 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 |
|
Ne 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. |
|
Ma questa è una storia già ampiamente discussa. In questa sede cercheremo solo di capire cosa c'è dentro questo file. |
|
La 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. |
|
Tuttavia, 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:
| ||||||||||
Osservando i risultati possiamo localizzare
delle aree funzionalmente riconoscibili e altre comunque
presenti in entrambe le tabelle:
|
|
Per 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 88 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 |
|
Capitolo 2 | ASSEMBLATORE 7/17 | |||||||
26 di 87 |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|