Некоторые ассемблеры имеют разумную поддержку макросов, которая обычно работает внутри как препроцессор или очень близко к ней.
В противном случае, как я уже писал в комментарии, почему бы вам не использовать препроцессор C? (это автономный инструмент, вы можете препроцитировать любой текстовый файл с ним, просто используя #define
и другие, чтобы расширить ваш источник asm, остальная часть содержимого не должна выглядеть как источник C, препроцессор не заботится, он обрабатывает файл как [любой] текстовый файл).
Вам это нужно? Я бы не стал. Я сделал огромный код в ASM только из-за моего отсутствия опыта, а макропроцессор/препроцессор не спас меня от этой огромной ошибки (они, вероятно, просто сделают ее менее очевидной и несколько более терпимой в течение более длительного периода времени).
Пока вы делаете в ASM только небольшие кусочки кода по образовательным причинам или производительности/низкоуровневые вещи, макросы/препроцессор будут ИМХО добавлять слой абстракции, затеняя полученные инструкции, поэтому во время отладки вы можете попросить " откуда это взялось? ». Я предпочитаю писать каждую инструкцию ASM вручную, зная, почему я ее там помещаю, я не хочу никаких сюрпризов в коде ASM, уже довольно сложно писать бесплатный код в ASM.
Затем снова большая часть моей работы в конце ASM были 256B интро, так что я действительно должен был знать о каждом байте производится ... :)
В зависимости от используемого ассемблера. Это emu8086? Тогда я не знаю. Но большинство ассемблеров x86 не имеют препроцессора. Таким образом, EQU в таком случае оценивается по определению, а не заменяется. И я уверен, что на 99% это ваше дело. Для препроцессора не забудьте запустить какой-либо препроцессор компилятора C (или даже что-то автономное, но у меня всегда есть gcc, поэтому я бы пошел на C). – Ped7g
Ух, я понял. Есть ли что-то вроде препроцессора в сборке, мне это действительно нужно? – luka032
Только что отредактировал мой ответ, чтобы продемонстрировать, что EQU являются глобальными (EQU объявляется внутри процедуры). –