выравнивание в nasm

Тема в разделе "WASM.ASSEMBLER", создана пользователем Narkomanius, 4 янв 2005.

  1. Narkomanius

    Narkomanius New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2003
    Сообщения:
    144
    собсна задача объяснить насму инструкцию .align 32

    я пытался сделать это как 32-($ & 0x1f) но тварь пишет что вот низя &.

    посоветуйт как одолеть проблемму.
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    На сколько я понимаю процесс линковки, никак: -$ запрещён.

    В masm align 32 тоже не работает, пока что-то там с секциями не намудришь.



    Хотя можно попробовать уйти от абсолютных адресов (nasm не знаю):
    Код (Text):
    1.  
    2. label:
    3. .....
    4. reserve_bytes (32- ($ - label) & 31) & 31




    В fasm можно обойти ограничения, накладываемые на $ используя кодогенерацию:
    Код (Text):
    1.  
    2. macro   falign  value
    3.  {  virtual
    4.         inc byte [dword $]
    5.         load addrimm from $-4
    6.     end virtual
    7.     rb (value-1)-(addrimm+value-1) mod value
    8.  }
    9.  




    Хотя там есть возможности генерировать сразу бинарник, а не объектник, тогда можно использовать встроенный align с любым разумным параметром.
     
  3. MYT

    MYT New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2005
    Сообщения:
    1
    $ cat 1.asm

    db 0xCC

    align 32

    db 0xBB

    $ nasm -f bin 1.asm

    $ hexdump -C 1

    00000000 cc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 |................|

    00000010 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 |................|

    00000020 bb |.|

    00000021



    или я чёто невъехал?