Доброго времени суток, форумчане. Не подскажите ли мне более элегантный вариант сего - выравнивание по большей границе,Al, величины SZ... и чтобы работало по возможности Код (Text): macro AlignedSize ID*, SZ*, Al* { ID EQU ((SZ + Al-1) AND -Al) } sectorSize EQU 512 AlignedSize buffSize, 1024*1024, sectorSize и почему макрос не может быть т.н. R-value? ну, скажем, Код (Text): macro AlignedSize SZ*, Al* { ((SZ + Al-1) AND -Al) } sectorSize EQU 512 buffSize EQU AlignedSize 1024*1024, sectorSize ; ;buffSize = AlignedSize 1024*1024, sectorSize ;или так? благодарю.
asmfan Вместо equ лучше =, т.к. это числовая, а не символьная константа и будет обрабатываться позже. Философия макро фасма. Нет макрофункций. Обходится лишней строчкой: Код (Text): macro mymacro a { __mymacro = a xor 0xFF } mymacro 10h xored db __mymacro m_xored = __mymacro А код.. Как ни меняй, смысл всё равно тот же будет.
IceStudent, т.е. если правильно я понял, приоритет обработки макросов такой же как и операторов "EQU" и "=", поэтому мы не можем использовать результат обработки макроса препроцессором как R-val... так?
asmfan Тут дело совсем не в приоритетах. equ и = обрабатываются на разных стадиях компиляции. Но и не в этом дело, а в том, что написал IceStudent. Пример очень наглядный, imho.
всем спасибо! так то всё теперь понятно, но вот суть макроса, как простой подстановки вместо его имени - содержания, теряется. эхх... особенности)