Штуки КАПСОМ на всю строку без команд — это метки.
Так вот, задача функцыи простая: взять свой агрумент из стека в виде байта, в соответсвии с каждым битом из байта устарновить лог «0» или «1» на выходе микроконтроллера.
Имеем после компилятора: используется косвенная адресацыя, установили указатель на аргумент (6 команд, т.к. архитектура 8 бит, а указатели — слово), поместили в аккумулятор, наложыли маску в соответствии с целевым битом (2 команды), в зависимости от значения установили лог «0» или «1» (4 команды). И так 8 раз — для каждого бита, итого 12х8=96 команд (192 байта памяти).
Как бы это выглядело на ассемблере: установили указатель на агрумент (6 команд, но можно упростить до 3х, если учесть что старшая часть адреса неизменна), поместили аргумент в память (2 команды), потом 8 раз: сдвиг на 1 бит (1 команда) и установка «0»/«1» по результатам (4 команды, но можно и в 3 соптимизировать). Итого 6+8*(1+4) = 46 команд или даже 39 после простой оптимизацыи. Или 92 и 78 байт памяти соответственно.
В итоге в отреверсенном коде из 11 кБ половина — это всякие прыжки указателями вокруг стека в т.ч проверка в каждой функцыи по завершению, не вышли ли указатели за границы стека и их коррекцыя. И таким образом программу можно уменьшыть по размеру в 2 раза!
Конечно, есть подозрения, что это сделано бесплатной версией компилятора, не умеющей оптимизацыю, но в итоге этот код в продакшене.
Но заметьте, ресурс вроде как позицыонируется как технический, товарищи тоже техничсеки подкованы и могут много пользцы принести ресурсу своими знаниями, а им сливают карму затыкают рот по политическим мотвиам.
Можно было бы просто отключать систему премирования и депремирования в политически острых статейках с минутой заботы от НЛО. Иноаче никакой плюразлизьм мнений невозможен.
Вспоминается недавняя история. Прислали мне платы для модернизацыи оборудования. Втыкаю по инструкцыи, подаю питание, слышу взрыв и запах. Открываю корпус — в микроконтроллере явная дырка, а не технологичнское отверстие.
Ну, оборудование с платой на завод (хорошо, оно небольшое, а не шкаф под тонну весом). И рекламацыю по емэйлу.
Производитель оперативно, не дождавшысь оборудования, в ответ «это вы накосячили чего то, у нас в офисе лампочка работает нормально». Потом притихли.
Потом сообщают: приехало оборудование, берут со склана новую плату, втыкают — бабах! Ну не может такого быть! Берут еще одну плату — бабах! И так раз семь подряд. Потом, когда платы под рукой кончились, открыли конструкторскую документацыю :)
Оказалось все до банального просто. С новой ревизией плат поменяли распиновку шлейфа и при сопряжении старой и новой плат напряжение 12В подавалось на один из входов микроконтроллера.
PAUSE vs SLEEP были в QBasic vs TurboBasic. поэтому код не перносился без корректировки. Но зато QBasic быв в винде искаропки, а TurboBasic умел делать экзешники.
— Программисты — народ дефицитный, избаловались, а нам нужен небалованный".
— «Да, это сложнее», — сказал я. Горбоносый стал загибать пальцы: «Нам нужен программист: а — небалованный, бэ — доброволец, цэ — чтобы согласился жить в общежитии...»
— «Дэ, — подхватил бородатый, — на сто двадцать рублей».
— «А как насчет крылышек? — спросил я. — Или, скажем, сияния вокруг
головы? Один на тысячу!»
— «А нам всего-то один и нужен», — сказал горбоносый.
«А если их всего девятьсот?» — «Согласны на девять десятых».
Купить буржуйские чертежи и начать штамповать по ним продукцию — не, нельзя.
Чо сразу нельзя то? Куча примеров, когда именно так и делают.
Но если отвлечься от терминов«импортозамещения», то весь мир так делает. Покупает мировой бренд никому не нужную тайваньскую компанию со всеми потрохами и выпускает на мировой рынок ее достижения под своей маркой, рубя капусту.
Это я про силовую электронику сейчас.
Критикуя — предлагай. Может на книгах этого автора выучилось половина импортозамещенных АВР-щиков? Другой русскоязычной литературы раньше особо и не было.
Единственное, за что надо бить по пальцам — это делэи на лупах при времени задержки на порядки (десятичные) превышающие время машынного цыкла, да еще и с запретом прерываний. Для разовой программы это может и не страшно, но в качестве библиотечной функцыи — зло. И ведь это в каждой книжке для начинающих раньше было, от 8051 и до…
Ну почему нет практического смысла?
Сразу видно, как работают все эти ассемблеры-трансляторы-компиляторы.
Если в двоичный вид перевести опкоды — понятно, как декодер команд работает.
Без абстракций, даже макроассемблеров и символьных имен, более понятно, как процессор обрабатывает данные, куда их надо положыть и откуда забрать по исполнении программы.
И вообще ассемблер должен быть вторым языком у программиста, чтобы уметь думать, как машына.
Недалек тот день, когда операционная система будет не нужна как класс. Все ресурсы уйдут в монопольное пользование браузером и он будет и швец, и жрец, и на дуде игрец.
Идея для стартапчика.
Главное успеть ответить на этот комментарий, пока в треде меньше 100 комментов. Иначе процессор, подпинываемый браузером, не сможет обработать скрипты на этой странице :) Но тут даже видео, аудио и майнеров нет! просто сверстанный текст.
Штуки КАПСОМ на всю строку без команд — это метки.
Так вот, задача функцыи простая: взять свой агрумент из стека в виде байта, в соответсвии с каждым битом из байта устарновить лог «0» или «1» на выходе микроконтроллера.
Имеем после компилятора: используется косвенная адресацыя, установили указатель на аргумент (6 команд, т.к. архитектура 8 бит, а указатели — слово), поместили в аккумулятор, наложыли маску в соответствии с целевым битом (2 команды), в зависимости от значения установили лог «0» или «1» (4 команды). И так 8 раз — для каждого бита, итого 12х8=96 команд (192 байта памяти).
Как бы это выглядело на ассемблере: установили указатель на агрумент (6 команд, но можно упростить до 3х, если учесть что старшая часть адреса неизменна), поместили аргумент в память (2 команды), потом 8 раз: сдвиг на 1 бит (1 команда) и установка «0»/«1» по результатам (4 команды, но можно и в 3 соптимизировать). Итого 6+8*(1+4) = 46 команд или даже 39 после простой оптимизацыи. Или 92 и 78 байт памяти соответственно.
В итоге в отреверсенном коде из 11 кБ половина — это всякие прыжки указателями вокруг стека в т.ч проверка в каждой функцыи по завершению, не вышли ли указатели за границы стека и их коррекцыя. И таким образом программу можно уменьшыть по размеру в 2 раза!
Конечно, есть подозрения, что это сделано бесплатной версией компилятора, не умеющей оптимизацыю, но в итоге этот код в продакшене.
сливают кармузатыкают рот по политическим мотвиам.Можно было бы просто отключать систему премирования и депремирования в политически острых статейках с минутой заботы от НЛО. Иноаче никакой плюразлизьм мнений невозможен.
Правильно, по ГОСТу IEC 60947-5-1-2014, «конечный».
Ну, оборудование с платой на завод (хорошо, оно небольшое, а не шкаф под тонну весом). И рекламацыю по емэйлу.
Производитель оперативно, не дождавшысь оборудования, в ответ «это вы накосячили чего то, у нас в офисе лампочка работает нормально». Потом притихли.
Потом сообщают: приехало оборудование, берут со склана новую плату, втыкают — бабах! Ну не может такого быть! Берут еще одну плату — бабах! И так раз семь подряд. Потом, когда платы под рукой кончились, открыли конструкторскую документацыю :)
Оказалось все до банального просто. С новой ревизией плат поменяли распиновку шлейфа и при сопряжении старой и новой плат напряжение 12В подавалось на один из входов микроконтроллера.
— «Да, это сложнее», — сказал я. Горбоносый стал загибать пальцы: «Нам нужен программист: а — небалованный, бэ — доброволец, цэ — чтобы согласился жить в общежитии...»
— «Дэ, — подхватил бородатый, — на сто двадцать рублей».
— «А как насчет крылышек? — спросил я. — Или, скажем, сияния вокруг
головы? Один на тысячу!»
— «А нам всего-то один и нужен», — сказал горбоносый.
«А если их всего девятьсот?» — «Согласны на девять десятых».
Чо сразу нельзя то? Куча примеров, когда именно так и делают.
Но если отвлечься от терминов«импортозамещения», то весь мир так делает. Покупает мировой бренд никому не нужную тайваньскую компанию со всеми потрохами и выпускает на мировой рынок ее достижения под своей маркой, рубя капусту.
Это я про силовую электронику сейчас.
Дешево, надежно и практично!
Единственное, за что надо бить по пальцам — это делэи на лупах при времени задержки на порядки (десятичные) превышающие время машынного цыкла, да еще и с запретом прерываний. Для разовой программы это может и не страшно, но в качестве библиотечной функцыи — зло. И ведь это в каждой книжке для начинающих раньше было, от 8051 и до…
Сразу видно, как работают все эти ассемблеры-трансляторы-компиляторы.
Если в двоичный вид перевести опкоды — понятно, как декодер команд работает.
Без абстракций, даже макроассемблеров и символьных имен, более понятно, как процессор обрабатывает данные, куда их надо положыть и откуда забрать по исполнении программы.
И вообще ассемблер должен быть вторым языком у программиста, чтобы уметь думать, как машына.
Идея для стартапчика.