Выравнивания

Тема в разделе "WASM.ASSEMBLER", создана пользователем bug1z, 4 фев 2012.

  1. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Добрый вечер. Объясните, пожалуйста, зачем в ассемблере нужны выравнивания и когда их стоит использовать?

    Спасибо.
     
  2. valentin_p

    valentin_p New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2011
    Сообщения:
    382
    выравнивания секций?
    \masm32\bin\Link /SUBSYSTEM:WINDOWS /ALIGN:16 "1.exe"
    для уменьшения размера ?)
     
  3. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Макрос ALIGN, для выравнивания данных.
     
  4. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    есть еще выравнивание кода и выравнивание данных
    нужно для повышения перфоманса, т.к. физически память читается рядами по 16 (вроде как) байт и помещается в кеш - поэтому имеет смысл выравнивать данные, чтобы уменьшать кол-во обращений к памяти.
    Выравнивание кода - примерно то же + оптимизация загрузки конвейеров процессора.

    Примерно так... подробнее пускай знающие люди расписывают
     
  5. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    Нужно что ничего не отвалилось. Ибо всюду проверки на выравнивание, да и не только програмные. Кое что хардварно вызывает фолт при кривом стеке.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    bug1z
    Если не знаете, значит оно вам не надо.

    scf
    Нагородили.
     
  7. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    я хочу узнать. когда то, ведь, может понадобится. буду признателен за доступный ответ.
     
  8. shufps

    shufps New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    10
    Оставлю тут для истории ;) . Длинные nop - до 11 байт включительно. Границу легко можно выровнять, например до 32 байт, современные камни могут обрабатывать от 3х и более nop-ов за такт.
    Код (Text):
    1. NOP1_OVERRIDE_NOP TEXTEQU <DB 090h>
    2. NOP2_OVERRIDE_NOP TEXTEQU <DB 066h, 090h>
    3. NOP3_OVERRIDE_NOP TEXTEQU <DB 00fh, 01fh, 000h>
    4. NOP4_OVERRIDE_NOP TEXTEQU <DB 00fh, 01fh, 040h, 000h>
    5. NOP5_OVERRIDE_NOP TEXTEQU <DB 00fh, 01fh, 044h, 000h, 000h>
    6. NOP6_OVERRIDE_NOP TEXTEQU <DB 066h, 00fh, 01fh, 044h, 000h, 000h>
    7. NOP7_OVERRIDE_NOP TEXTEQU <DB 00fh, 01fh, 080h, 000h, 000h, 000h, 000h>
    8. NOP8_OVERRIDE_NOP TEXTEQU <DB 00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h>
    9. NOP9_OVERRIDE_NOP TEXTEQU <DB 066h, 00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h>
    10. NOP10_OVERRIDE_NOP TEXTEQU <DB 066h, 066h, 00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h>
    11. NOP11_OVERRIDE_NOP TEXTEQU <DB 066h, 066h, 066h, 00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h>
     
    _edge нравится это.
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    shufps

    NOP содержит MRM, из за этого длина меняется. Причём это особая инструкция как LEA, она не производит выборку из памяти.
     
    shufps нравится это.