1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Задание сегмента для кода

Тема в разделе "MASM", создана пользователем slesh, 10 мар 2012.

  1. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Использую компилятор от MS (ml.exe) Компилирую через ml.exe /c /coff /nologo /Zi /Fo data.obj data.asm
    Необходимо задать для функций не только сегмент, но и последовательность.

    К примеру на Си это задавалось через директиву
    Код (Text):
    1. #pragma code_seg(push, ".text$aaa1")
    2. функция 1
    3. #pragma code_seg(pop)
    4.  
    5. #pragma code_seg(push, ".text$aaa2")
    6. функция 2
    7. #pragma code_seg(pop)
    8.  
    9. #pragma code_seg(push, ".text$aaa3")
    10. функция 3
    11. #pragma code_seg(pop)
    А как такое задать на ASM ?
    К примеру можно задать что-то типа

    Код (Text):
    1. names segment
    2.  код
    3. names ends
    но важно именно задание последовательности. т.к. потом полученный obj будет цепляться к Си программе и функции из него должны будут идти в строгой последовательности с сишными функциями.
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.552
    Адрес:
    Russia
    Код (Text):
    1. nameseg1 segment
    2.  
    3. nameproc1 proc public
    4. nameproc1 enp
    5.  
    6. nameseg1 ends
    и так далее заменяя 1 на следующую цифирь
     
  3. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Rockphorr, это не подходит. Потому что не получится указать что-то типа

    .text$aaa3 segment
    код
    .text$aaa3 ends

    т.к. в последствии требуется чтобы при креплении данного obj файла к Си программе, код его находился после определенной функции
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.552
    Адрес:
    Russia
    slesh
    может ваши нужно указывать не в имени а в классе сегмента ????

    Код (Text):
    1. text segment para public "текст$ааа"
    кататак - надо смотреть чему эквивалентна .text
     
  5. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Всё решено. Надо было лучше MSDN читать )

    Код (Text):
    1. .686
    2. .model  flat,c
    3.  
    4. code    SEGMENT  ALIAS('.text$aaa3') 'code'
    5.  
    6. myproc proc public
    7.  // код
    8. myproc endp
    9. code ends
    10. end
     
  6. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    В принципе то всё пашет как надо, но вот почему-то под под x64 такое не катит. ml64 вообще отказывается принимать слово SEGMENT