All streams
Search
Write a publication
Pull to refresh
49
0.1
Дмитрий @Int_13h

Пользователь

Send message
Вот, например, отреверсенная программа после С-компилятора, архитектура со стеком и всеми делами:
Извиняюсь за форматирование, у меня не работает кнопка исходный код, а хабр не умеет выравнивать ни табами, ни пробелами
LCD_WC_DB0
;FSR0 to Arg1
movf FSR2L, W, ACCESS
addlw 0xFE
movwf FSR0L, ACCESS
movlw 0xFF
addwfc FSR2H, W, ACCESS
movwf FSR0H, ACCESS
;W = Arg1
movf INDF0, W, ACCESS
andlw b'00000001'
bnz LCD_WC_DB0ON
LCD_WC_DB0OFF
bcf LCD_DB0 ;DB0 = 0
bra LCD_WC_DB1
LCD_WC_DB0ON
bsf LCD_DB0 ;DB0 = 1
LCD_WC_DB1
;FSR0 to Arg1
movf FSR2L, W, ACCESS
addlw 0xFE
movwf FSR0L, ACCESS
movlw 0xFF
addwfc FSR2H, W, ACCESS
movwf FSR0H, ACCESS
;W = Arg1
movf INDF0, W, ACCESS
andlw b'00000010'
bnz LCD_WC_DB1ON
LCD_WC_DB1OFF
bcf LCD_DB1 ;DB1 = 0
bra LCD_WC_DB2
LCD_WC_DB1ON
bsf LCD_DB1 ;DB1 = 1

Штуки КАПСОМ на всю строку без команд — это метки.

Так вот, задача функцыи простая: взять свой агрумент из стека в виде байта, в соответсвии с каждым битом из байта устарновить лог «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В подавалось на один из входов микроконтроллера.
PAUSE vs SLEEP были в QBasic vs TurboBasic. поэтому код не перносился без корректировки. Но зато QBasic быв в винде искаропки, а TurboBasic умел делать экзешники.
Это уже было:
в симпсонах
— Программисты — народ дефицитный, избаловались, а нам нужен небалованный".
— «Да, это сложнее», — сказал я. Горбоносый стал загибать пальцы: «Нам нужен программист: а — небалованный, бэ — доброволец, цэ — чтобы согласился жить в общежитии...»
— «Дэ, — подхватил бородатый, — на сто двадцать рублей».
— «А как насчет крылышек? — спросил я. — Или, скажем, сияния вокруг
головы? Один на тысячу!»
— «А нам всего-то один и нужен», — сказал горбоносый.
«А если их всего девятьсот?» — «Согласны на девять десятых».
Купить буржуйские чертежи и начать штамповать по ним продукцию — не, нельзя.

Чо сразу нельзя то? Куча примеров, когда именно так и делают.
Но если отвлечься от терминов«импортозамещения», то весь мир так делает. Покупает мировой бренд никому не нужную тайваньскую компанию со всеми потрохами и выпускает на мировой рынок ее достижения под своей маркой, рубя капусту.
Это я про силовую электронику сейчас.
image
Дешево, надежно и практично!
Да-да, ведь потребности у всех разные, и совершенно непонятно, как можно их уравнять.
Тоже хотел привести матриархат в пример, но погуглил и обнаружылось, что современные исследователи таки отрицают, что он некогда существовал.
Критикуя — предлагай. Может на книгах этого автора выучилось половина импортозамещенных АВР-щиков? Другой русскоязычной литературы раньше особо и не было.
Единственное, за что надо бить по пальцам — это делэи на лупах при времени задержки на порядки (десятичные) превышающие время машынного цыкла, да еще и с запретом прерываний. Для разовой программы это может и не страшно, но в качестве библиотечной функцыи — зло. И ведь это в каждой книжке для начинающих раньше было, от 8051 и до…
Ну почему нет практического смысла?
Сразу видно, как работают все эти ассемблеры-трансляторы-компиляторы.
Если в двоичный вид перевести опкоды — понятно, как декодер команд работает.
Без абстракций, даже макроассемблеров и символьных имен, более понятно, как процессор обрабатывает данные, куда их надо положыть и откуда забрать по исполнении программы.
И вообще ассемблер должен быть вторым языком у программиста, чтобы уметь думать, как машына.
Ожидал, что первая программа под Альтаир будет на том самом Бейсике.
У меня после 90ых синдром Плюшкина, но я еще не старик. Что же будет дальше?
Тогда ждем портрирования на простое РС железо.
Например m.habr.com? Отличий от не m. собственно никаких по ресурсоемкости.
Недалек тот день, когда операционная система будет не нужна как класс. Все ресурсы уйдут в монопольное пользование браузером и он будет и швец, и жрец, и на дуде игрец.
Идея для стартапчика.
Главное успеть ответить на этот комментарий, пока в треде меньше 100 комментов. Иначе процессор, подпинываемый браузером, не сможет обработать скрипты на этой странице :) Но тут даже видео, аудио и майнеров нет! просто сверстанный текст.
Строить коммунизм в отдельно взятой стране, это как заниматься сексом на Красной площади из анекдота. Но, в отличие от, замучают не только советами.
А если А, В и С не по порядку, а произвольные константы?

Information

Rating
3,614-th
Location
Россия
Registered
Activity