An object file contains assembled bytes together with information needed to combine them with other objects. It can describe an unresolved reference even though the final address is not yet known:
.extern target .section my_data slot: .word target .end
Here slot reserves a four-byte word in my_data. Its contents depend on target, which another object must define. The assembler records four zero placeholder bytes and an R_SS_32 relocation naming that symbol.
Save the example as reference.s and produce a linker-readable object with:
$ ./asembler -hex -o reference.o reference.s
The file includes section contents, a symbol table, a string table, and relocation records. These let the linker connect the reference to its definition. The emulator applies the resulting relocation when loading the linked program, so the placeholder is not the final runtime value.
ivss uses an ELF-based representation serialized as textual hex. The .o suffix describes its role, not a guarantee that it is a conventional binary object accepted by other toolchains. The assembler's default human-readable dump is a separate inspection format.
Source: asembler.c, elf.c.