ALIGN

Discussion in 'WASM.ASSEMBLER' started by K10, Dec 20, 2008.

  1. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    Вот такой стандатрный макрос из MASM32
    Code (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

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    1,494
    А может для выравнивания кода или последующих переменных?
     
  3. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    twgt
    Ну вобще-то хотелось бы узнать :)
     
  4. q_q

    q_q New Member

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

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    q_q
    Ну а сам local_text почему не выравнивается?
     
  6. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    Joined:
    Sep 6, 2006
    Messages:
    2,494
    K10
    если он в начале секции то он и так выравнен, а если следует за таким-же макросом то его выравнивает предшественник - собственно фишка чисто стилистическая, предполагающая что байты определяются через макрос, дворды выравнивания не нарушают, а wordы не используются как нежелательный элемент в 32битном коде :)