Проблемка: WatcomC + NASM -> WatcomC + FASM

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

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    pyrodex
    спасибо за наставления что и как мне делать. переведите некоторую сумму на мой счет, чтоб я смог чуть больше уважать вас.

    впрочем, если вы потрудитесь максимально коротко и внятно описать вашу проблему, то на нее можно будет и ответить. однако, писать банальнейшие вещи, отлично описанные в стандартных доках, которые вы читать ленитесь и ради этого изучать насм, да еще и выслушивать какуюто абсурдную критику и требования в ответ на помощь..

    с чего я должен обращать на это внимание? впрочем, вот, переписываю выделенный в вопросе момент вашего примера на фасм

    push ds
    push es
    mov ax,dgroup
    mov ds,ax
    mov es,ax
    ; ..... некоторый код
    pop es
    pop ds

    вот копипаст экзампла отселе http://flatassembler.net/fasm168.zip


    ; fasm example of writing multi-segment EXE program

    format MZ

    entry main:start ; program entry point
    stack 100h ; stack size

    segment main ; main program segment

    start:
    mov ax,text
    mov ds,ax

    mov dx,hello
    call extra:write_text

    mov ax,4C00h
    int 21h

    segment text

    hello db 'Hello world!',24h

    segment extra

    write_text:
    mov ah,9
    int 21h
    retf

    хотя могу и ошибаться, тк понять чего вы хотите не просто, даже при оплате труда по пониманию вас

    вы довольны? я был достаточно краток? я не оскорбил вас длинными рассказами о какихтотам манглах?
     
  2. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    pyrodex
    нет не будет, не пробовал, но и не рассчитывал. просто привел соответствия NASM==FASM
     
  3. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    и там не большая опечатка mov ax, _data
     
  4. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    _basmp_
    мне кажется, что вы вообще не в танке) читайте внимательнее ветку.

    при директиве format MZ не допустима директива public (для чего директива public см. пост #1).

    специально для вас - мне нужно из фасма получить obj, чтобы потом приклеить его к основному коду написанному на WatcomC.
    Чтобы это сделать:
    1. нужен format coff, а не mz.
    2. формат coff допускает public и не допускает segment
    3. вместо segment использовать нужно section
    4. как при всём вышеперечисленном инициализировать ds es в теле прерывания.
     
  5. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    http://flatassembler.net/examples/msvc.zip
    вот экзампл похожий, но там нет инициализации ds es. В этом то и проблема.
     
  6. PowerASM

    PowerASM New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    59
    В каком режиме вы это собираетесь делать. Если в real, то можно просто вычислить линейный адрес данных, разделить его на 16 и запихнуть в ds и es, тогда все можно запихнуть в 1 секцию т.к. в реальном режиме аттрибуты учитываться не будут. Еще можете посмотреть формат OMF, если не ошибаюсь ватком его тоже переваривал.
     
  7. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    PowerASM
    я выше писал в каком. Всем лень читать всю ветку.
    В pmode. Использую расширитель доса pmodew (заменитель dos4gw).

    Конечно можно извратится и всё сделать, но хочется чтоб было красиво.
    Можно в код процедуры Init запихать сохранение селекторов ds es, а потом в теле прерывания восстановить.
    Но это не красиво. Вот поэтому и спрашиваю на форуме.
    Древний тасм умеет прекрасно справляться с такой задачей)
     
  8. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    pyrodex, личку глянь.
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    на стадии объектника неизвестно в какой сегмент (его номер) будет запихнута данная секция, поскольку по сегментам их распихивает линкер или линкер с лоадером, не помню как там в досе. те
    mov ax,dgroup
    сделать не получится.

    но в ваткомовских сорцах есть хорошие либы для работы с досом. и примеры наверно всего чего угодно. лениво смотреть

    кроме того, там по самому линкеру посмотреть, может есть чтото. дос мало интересен. ваша манера спрашивать - тоже
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _basmp_
    Вообще можно объявить метку в начале секции и грузить её в регистр. Меня больше интересует, как другие компиляторы проглатывают помещение в общем случае 32-битного релоцируемого адреса dgroup в 16-битный регистр. Я не знаю формата coff... наверное чего-то не понимаю. А в остальном весь приведенный фрагмент вполне реализуется в фасмовском coff-формате.
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    l_inc
    можно и так, токо выровнять и разделить ее на 16, как тут уже и предлагали выше, тк в досе сегменты только для расширения адресации. никакой защиты [0:16] == [1:0]. но мож ТС надо доступ ко всей дате. кроме того, абсолютные смещения будут другие.

    кофф тут ни при чем. просто на стадии компиляции в объектник неизвестно сколько объектников/либ будет линковаться и как и в каком порядке все это линкер соберет. хотя, у ваткомовского линкера куча всяких настроек. может, можно и адрес сегмента на метку проалиасить. смотреть надо

    тоже смотреть в декомпиле надо. думаю, что там чит с выравниванием и делением.

    в фасме много чего намудрить можно. когда мне в свое время не хватило функционала - дописал компилер. не особенно сверх оказалось

    вообще, ну этот дос. счас столько прекрасных осей. зачем вытаскивать дос, который и в свое время терпели только изза доступа к аппаратуре?
     
  12. pyrodex

    pyrodex Павлик

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    25
    хочу подвести итог-

    поставленная задача в посте #1 (собсна сабж) решается:
    на старичке тасме можно? можно.
    на насме можно? можно.
    на фасме можно? нет.

    всё ясно. спасибо за внимание.
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _basmp_
    Да ТС похоже сам не знает, что ему надо. А к какой "ко всей"? Через метку — это и есть "ко всей". А если имеется в виду, что в слинкованном образе потом могут быть эти же секции с адресами, меньшими этой метки... ну так что-то у меня большие сомнения, что какой-то другой компилятор тоже умеет получать подобные данные... разве что потом уже из заголовка экзешника (или куда там дос-загрузчик кладёт базы...) в памяти. Ну так это и на фасме элементарно делается.
    Ну и что, что другие? Линкер по релокам их исправит.
    Дык именно поэтому coff как раз и причём.