# Format del mòdul d'objectes reubicables

L'Object Module Format (OMF) és un format de fitxer d'objecte que s'utilitza principalment per al programari destinat a funcionar amb microprocessadors Intel 80x86. Va ser desenvolupat originalment per Intel entre 1975 i 1977 per a ISIS-II, dirigit als processadors 8080/8085 de 8 bits. Aquesta variant més tard es va conèixer com a OMF-80. Com a OMF-86 es va adaptar al processador 8086 de 16 bits el 1978. La versió 4.0 per a la família 8086 es va publicar el 1981 amb el nom de Relocatable Object Module Format, i potser és més coneguda pels usuaris de DOS com a. Fitxer OBJ. Les versions per als processadors 80286 (OMF-286) i els processadors 80386 de 32 bits (OMF-386 ) es van introduir el 1981 i el 1985, respectivament. Des de llavors, ha estat estandarditzat pel Comitè d'Estàndards de la Interfície d'Eina i també va ser ampliat per Microsoft i IBM IBM-OMF). Intel també va adaptar el format al microcontrolador 8051 (OMF-51 i AOMF).

## Format de fitxer

Molts formats de fitxer d'objectes consisteixen en un conjunt de taules, com ara la taula de reubicació, que s'emmagatzemen en posicions fixes del fitxer, com el format a.out, o s'apunten a la capçalera, com el format ELF. Les "seccions", el codi, l'àrea de dades, etc., s'emmagatzemen com a àrees contigües de bytes dins d'aquests fitxers.
El format del mòdul d'objectes reubicables, però, va ser dissenyat per requerir una memòria mínima quan s'enllaça i consta d'una sèrie de registres que tenen el format següent:
| Mida | Continguts |
| 1 byte | Tipus de registre, per exemple informació de trasllat |
| 2 bytes | Longitud de les dades (N +1) |
| N bytes | Dades (varia segons el tipus de registre) |
| 1 byte | Suma de control o 0 |
Hi ha una gran varietat de tipus de registres a causa de la consolidació de variants OMF de diversos proveïdors i per l'addició de funcions com el codi de 32 bits i l'enllaç dinàmic. Aquests són els tipus de registre importants:
* COMENTARI - (88h) Comentari, que també pot contenir informació de control.
* EXTDEF - (8Ch) Defineix referències externes
* PUBDEF - (90h/91h) Identifica símbols externs en aquest mòdul
* SEGDEF - (98h/99h) Identifica segments
* GRPDEF - (9Ah) Identifica grups de segments, per exemple MS-DOS DGROUP
* FIXUPP - (9Ch/9Dh) Expedients d'arreglament o reubicació
* LEDATA - (A0h/A1h) Conté text d'un codi o secció de dades
* COMDEF - (B0h) Dades comunes no inicialitzades
* COMDAT - (C2h/C3h) Dades comunes inicialitzades
* MODEND - (8Ah/8Bh) Indica el final del mòdul
No hi ha cap capçalera que contingui desplaçaments de fitxer, com ara un punter a una taula de símbols, al fitxer; un enllaçador ha d'analitzar completament el fitxer objecte per extreure tota la informació.
En el format OMF, les dades d'una secció no s'emmagatzemen necessàriament com a bytes contigus al fitxer, sinó que es poden representar amb diversos registres. L'especificació del format de fitxer (versió 1.1) diu que això s'ha de fer per a seccions més grans que 1 KiB. Els registres que contenen informació de reubicació (correccions) s'han d'emmagatzemar immediatament després dels registres de dades de la secció a la qual s'apliquen, de manera que les dades de la secció i la informació de reubicació es "barregen" al fitxer.

## Ús

El format de fitxer és el format de fitxer objecte més important sota DOS, Windows de 16 bits i OS/2 de 16 i 32 bits.
Poques cadenes d'eines utilitzen la versió de 32 bits del format OMF. Per exemple, la cadena d'eines Watcom C permet generar codi per a objectius que utilitzen dissenys de memòria segmentada de 32 bits; Iron Spring PL/I pot generar codi per a dissenys de memòria plana OS/2 de 32 bits.
El compilador Embarcadero Delphi va utilitzar aquest format quan va generar fitxers obj per a C++. Va ser l'únic format de fitxers objecte que es podia enllaçar a un programa o unitat escrit en Object Pascal abans de la versió XE2 de Delphi, que va introduir el suport del format COFF, juntament amb l'objectiu de Windows de 64 bits.

## Referències

* ↑ «What is a 8086 relocatable?» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «OMF-51 Object Module Format | Documentation» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «Tool Interface Standard (TIS) Portable Formats Specification» (en anglès). [Consulta: 8 desembre 2023].
* ↑ Yumpu.com. «Relocatable» (en anglès). [Consulta: 8 desembre 2023].