ALIGN

Тема в разделе "WASM.ASSEMBLER", создана пользователем K10, 20 дек 2008.

  1. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Вот такой стандатрный макрос из MASM32
    Код (Text):
    1.       literal MACRO quoted_text:VARARG
    2.         LOCAL local_text
    3.         .data
    4.           local_text db quoted_text,0
    5.         align 4
    6.         .code
    7.         EXITM <local_text>
    8.       ENDM
    Здесь директива align 4 служит для выравнивания local_text по границе в 4 байта?
    Почему тогда она после local_text, а не до?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    А может для выравнивания кода или последующих переменных?
     
  3. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    twgt
    Ну вобще-то хотелось бы узнать :)
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    K10
    32-ух битный процессор при обращении по адресу "любит", чтобы он (адрес) был кратен четырем.
    Количество байт занятых под local_text может быть любым. Добавляя align 4 в конце макроса, автор решает задачу обеспечения кратности четырем, адреса, следующего за local_text.
     
  5. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    q_q
    Ну а сам local_text почему не выравнивается?
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    K10
    если он в начале секции то он и так выравнен, а если следует за таким-же макросом то его выравнивает предшественник - собственно фишка чисто стилистическая, предполагающая что байты определяются через макрос, дворды выравнивания не нарушают, а wordы не используются как нежелательный элемент в 32битном коде :)