Возникла идея написания на GCC и fasm небольшой утилиты работающей в реальном режиме. Для объединения в один банарник решил компилировать асмовые файлы в .obj, однако столкнулся в проблемой в адресации. При использовани директив: Код (Text): format COFF use16 с кодом Код (Text): width: add di,2 mov al,0cdh mov [es:di],ax loop word width Выдаёт на последнее error: address sizes do not agree. хоть с директивой word хоть без. Однако при сбоке в формете binary всё проходит нормально. Отчего в coff loop нехочет адресовать 16 битный адрес?
Оттого что фасм не умеет OMF, а форматтер COFF делает только 32-битные и 64-битные файлы. Проще сразу взять насм и не мучаться.
iZzz32 Я попробовал этот же код собрать в формате ELF -- та же ошибка. Есть ощущение, что FASM некорректно обрабатывает 'loop' в таком случае, т.к. собирать 16битные ELF'ы (для тех же целей, что и Paganel) у меня получалось, но 'loop', вроде, не использовал.
в коде выше не видать никаких зависимостей от выходного формата. киньте где нить перед int 3 и посмотрите во что оно скомпилилось-собралось
Если бы оно собиралось... Вот такой код: Код (Text): format ELF use16 nop add di, 2 mov al, 0cdh mov [es:di],ax xor eax, eax nop собирается верно: префикс 0x66 появляется только перед 'xor eax, eax', как и должно быть. Не знаю, чем FASM'у 'loop' не нравится.
Там не только loop не работает, но и jmp и подобные ему. Поэтому как уже сказали прехожу на nasm - там всё нормально проходит.