One morning you wake up find out you have access to God’s developer console. What’s the first thing you do with this power?
Discussion
♦ 154 + W 479 & Share
^ BEST COMMENTS ▼
I like forks • 5h
hehe3301 • 7h
sudo rm -rf oceans/*/contents/
*.plástic
sudo rm -rf people/*/*.cáncer sudo rm -rf v
это ассемблер боиться его
Что то, что другое - очень, очень простые вещи, и освоить их нетрудно.
На них писать что-то крупное трудно. Именно из-за очень низкого уровня абстракции - код будет изобиловать(а в асме - состоять из) технических нюансов, в которых порой непросто проследить логику и понять структуру.
Но сами языки ну очень простые.
Потому что те, кто не понимают, как оно работает "в нутрях", порой пишут такую дичь, от которой жопные волосы впиваются в кожу. Когда одним, совершенно не необходимым выебоном, могут добавить прогрессирующую просадку по производительности, просто не понимая, что они делают.
А то даже на микроконтроллеры без ОС, на их голое железо можно писать на чистом обычном Си если всё таки почитать эту чёртову документацию на gcc и освоить ld файл и секции компилятора. Аналогично можно оптимизировать по размеру без асма вообще. Впихнуть в 4к загрузчик с урезанным TCP и принтфом вполне реально для 32 битной машины. (я даже статью про это на хабре писал).
Может всё-таки для понимания как оптимизировать для игр, и тяжолых вычислений? разработки новых компиляторов и прочий хайтек?
Хотя в последний раз я ускорял нейросетку под рядовой не топовый десктопный CPU, на обычном Си, даже виноградную оптимизацию матриц не заюзал (да были тупо 2д циклы) и всё заработало с скоростью 100 гига умножений в сек. Блин что я не так делаю?
И самое главное: асм читать нужно уметь для того чтоб лучше понимать Си или иной компилятор. Это очень важно. Но проблемма в том что современные компиляторы дают такой код что навык ручного написания на асме можно выкинуть на помойку и начать учить асм заново. Особенно это важно для актуальных 16-32 битных и АРМ платформ.
Т.е. получается что когда люди пытаются изучить асм написанием на нём чего-то то они: 1. не изучают Си компилятор и просто поливают его грязью - нет навыка работы с си на уровне выше начального, 2. не могут потом почитать вывод си компилятора на -О2 и выше.
Зачем зря тратить время? лучше уж инлайн асм, инстринки, MMX, SSE ручную оптимизацию для OpenCV например и тд бы учили.
если писать то в контексте проекта на си или делфи и тд
поэтому поправка "лучше уж инлайн асм в другом языке типа си, пробовать использовать инстринки, делать оптимизацию для MMX, SSE и ручную оптимизацию для OpenCV например и прочие вещи лучше бы учили."
https://github.com/Mirn/Boot_F4_fast_uart/blob/master/src/sfu_commands.c#L229
начиная с 229 строки.
использовал либу CMSIS от производителя арм ядра - она есть на всех современных арм мк. и большая часть инстринков этой либы инлайнится в одну команду.
раскрутить стек тоже можно только на си
если передаются часть параметров экзепшена в регистрах то только тогда желательно впендюрить пару команд на асме (не все клоны gcc умеют в ручную привязку регистров и переменных без багов).
но прерывание экзепшена обычно есть во всех нормальных либах и делать его не нужно.
Чтобы запихать сколько-нибудь функциональную прошивку в камень с 1кб памяти
на голом си
на обычный не тюнингованный на мк gcc, который был скаченный с арм ком а не от производителя контроллера
размером в пол сотни байт
оно компилировалось и работало на любых клонах gcc под любые арм микроконтроллеры (не использовало узкую специфику или недок функции)
код был читаемым и очевидным.
код мог поправить любой ардуинщик
потрачено было минут пять на разработку
что я делаю не так?
это
я писал: сколько-нибудь функциональную прошивку
на асме дрыгать ножкой заняло бы два байта и конфиг для счётчика
Компилятор просто не знает, как оптимально скомпилировать определенный код, он делает "в общем случае", а производитель знает про железо то, чего не знает компилятор.
Просто надо изучать и копать доку на линкер ;)
Я так например вполне спокойно делал на голом Си такой кейс: разблокировка - когда надо записать ключ А, строго через N тактов записать ключ В в регистр.
Но если глючит железо то есть стопятьсот вариантов объода, от голого ножкодрыгания напрямую или через DMA до использования CPLD если сотни мегагерц и до FPGA если дрыгать ножками надо быстро (гигагерцы). Кстати HDL код всегда одинаково работает на любой платформе вплодь до такта и его уровень куда ниже асма ;)
Описанные тобою пляски с бубном вот ничуть не проще банальных ассемблерных вставок.
Ебстественно, именно вставок, а не целиком все на асме.
И ненавижу когда вставки на асме ломают логику работы например тем что портят содержимое флагов или non volatile register причём самое гадство что порят очень хитро, оно глючит изредко и сложно отлаживаемое а отлаживать часто мне. А происходит это потому что нередко те кто кидается в крайность только асма считают Си и прочие языки считают гавном, учиться стандартам, соглашениям не хотят и даже доку ниразу не читали на компилятор gcc.
Каждому инструменту своё.
И в этом тоже надо аккуратно. Бо я видел связку, где основная логика на питоне, взаимодействует по сети с сервисом на java, который вызывает нативные методы на си, некоторые из которых целиком из вставок на асме. Хотя, откровенно говоря, это было не самой стремной хуйней из виденного мною, и оно вполне работало.