Грабли с форматом COFF

Тема в разделе "WASM.ASSEMBLER", создана пользователем Rockphorr, 4 сен 2006.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Попробовал откомпилировать DOS исходник программы "Привет Денис Ричи" с ключем /coff
    ML ругается на фрагмент
    ...
    Start:
    mov DX,seg mymess ;<-- error 2004
    ; конфликт типов
    mov DS,DX
    lea DX,mymes
    ...
    mymes BYTE 'привет денис ричи',$

    если заменить на
    mov DX,CS
    mov DS,DX
    то все будет тип топ
    в связи с чем вопрос как опрератор SEG работает при наличии /coff с данными ?
    (аналогичная опрация вычисления дальнего адреса процедуры прходит совершенно нормально)
     
  2. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    попробуй делать
    mov dx,SEG mymess
    push dx
    pop ds

    Конечно это длиннее, но если у тя ml глючит, то ТАК должно сработать... Кстати, насколько я помню в какой-то книге было написано что mov ds,что-то там под досом ВООБЩЕ не должно пахать
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    глючит именно строка
    mov dx,SEG mymess
    под досом без ключа /coff в командной строке все тип тип
    насколько я разобрался это из-за формата coff
     
  4. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    coff формат не позволяет прямых присваиваний сегментным регистрам. Сегментному регистру можно присвоить ТОЛЬКО содержимое другого регистра... Ну - или накрайняк через стек...