Варианты определения размера сегмента

Тема в разделе "WASM.ASSEMBLER", создана пользователем Barbos, 26 фев 2008.

  1. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Наверное самый распространенный способ определения размера сегмента это в конце сегмента расположить метку. Еще, думаю, можно сыграть на порядке расположения сегментов. Работая с пакетом TASM заметил, что размер сегмента возращает выражение offset <имя сегмента>. Т. е. не надо никаких меток и заботиться о том, что бы после метки небыло никаких объявлений этого сегмента. Но эта фича не прокатила в MASM. Кто как действует в подобных ситуациях? Существуют ли в MASMе подобные лаконичные решения?
     
  2. AshBone

    AshBone New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    101
    Barbos

    Что ты вообще понимаешь под "размером сегмента"?
     
  3. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Длину сегмента, адрес байта, лежащего сразу за концом сегмента, адрес последнего байта в сегменте. Т.е. все, что может помочь определить, где сегмент заканчивается.
    Вот тут перелистал ман по MASMу, подобные директивы size, sizeof, length, но жаль, что они не применимы к сегментам. Если это действительно из области фантастики, то думаю отыграться на порядке расположения сегментов в exe, а именно, после сегмента тех же данных прописать сегмент нулевой длины и отталкиваться от его адреса.

    Просто сборка делается из нескольких OBJ и мелких ньюансов надо бы допустить минимум, дабы избавиться от возможной головной боли людей, а главное - себя самого.))))
     
  4. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    а вот я щас сам не могу уже вспомнить, в каких текстах у меня получалось с выражением offset <имя сегмента>, и действительно ли это было с TASMом.


    .............
    нашел, и происходило это с MASMом%)
    в архиве.
    под дебагером видно что значения, загружаемые в регистры соответствуют значения в поле LENGTH, что в MAPе.

    А вот при зборке exe из нескольких объектных этого не получается
     
  5. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    вобщем становится ясно, все зависит от того, где объявлены переменные, располагаемые в этом сегменте. Если сегмент собирается по кускам из разных OBJ, то и offset будет давать значение длины данных, объявленных в этом ASM файле. Вроде бы так получается.

    ЗЫ
    Сорри за беспокойство, видимо отпуск пора оформлять.