(Оффтоп)
Зачем вам знать, как работает tasm, tlink в формат используемых там объектных файлов (с точки зрения изучения ассемблера)?
А разве это не нужно знать чтобы понимать что происходит?
Смотреть нужно .LST, .MAP, не .OBJ. Для этого должна быть включена соответствующая опция компилятора.
Вот .LST и теперь действительно видно, каким образом появляется строится объектный файл, в первом приближении
Код:
 Turbo Assembler    Version 4.1       06/11/13 15:26:26       Page 1
hello.ASM
      1   0000              .model small
      2   0000              .data
      3   0000  48 65 6C 6C 6F 20   24   msg db 'Hello $'
      4   0007              .code
      5                 org 100h
      6   0100              start:
      7   0100  B4 09           mov ah,09h
      8   0102  BA 0000r           mov dx, offset msg
      9   0105  CD 21           int 21h
     10   0107  C3           ret
     11                 end start
Turbo Assembler    Version 4.1       06/11/13 15:26:26       Page 2
Symbol Table
Symbol Name           Type    Value
??DATE              Text    "06/11/13"
??FILENAME           Text    "hello     "
??TIME              Text    "15:26:26"
??VERSION           Number 040A
@32BIT              Text    0
@CODE              Text    _TEXT
@CODESIZE           Text    0
@CPU              Text    0101H
@CURSEG              Text    _TEXT
@DATA              Text    DGROUP
@DATASIZE           Text    0
@FILENAME           Text    HELLO
@INTERFACE           Text    000H
@MODEL              Text    2
@STACK              Text    DGROUP
@WORDSIZE           Text    2
MSG              Byte    DGROUP:0000
START              Near    _TEXT:0100
Groups & Segments        Bit Size Align  Combine Class
DGROUP              Group
  _DATA              16  0007 Word     Public  DATA
_TEXT              16  0108 Word     Public  CODE
и вот .lst если указать .model tiny
Код:
Turbo Assembler    Version 4.1       06/11/13 15:56:57       Page 1
hello.ASM
      1   0000              .model tiny
      2   0000              .data
      3   0000  48 65 6C 6C 6F 20   24   msg db 'Hello $'
      4   0007              .code
      5                 org 100h
      6   0100              start:
      7   0100  B4 09           mov ah,09h
      8   0102  BA 0000r           mov dx, offset msg
      9   0105  CD 21           int 21h
     10   0107  C3           ret
     11                 end start
Turbo Assembler    Version 4.1       06/11/13 15:56:57       Page 2
Symbol Table
Symbol Name           Type    Value
??DATE              Text    "06/11/13"
??FILENAME           Text    "hello     "
??TIME              Text    "15:56:57"
??VERSION           Number 040A
@32BIT              Text    0
@CODE              Text    DGROUP
@CODESIZE           Text    0
@CPU              Text    0101H
@CURSEG              Text    _TEXT
@DATA              Text    DGROUP
@DATASIZE           Text    0
@FILENAME           Text    HELLO
@INTERFACE           Text    000H
@MODEL              Text    1
@STACK              Text    DGROUP
@WORDSIZE           Text    2
MSG              Byte    DGROUP:0000
START              Near    DGROUP:0100
Groups & Segments        Bit Size Align  Combine Class
DGROUP              Group
  _DATA              16  0007 Word     Public  DATA
  _TEXT              16  0108 Word     Public  CODE
Я уже указала, что надо сделать, чтобы исправить ошибку. Причина ошибки в том, что компилятор хотел сделать DATA отдельным сегментом (что ему диктовала модель small), а линкер -- склеил его с CODE (ибо он делал COM).
Да, это я уже проделывал и все нормально работает.
Когда в исходном коде есть, скажем, "offset" или ссылка на какие-либо символы, то ассемблер не всегда знает, какими адресами их заменять.
Но тем не менее, ассемблер все равно проставил msg смещение 0:
Код:
MSG              Byte    DGROUP:0000
. Значит линкер это смещение скорректирует.
Конкретные адреса в конечном исполняемом файле (точнее, в памяти, куда система его загрузит) будут известны лишь линкеру. 
В данном случае, жто смещение msg, а значения DGROUP и _TEXT уже будет проставлено загрузчиком после запуска программы, верно?
либо линкуйте в exe
линкую в .EXE результат почти тотже

тут msg уехала на смещение 0108, хотя инструкция по смещению 0003 запишет в dx 0008A. 

 Если не уберать org 100h то msg уехжает на смещение 0208