masm32 макрос

Тема в разделе "WASM.BEGINNERS", создана пользователем MasmDX, 12 окт 2009.

  1. MasmDX

    MasmDX New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2009
    Сообщения:
    3
    Как сделать выравнивание данных в сегменте данных кратным 16?

    Директива align делает выравнивание на 4 байта.

    align 16 - так не работает.


    И как можно использовать макросы для этой цели? А конкретнее: как можно получить адрес, деленный на 16?

    например макрос:

    mac macro

    local a1,a2

    a1 = $

    a2 = a1 mod 16 ; остаток от деления

    endm

    так не работает. подскажите как нужно
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.628
    Адрес:
    Russia
    пишешь директиву segment c параметром выарарнивания para
    и сегмент выровнен на границу параграфа

    каждый word, dword, byte имхо бессысленно выравнивать на границу параграфа
    но для некоторых это делается добавлением
    byte n dup (?) где n подбирается вручную или рассчитавается макросредствами
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.628
    Адрес:
    Russia
    заставлять работать n=($mod 16) мне лень
     
  4. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.231
    MasmDX
    a2 = ($ + 15) & 0FFFFFFFF0h
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    В масм 6.14 работает и
    Код (Text):
    1.  align 16
    и
    Код (Text):
    1. a2 equ a1 mod 16
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Только все равно второе использовать нельзя для меток - только для констант.