Это что?
Набор инструкций, например на STM32 используется
По-умолчанию - нет.
Наверно только в fasmg что-то такое есть.
в gas вроде есть
В gas точно есть, но в gas нет макросов особо
Если в вашем ассемблере нет макросов, то даже не зовите меня в этот лоу-левел
Я ошибся, они там есть, но вроде куда хуже, чем в fasm
Сегрегация? Асм для белых?😊
Стандарты современных компиляторов должны быть высокими)
Зачем в gas макросы, если он используется в "с" как backend?
Например если нужно использовать его напрямую. Вот походу под Thumb2 придётся использовать именно его...
Зачем, если можно FASM?
Так там есть поддержка thumb2 или нет? Или есть в виде расширения?
В виде .inc можно добавить макросами, либо в FASMARM, вроде, есть.
У каждой вещи есть свое предназначение. Вот у задницы - предназначение - делать дефекацию. И не стоит у этой задницы искать другие применения.
В смысле как бэкенд?
На С весь код, а на GAS несколько строчек какой-то ерунды, для оптимизации, или для узких мест. Всё полностью верно, для этого GAS и создан - его использовать только совместно с С, иначе он бы не был вшит в С-компилятор.
Так в С макросы отстой
Они там и не нужны.
Ну допустим я хочу сделать функцию с переменным количеством аргументов и чтобы первым аргументом было количество. И вот мне на помощь придет макрос, избавляющий от необходимости их считать
что есть этот тумб2?
В С это без макросов делается, посмотри как там printf реализован.
Си выживает благодаря тому что он консервативен и практически не меняется лет 50. Ему есть модные аналоги, но вряд-ли они будут поддержаны в микроконтроллерах.
В принтфе тебе надо все равно количество аргументов считать
fasmarm поддерживает thumb.
Нет, там указывается что-то вроде int func(...), а внутри просто цикл уже по аргументам, и всё.
Набор инструкций
В таком виде не заведётся, нужно хотя бы один аргумент, относительно которого оно будет адресоваться, и в котором по совместительству обычно лежит размер или другая информация об остальных.
Я знаю, вот только количество аргументов не передаётся в таком случае
А, ну да. Там через функцию va_start. Собственно, вот и минус С - там всё через внешние функции, и остаётся молиться на компилятор, чтобы он эти функции мог завернуть в нативные элементарные пару инструкций.
и чем он так примечателен? почему его так выделяют? а если выделяют, то есть что то иное.
Там ещё и какой-то va_end для очистки памяти. Он память что-ли выделяет? В ассемблере это был бы тупо цикл по стеку.
Да ничем особенно, просто это набор инструкций, используемый на микроконтроллерах Cortex-M
А это не функция. Это макрос встроенный, он разворачивается в адресную арифметику, то есть в мовы и адды. Буквально mov eax,[base+counter+4]; counter += 4. Но это пока у тебя не регистры в 64-битной конвенции. Вот в 64-битах там боль. Но ты на асме тоже не сможешь магически регистры по индексу выбирать. va_end это потому что люди думали не только про x86. В каких-то архитектурах может понадобиться очистка, корректировка стека или ещё что-то. В x86 оно ничего не делает.
Привет, что ты там говорил про обфускатор?
А, ну тогда нормально.
Кстати, в x86_64 на ассемблере могу без выделения. Самомодифицирующийся код, в котором цикл добавляет индекс регистра к инструкции mov, а затем второй цикл уже по стеку.
Когда, где, кто?
Ты рассказывал, что это интересные проект, тогда я его испугался, но сейчас решил попробовать
И тут к тебе приходит форматная строка %d %f %d, и тебе нужно ползти в xmm. Ну и SMC это удар по производительности. И ещё отсутствие реентерабельности.
А как он выглядит
С XMM это да... Но можно выкрутиться. А вот про производительность интересно - что лучше - SMC, или выделение памяти и туда данные копировать.
Там не должно быть выделения памяти, можно ведь массив на стеке. Относительно дорогое только копирование.
Обсуждают сегодня