Господат такой вопрос, после компилятора файл программы например для какого нибудь мк заливается в виде машинного кода или в виде шестнадцатиричных значений? Если в виде хекса, то какая часть в процессоре отвечает за декодирование например опкода 3E который назначен инструкции mov например? Я правильно понимаю что некий дешифратор, берет из области программы значение(опкод) 3E, дешифрует его получая 111110 и сравнивает со всеми машинными значениями из таблицы с инструкциями которые закладывает завод?
Комментарии: 81
Lexx
как по-твоему выглядит машинный код?
Kingleonide
1/0
Lexx
за декодирование отвечает декодер микрокоманд
Byte
После компилятора идёт ещё и линковщик ;) Заливается бинарь, само собой. hex-файл чуть удобнее для программатора и программиста, можно сразу адреса загрузки указывать.
Lexx
в общем случае декодер работает несколько сложнее, например x86 имеет инструкции разной длины
Kingleonide
Не не, я тогда уточню, то есть компилятор минует условно ассемблер, как бы глупо не звучало, что у нас нигде нет mov/load, то есть уровня абстрации в виде ассемблера, компилятор СИ сразу генерирует нам абстрактный файл с опкодами 3A 3C CC ...
Lexx
зависит от компилятора же ты чего хочешь в итоге?
Byte
Ассемблер — это для людей :) Вот, с ходу первое, что нашлось. Стоит почитать, думаю: https://i2hard.ru/publications/24825/
Kingleonide
Вот именно что для людей, но си тоже для людей))) Обе абстракции дают конечный результат в виде чего, в виде машинного кода или в виде команд?
Byte
В виде набора битов, которые дальше процессор интерпретирует в зависимости от контекста. Пачка опкодов/данных.
Sergy
в итоге должен быть машинный код. в каком-то из форматов исполняемого файла для прошивок это чаще bin, hex, elf есть ещё win32 pe, a.out, elf и много чего
Kingleonide
Во-во-во
Lexx
почему не может? если не брать в рассчет кишки каждого процессора, то опкод и есть минимальная инструкция
Byte
Не путай формат исполняемого файла, который завязан на ОС, с набором инструкций процессора ;)
Kingleonide
речь идёт про bin/hex
Lexx
в cisc арзитектурах оно еще в микрокоманды транслируется и вообще
Byte
HEX (в текстовом, читаемом глазами виде) — для удобства программиста. В итоге всё равно в МК льётся то, что в bin. Грубо говоря ;)
Kingleonide
Взять любую программу под МК, имеем листинг из опкодов в виде *.bin файла, есть другая сущность которая прольет в память этот листинг. То есть в памяти у нас будет Во шикарно То что и хотел узнать, а потом процессор уже собственно эти микрокоманды трактует как гласит то архитектура
Lexx
в памяти будет массив бит которые кодируют опкоды конкретного процессора. процессор из читает и выполняет
Kingleonide
Вот я это и хотел узнать Просто посетила мысль, что якобы есть компилятор а есть ассемблер, и посути они не должны пересекаться, должны сразу выдавать конечный результат в виде опокодов уже
Lexx
ассемблер это когда ты опкоды руками пишешь, условно
Byte
Нет ;)
Lexx
нет, но если на пальцах объяснять
Kingleonide
И по сути в *.bin/hex у нас хранится листинг опкодов
Sergy
не листинг, а сами они
Byte
Да. Ну вон я ссылку выше кидал, всё-таки стоит ознакомиться ;)
Lexx
совсем просто если
Sergy
> имеем листинг из опкодов в виде *.bin файла неа, там уже чисто машинный код без всяких окодов, опкоды это как раз тоже для людей придумали)
Kingleonide
Всё всё, вопросов больше не имею, спасибо всем за ответы!
Kingleonide
Не не, опкод - он же код операции, байт По крайней мере я так думаю B8 - опкод
Byte
Да. Равно как и 90 — nop, 74 — je и т.д.
Kingleonide
Просто с другом речь зашла по поводу того почему Arduino IDE не оптимизирует код и скетч так много весит Сравнивая с например с Avr GCC
Lexx
АХАХАХА gcc и ардуино иде
Sergy
это уже дрогое)
Byte
Потому, что куча кривых библиотек используется ;)
Kingleonide
Я понимаю, просто начали разбираться с сущностью компилятора)) там уже почитали что к чему
Lexx
gcc намного сложнее и абстрактнее чем код в опкоды в отличие от
Sergy
там просто более толстые библиотеки и больше кода набросано и нету прямого доступа к флагам оптимизации) при том что arduino ide сейчас и так использует avr-gcc)
Kingleonide
У кого нету доступа к флагам оптимизации?
Sergy
в arduino ide из коробки)
Kingleonide
Но если он использует avr-gcc почему нет доступа то?
Lexx
я сколько кода для ардуины видел - там пин-хуин повсюду
Sergy
потому что в меню у вас этого нету из коробки)))
Lexx
а зачем тебе доступ из игрушечного редактора? собирай из консоли как душе угодно
Kingleonide
Так в том то и проблма))))))))) Сложно разрешить юзеру управлять более тонкими настройками компилятора? Да просто интересно стало, не так же и сложно, в той же этой
Sergy
сложно объяснить зачем это ему нужно)
Lexx
какому юзеру? студенту с лабой по миганию светодиода что ли?
Byte
Ардуинщикам это не нужно. Не влезло в память — берём ардуину с МК пожирнее, всё.
Kingleonide
Algorithm Builder вроде есть доступ к управлению флагами оптимизации из иде Могу ошибаться*
Lexx
какой кошмар, боже
Kingleonide
Я вообще мимокрокодил, просто для общего развития
Sergy
так это почти asm, просто графический)
Lexx
моя очередь ебанутых вопросов
Sergy
проблема инфраструктуры в ардуино ide зашёл в библиотеки, вбил в поиск, нашёл что надо и используешь для чистого avr-gcc разберись с Makefile найди подходящую библиотеку, потом на середине работы пойми что она не работает вообще и надо другое искать разберись с avrdude и куча всего в итоге среднестатистический новичок на 2 или 3 пунке "да ну его это всё нафиг" и всё)
Lexx
периферию инициализируй, кому оно надо
Sergy
чё?)
Lexx
байтики по регистрам раскладывать чтобы пины-хуины завелись в нужном режиме
Sergy
так не только ж пины нужны. и не только переферия
Lexx
так вот: попытка генерить противофазные импульсы для подавления низкочастотных (относительно) помех в БП через ЦАП/АЦП - это совсем дебилом быть?
Maxim
Это очень... Нетрадиционный подход. И это говорит парень с радугой в нике, а это о многом говорит. Сгенерировать сигнал той же амплитуды, но сдвинутый на 180 градусов в принципе можно, но это какой-то сложный способ выстрелить себе в ногу..
Lexx
я все прекрасно понимаю =) я хочу поиграться с ЦАПами, придумал упражнение
Sergy
тогда делай)
Lexx
потому что все равно гитара фонит как пидараска от обычного БП, а RLC-фильтры это скучно
Maxim
Вопрос в том, сколько такое решение принесет с собой проблем в схему. Я бы предложил в качестве упражнения с цап-ацп традиционную задачу - например построение самодельного следящего привода
Lexx
ты про ультразвуковой локатор?
Maxim
Нет. Я про самую древнюю задачу: когда есть электромотор, на его выходном валу стоит потенциометр и нужно используя отрицательную обратную связь получить следящий привод. Сервопривод. Чтобы он мог занимать некое положение вала и удерживать его
Roman
следящий за твоим пин хуином это у тебя профдеформация, в любой непонятной ситуации делать сервоприводы
Maxim
Регулятор это уже способ коррекции, не обязательно пид использовать) Согласен, но почему бы и нет
Roman
лучше нет
Maxim
Лучше Da!
Lexx
еще попытка: это про пид-регуляторы?
Roman
бля
Roman
это про то, что надо разобраться с питанием твоей балалайки, а не цап царап делать ебать, у меня -31
Lexx
а вот это интересно ю_ю
Sergy
человек спрашивает про итоговый результат работы компилятора
Sergy
есть компиляторы, которые могу и asm генерировать
Lexx
если в общем случае, то да, компилятор отливает абстрактное синтаксическое дерево в конкретную последовательность опкодов целевой архитектуры. внутри может быть любое количество шагов преобразования
Kingleonide
Ну то есть в виде машинного кода, то есть по сути, абстрактная прошивка должна содержать в себе машинный код, последовательность нолей или едниц
Lexx
курсач пишешь что ли?)
Kingleonide
Не не, для общего развития, в целом то все понятно, но вот задумался о том что компилятор же на выходе дает листинг опкодов, а процессор не может понимать в лобовую опкоды
Byte
Именно ТОЛЬКО опкоды он и понимает :)