16-битная адресация в COFF

Тема в разделе "WASM.ASSEMBLER", создана пользователем Paganel, 5 окт 2010.

  1. Paganel

    Paganel New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2008
    Сообщения:
    9
    Возникла идея написания на GCC и fasm небольшой утилиты работающей в реальном режиме.
    Для объединения в один банарник решил компилировать асмовые файлы в .obj, однако столкнулся в проблемой в адресации.
    При использовани директив:
    Код (Text):
    1. format COFF
    2. use16
    с кодом
    Код (Text):
    1. width:
    2. add di,2
    3. mov al,0cdh
    4. mov [es:di],ax
    5. loop word width
    Выдаёт на последнее error: address sizes do not agree. хоть с директивой word хоть без. Однако при сбоке в формете binary всё проходит нормально. Отчего в coff loop нехочет адресовать 16 битный адрес?
     
  2. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Оттого что фасм не умеет OMF, а форматтер COFF делает только 32-битные и 64-битные файлы. Проще сразу взять насм и не мучаться.
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    iZzz32
    Я попробовал этот же код собрать в формате ELF -- та же ошибка. Есть ощущение, что FASM некорректно обрабатывает 'loop' в таком случае, т.к. собирать 16битные ELF'ы (для тех же целей, что и Paganel) у меня получалось, но 'loop', вроде, не использовал.
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    в коде выше не видать никаких зависимостей от выходного формата. киньте где нить перед int 3 и посмотрите во что оно скомпилилось-собралось
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если бы оно собиралось... Вот такой код:
    Код (Text):
    1. format ELF
    2. use16
    3.  
    4.  nop
    5.  add di, 2
    6.  mov al, 0cdh
    7.  mov [es:di],ax
    8.  xor eax, eax
    9.  nop
    собирается верно: префикс 0x66 появляется только перед 'xor eax, eax', как и должно быть. Не знаю, чем FASM'у 'loop' не нравится.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. org 0h
     
  7. Paganel

    Paganel New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2008
    Сообщения:
    9
    Там не только loop не работает, но и jmp и подобные ему.
    Поэтому как уже сказали прехожу на nasm - там всё нормально проходит.