Aligning macro

Тема в разделе "WASM.BEGINNERS", создана пользователем asmfan, 27 окт 2006.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Доброго времени суток, форумчане. Не подскажите ли мне более элегантный вариант сего - выравнивание по большей границе,Al, величины SZ... и чтобы работало по возможности;)
    Код (Text):
    1. macro   AlignedSize     ID*, SZ*, Al*
    2. {
    3.         ID      EQU     ((SZ + Al-1) AND -Al)
    4. }
    5.  
    6. sectorSize      EQU     512
    7. AlignedSize     buffSize, 1024*1024, sectorSize
    и почему макрос не может быть т.н. R-value? ну, скажем,
    Код (Text):
    1. macro   AlignedSize     SZ*, Al*
    2. {
    3.         ((SZ + Al-1) AND -Al)
    4. }
    5.  
    6. sectorSize      EQU     512
    7. buffSize         EQU     AlignedSize     1024*1024, sectorSize  ;
    8. ;buffSize         =     AlignedSize     1024*1024, sectorSize    ;или так?
    благодарю.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    asmfan
    Вместо equ лучше =, т.к. это числовая, а не символьная константа и будет обрабатываться позже.

    Философия макро фасма. Нет макрофункций. Обходится лишней строчкой:
    Код (Text):
    1. macro mymacro a { __mymacro = a xor 0xFF }
    2.  
    3. mymacro 10h
    4. xored db __mymacro
    5. m_xored = __mymacro
    А код.. Как ни меняй, смысл всё равно тот же будет.
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    IceStudent, т.е. если правильно я понял, приоритет обработки макросов такой же как и операторов "EQU" и "=", поэтому мы не можем использовать результат обработки макроса препроцессором как R-val... так?
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    asmfan
    Тут дело совсем не в приоритетах. equ и = обрабатываются на разных стадиях компиляции. Но и не в этом дело, а в том, что написал IceStudent. Пример очень наглядный, imho.
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    всем спасибо! так то всё теперь понятно, но вот суть макроса, как простой подстановки вместо его имени - содержания, теряется. эхх... особенности)