Ответы пользователя по тегу Assembler
  • Какие программы для изучения Assembler установить на компьютер?

    @Mirn
    Любую среду программирования Си или плюсов понимающую дизасм и GCC.
    Я бы порекомендовал Eclipse и MinGW или GCC.

    Изучать ассемблер нужно только в контексте интеграции в языки типа Си.
    Иначе опять придётся "забудьте всё чему вас учили" и придётся изучать с нуля то что и как генерит си компилятор,
    а на -O2 и выше он генерит очень сильный код или очень дурной который и нужно исправлять и за это очень солидно платят, а не за поделки в 4к озу (если это не ардуино конечно).
    Ответ написан
    Комментировать
  • Assembler: Как найти максимум в массиве, используя mmx?

    @Mirn
    1. реализовать алгоритм на Си
    2. скомпилировать GCC или иным современным компилятором с включенной векторизацией и всеми оптимизациями.
    3. дизассемблировать или включить опцию показа промежуточного результата.
    4. посмотреть итог и убедиться что там есть MMX или SSE инструции
    5. обратить внимание на обработку краёв которые могут быть не выравнены или не попадать в ровно блок, массивов маленьких размеров меньше 16-4 элементов и прочие мелочи.
    6. обратить внимание на вызов этой твоей функции и как организуется стек, временные переменные, как передаются параметры, какие регистры функция нахождения максимума изменяет а какие сохраняет и как.
    7. попытаться безуспешно понять почему именно так.
    8. попытаться самому повторить результат на асме не глядя в результат компилятора и получить в лучшем случае в 2-3 раза худшее быстродействие если вообще отладить сможешь
    9. сделать вывод что страдаешь хернёй и использовать ассемблер для оптимизации столь тривиальной вещи полный дурдом и понять для чего асм всё таки нужен
    10. понять что асм нужен для системных вещей, и понимания почему у компилятора торомзит код а не пытаться писать велосипеды не умея оптимизировать под современные процы.

    для пункта 2-4 есть https://godbolt.org/#
    Ответ написан
  • С чего начать изучение системного программирования?

    @Mirn
    я заметил тег ассемблера, и вот что про него посоветую:
    не писать на асме, а писать на си и смотреть что получается на асме.
    Хорошие проекты на Си в области системного программирования это например ядро люникса или загрузчик uboot.
    Ассемблер в современном мире не язык синтеза, это язык анализа и очень редкого, всё можно сделать на голом си.
    Даже специфичные системные команды на ассемблере и их блоки уже сделаны в 99.9999999999999% платформах Си, их нужно просто вызвать и уметь ими пользоваться, вот тут и понадобиться умение ЧИТАТЬ на асме.
    Ответ написан
    Комментировать
  • При установке masm вылазит ошибка. Как исправить?

    @Mirn
    это означает что не найдена функция №200 и 202 в указанных дллках
    т.к. винда 2010+ года а дистрибьютив 1998 судя по консоли что не удивительно.
    советую искать решение в интернете по поводу этой дллки и масма.
    либо найти старую версию этой дллки.
    Ответ написан
    1 комментарий
  • Каковы перспективы программиста МК? Как обстоят дела на рынке Embedded?

    @Mirn
    перспективы есть,
    но есть три варианта:
    1. Совковые и гос предприятия. армия и тд, з/п до 40-60 тр в Мск СПБ. Отношение хуже некуда, привыкай сверхурочить до часу ночи по выходным. Тут может и пригодится асм.

    2. Частные предприятия ориентированные на наш рынок, в столицах их нет, в регионах есть, з/п средненькая, макс 1500 долларов за 10+ лет опыта работы и знание схемотехники и технологии. как там работается незнаю. Тут си и си++ под baremethal, редко FREERTOS. про именно написание на асме лучше не заикаться - красная тряпка для них, резюме сразу в корзину! - признак жуткого дилетантства.

    3. Аутсорс компании работающие в СПБ и МСК на запад, на старте з/п от 3т долларов если с опытом. тут всё шикарно, ДМС, доп выплаты, переработки правда есть, но не так много и дико как в п.1 но НУЖНО ЗНАТЬ АНГЛИЙСКИЙ ОЧЕНЬ ХОРОШО, а лучше БЕГЛО. А так же НАДО знать С++, DSP, асм полезен но только на чтение (спрашивают часто), Досконально знать gcc тулчейн, linux kernel и тд. Очень пригодится веб и джава и умения админить (не путать с эникейством). Заказчики тут мне попадались крупные, Интел, Аппл, Самсунг, Матсушита и Митсубиси, Тошиба. Да и очень рекомендуется иметь загран и отсутсвие косяков с визами.
    Ответ написан
    Комментировать
  • Откуда начинается стек у STM32?

    @Mirn
    в современных и вменяемых средах разработки всё задаётся явно прямо в исходниках и сразу видно где например лежит стек и как он подключается при запуске через таблицу прерываний.
    вот например смотри мою минимальную прога на нормальном Си в нормальной среде разработке, которая уделала все извращения на асме что были в статье.
    https://habrahabr.ru/post/274901/#comment_8738493

    расшифровываю
    __attribute__ ((section(".co_stack"))) - это атрибут заставляет положить массив для стека в секцию с именем .co_stack, а далее в LD файле (задаёт порядок компановки секций в прошивке и управляет адресами что куда ложить) указывается что эта секция должна идти после секции данных

    __attribute__ ((section(".min_isr_vector"))) - таким же образом даёт имя min_isr_vector, а в ld файле указывается что эта секция первая в прошивке и всегда идёт с адреса 0х08000000.

    стеку не нужна уменьшать на Х значение, если память заканчивается на 2020000, то в SP можно запихать 2020000. Потому что при команде push В НАЧАЛЕ уменьшается значение SP а потом уже кладётся по этому уменьшенному значению сохраняемые данные.
    Да и SP указывает на память и обязано быть кратным 4 (машинному слову, 20000FFF недопустимо!)

    Извините но Иар и Кейл не очень среды (но компиляторы в них хорошые, да), и поэтому надо пользоваться вменяемыми и не устаревшими в 90ых годах инструментариями. Тогда и вопросов не возникнет. вот в эклипсе с плагином CDT для си и с++ во всех примерах сразу сделано нормально выделение стека. А в последних вообще идеально. В Attolic и всяких RED от NXP так же хорошо всё сделали нарпимер, так что выбор среды по душе не проблема, надо только захотеть ;)
    Ответ написан
  • Программирование МК, ASM действительно на 30-40% эффективнее Си?

    @Mirn
    это не правда,
    делая отлично всякую мелочь ручками на асме упустишь всё остальное, т.к. оптимизируешь что-то одно, а в целом выйдет коряво.
    Современные же компиляторы и в целом и в частностях срабатывают получше людей, они делают хорошо сразу всё, пусть не идеально но сразу всё хорошо. Т.е. может один вызов или цикл сделают на 1-2 такта побольше и на пару байт побольше человека, но в общей картине выходит порой В РАЗЫ меньше и быстрее чем человек.

    Высказывание автора про 30-40% хуже можно объяснить только тем что в начале 2000ых для МК компиляторы были не развиты. Теперь же на арм gcc выдаёт отличный код который уделывает даже мастера асма который старался написать минимальную прогу на асме и доказывал что только на нём это можно сделать.
    НО я взял просто gcc и просто и тривиально в лоб написал прогу и она сразу вышла меньше чем результат его статьи
    https://habrahabr.ru/post/274901/#comment_8738493

    вывод: упор на асм и такие заявления в современном мире равноценны признанию в своей некомпетентности.
    А асм сам выучится по практике. главно на СИ уметь писать хорошо и знать язык и компилятор отлично.
    Одним Си обойтись можно. И даже нужно! Хотя-бы потому что надо в начале изучить что-то одно а не научившись ходить записывать в мировую олимпиаду. Многие люди кодят на си не зная асма и проблем не имеют ни с быстродействием нисчем другим.
    Ответ написан
    1 комментарий