Реализация ALIGN в MASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 29 авг 2011.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.878
    Стандартная реализация ALIGN ЧИСЛО в MASM предполагает заполнение от метки ALIGN_ЧИСЛО до адреса кратного ЧИСЛО кодом 90h, а если требуется заполнение, например нулями? В теории это должно выглядеть вот так
    Код (Text):
    1. db ((-$) and 11b) dup (0); align 4
    а на практике эта конструкция приводит к выдаче ошибки
    error A2026: constant expected
    Как правильно это выглядит на масм?
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Чего-то меня сомнения гложут. Если align в секции данных, оно нулями и заполняло всегда. Если в коде - то естественно нопами. Как-то не заострял на этом внимания, но вроде бы так. И это меня устраивало на 100%
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.878
    FatMoon
    не обращал внимание на align в секции данных, но у меня секция кода объединена с секцией данных и секцией импорта (вот такой я извращенец!), но всё-же, как написать рабочую конструкцию типа этой
    Код (Text):
    1. db ((-$) and 11b) dup (0)
    на масме без "error A2026: constant expected"?
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    ALIGN aligns ............................
    .........................................
    In a segment containing no instructions, the assembler pads each

    skipped byte with nulls (00h). In a code segment, the assembler
    inserts a no-operation sequence (not necessarily NOP instructions)
    to fill the gap.
     
  5. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Если секция кода начинается с метки start
    Код (Text):
    1. db (512-(($-offset start) mod 512)) dup(0CCh)
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.624
    Адрес:
    Russia
    Mikl___
    Код (Text):
    1. a=((-$) and 11b)
    2. db a dup (0); align 4
    попробуйте так
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.878
    Rockphorr
    спасибо, но, к сожалению, код вашего примера выдает следующие ошибки
    Код (Text):
    1. error A2006: undefined symbol a
    2. error A2026: constant expected
    конструкция s_d_f рабочая, вот ее "косметическая" доработка
    Код (Text):
    1. db ((start - $) and 511) dup(0CCh)
    Спасибо всем кто откликнулся!