а может тогда это, дан код из дебаггера и написать ответ значение в регистре или памяти
Лучше уж сразу бинарь давать! Разумеется, не под интел
Это ты про язык ассемблера, наверное. Чистый ассемблер это то, что мнемонику в опкод гоняет. И эта грань расплывается, когда в программу, которая гоняет мнемоники, добавляются всякие директивы. Например, прежде всего, нужна директива или функция для генерации структуры исполняемого файла — PE, ELF и т.д. Это уже не относится к "чистому ассемблеру", и процент этой "чистоты" падает. Вот я и говорю, что FASM позволяет писать именно на чистом ассемблере.
Ну чистота конечно хорошо, но макросы - дело крайне полезное, важное и экономное
Да я и не спорю) для больших проектов самое то. Но для души иногда хочется и чисто без макросов писать. Хотя и большие проекты без макросов тоже писать можно, та же Kolibri OS.
под PIC, чтоб наверняка
Никогда не возникало такого желания. Напротив, большое желание нахреначить макросов и потом не возиться в шаблонных ситуациях
Например, по переводу числовых значений года, месяца, дня, часа, минуты и секунды в Юникстайм на этапе компиляции
таки нельзя, уже одного Вилли, который офсетами и магическими числами адреса записывал, хватило, до сих пор разгребаем
Так в данном случае без макроса и не получится ничего. Тут его обязательно использовать.
Получится. Если перекинуть вычисления на рантайм
Не, это не ответ. Нельзя так делать.
Ну в ЯВУ всё конструкторы классов в рантайме
С++ (g++, например) на O3 может класс вообще выкинуть и весь код в main запихать.
Ну это в порядке оптимизации, конечно
Но всё равно это будет код в рантайме, на макросы он его не переведёт
g++? Тут уже смотря что подразумевается под рантаймом. Можно сказать, компилятор это и есть макрос, который там вычисляет константы и переводит. Например, atoi('0') он может убрать, и поставить там константу 0x30, чем не макрос?
А если я определю класс, принимающий в качестве аргументов конструктору 3 значения и выдающий в единственное поле их произведение, а потом инициализирую 3 непосредственными значениями
Скорее всего, заоптимизирует это всё в одну константу, если вообще весь код не посчитает как бесполезный, и удалит)))
invoke это макрос или директива асма?
В х64 его нет, кстати😁
Что б я знал. Конкретный пример можете показать?
Это в фасме, или где?
Ну, конечно.
Пишут макрос: The invoke macro does the same, however it calls the procedure indirectly, through the pointer labelled by the first argument.
Для меня это вообще не очевидно. У меня другой контекст инвока
эт для проверки понятия 'чистоты' асма. твое предположение?
Предположение, что споры о чистоте расы асма довольно бессмысленны.
Наверное, суть была в том, у FASMа всё, что не относится к мнемоникам (и даже format !!!!) это макросы внешние, поставляемые с .inc файлами. Так что FASM из коробки практически ничего и не может, кроме как мнемоники гонять в опкоды — чистый ассемблер. А вот в MASM сразу с ходу PROC это директива вшитая в сам MASM, и в других популярных ассемблерах так же.
Когда пишется какой-то PIC-код, ты начинаешь ценить чистоту того или иного ассемблера. FASM для написания шеллкодов, патчей как раз отлично подойдёт. Ну, и опять же, для других целей тоже вполне можно использовать))
Я рад, что в вашей практике он так удачно применяется! В моей практике существует только гнушный ассемблер (и некоторая экзотика по типу план9 ассемблера или e2k)
а где о e2k можно почитать(ну там опкоды, команды) без nda ?
https://t.me/ChatAssembler/109433
Обсуждают сегодня