Ассемблер напрямую связан с твоей вовлечённостью в профессию. Если ты знаешь, как писать на ассемблере, значит понимаешь устройство процессора, памяти и всей системы ввода-вывода на уровне логики. Да, можно жить без этого и зарабатывать хорошие деньги, но эти знания расширяют твой профессиональный кругозор и может статься так, что когда-нибудь они пригодятся. Например, ты знаешь, что функция синуса требует около 200 циклов процессорного времени, но для твоей задачи можно синус заменить на более простую функцию, которая потребует 20 циклов без потери точности. И ты ускоряешь вычисления в 10 раз, что позволяет обрабатывать в 10 раз больше информации за единицу времени на гигантских объёмах. И всё это ты берёшь из подсознания, потому что вспомнил, что оно там в процессоре так на уровне железяки. В этом и есть профессионализм.
маркетингу это не выгодно , нужно же говно видюхи с памятью штамповать, за конский ценник пихать неоптимизированное железо и называть это прорывом технологии)
В этом то и разница между обычным любителем и настоящим специалистом. Старт изучения Ассэмблера, можно смело сравнить с красной таблеткой из матрицы. После которой, уже нельзя будет вернуться в исходную точку
Писать на ассемблере было искусством... когда тебе нужно уложить в 512 байт программу которая откомпилированная из Паскаля занимает несколько килобайт. Такую задачу решаешь несколько дней, это муки творчества и полёт мысли, это хакинг в самой чистой своей сути. Это было красиво.
Зачем в 512байт укладываться? Один сегмент - это 64к. Вот в 64к уложиться, это да, искусство. Кому интересно, можете загуглить "assembly archive demo" Ого, загуглил сам, там ещё 4к есть категория %) Не знал! А 512 байт можете пример показать? Я выше комментарий оставлял про книжку Хижняка, как в детстве с вирусами игрались. Как сейчас помню 132 байта там вирус по книжке выходил. Но Хижняк не дурак. Пока ассемблер весь не выучили - месяца четыре, короче, мы ътот вирус компилировали. А года через два осознал что вирус везде.. А потому, что без единой ошибки был в результате написан и его никто не замечал ;-) Ах, детство! p.s. вот в 32 байта оперативы уместиться, вот это искусство, да ;-) а 512 байт ни у кого нету. Ну если только другие 512 бутлоадером не заняты :-))
не "было" - соревнования всё ещё проводятся. это всё ещё невероятно красиво. и вот он вроде правильно говорит - "ассемблер нужно чтобы читать", но ассемблер - это такая вещь, что чтобы читать - надо уметь писать.
В качестве эксперимента я когда-то написал вирус для PDP-11, который с запасом вмещался в блок 512 байт. Такой гибкости в адресации операндов нет ни в одной современной системе команд! Писать на ассемблере тогда было просто удовольствие.
@@indratoue3717 если бы всё было так радужно, как Вы говорите, то x86 не появился бы ;-) А если бы дело было в богатстве способов адресации, то не появился бы RISC. А так как появились и тот, и другой, то смею предположить, что Вы лукавите. Моторола 68000 посмотрите, как программируется и сделайте свои выводы. P s. Я выше писал, мы в детстве играли с вирусом под x86 и DOS, там длина порядка 130 байт была. Гуглите "Хижняк вирус"
Надо было упомянуть, что мнемоники в Asm являются сокращениями от английских слов: mov - move cmp - compare jbe - jump below or equal ... Так проще запоминать
АССЕМБЛЕР -- это круто. Почти любой кто Вас увидит за ассемблером -- будет думать, что вы ломаете Пентагон :) А если серьёзно -- то в этом есть своя романтика, свой шарм. Да и просто самому приятно понимать хотя-бы на базовом уровне что да как работает. Спасибо за видео!
За наводку на "compiler explorer" благодарю. Глянул на ассемблер и в душе аж потеплело. Кодил на ассемблере простейшие игрушки в 92 году в 12 лет на ZX-spectrum (модификация Magic)
Разрабатывая на ассемблере программы для сигнальных процессоров Texas Instruments выработался очень полезный навык - ставить комментарии в каждой строке. Это только так кажется, что mov это переместить, а вот без комментария понять зачем этот mov сделан иногда не просто.
Получается весь ассемблер построен на GoTo? Это забавно учиться (не в вузе - так, для себя) программировать не используя эту "вредную" команду а потом узнать, что на ником уровне всё только на ней и построено 😀
@@Сергей-ч8б8н На низком уровне ты точно знаешь, куда именно в какой именно памяти переходишь. И прерывания сам обрабатываешь, знаешь, что в любой момент должно происходить. А так да, и прямые переходы, и даже прямое расписывание циклов ради экономии времени, и такую кошмарную вещь, как сохранение в служебном регистре процессора значения переменной без перезаписи в память писать приходилось...(хотя и циклы, и подпрограммы вполне можно и даже удобно реализовывать, но это "долго") И эффективное использование возможности процессора обрабатывать две некоторые специфические операции за один такт... Разумеется, это только регистровые операции могут быть. Фух, задача обработки сигнала в реальном времени в условиях, когда начальство жмотится на более мощный процессор - это забавная штука. Приходится считать каждый такт. Какая нафиг "асимптотика", если N операций ты можешь себе позволить, а 1,2 N - уже не можешь! Но это 20+ лет назад было
@@Сергей-ч8б8н GOTO - это аналог просто jmp (jump, «прыжок» без условий). А циклы и ветвления транслируются в код на языке ассемблера, использующий команды-«прыжки», но условные: je (jump if equal, «прыжок», если предыдущая команда сравнения двух чисел дала результат «равно»), jne (jump if not equal), jbe (jump if below or equal), десятки их.
Было дело, в 89-92 я написал и даже продал несколько копий графической библиотеки с драйверами, написанными на ассемблере 8086. Стояла задача превзойти по производительности библиотеку от Turbo (Borland) С и дополнить ее несколькими функциями. Результат был достигнут через примерно полгода. Все функции работали быстрее, причем некоторые аж раза в 2. Хуже всего обстояло дело с рисованием прямых - там разница была в доли процента. Если не ошбаюсь, я нашел способ избавиться от одного оператора сравнения в глубоком цикле.
@@hin200 как бизнес проект это была полностью провальная история :) Но приобретенный опыт и по части кодинга, и как первый большой проект, оказался бесценным.
@@hin200 в те годы любые библиотеки, компоненты и прочее публиковались на компакт дисках "всё для программиста" и вместе с компанией Борланд от такого пиратства страдали независимые разработчики. Причем Борланд так получила популярность в России, а независимые большинство сошли на нет ((
У меня друг етсь который юзает Асемблер (бизнес связанный с машинами), как он пояснял, потому что большинство современных брендов лочат свой лоулевел и прошивку компонентов, а также создают свой низкоуровневый фреймворк, на котором работает вся система- в том числе и отдельный фреймворк для работы с КАН-шиной, к которому нет доступа, чтобы этим могли заниматься только лицензированные сервисы- а использовать Ассамблер это по сути, костыль для обхода всех запретов
Самое главное в Ассемблере, - это знать архитектуру компьютера и операционной системы. 99 всех перемещений и вычитаний связаны с зарезервированной памятью, регистрами, особыми прерываниями ОС. Беда состоит в том, что преподавание ассемблера начинается не из изучения архитектуры, а из изучения самих команд.
Тут спорный вопрос тк какую архитектуру? К моменту выпуска студента все может поехать сильно. Надо и мнемоники и практику на что есть сейчас. А дальше если пойдет по теме, сам изучит, если не дибил. Яб ваще мк преподавал. Оно нагляднее и можно пощупать результат руками, а не байты гонять.
Мне довелось писать на ассемблере... и если честно идея "читать ассемблер просто" несколько далека от правды)) Особенно вот в таком формате листинга, но для этого есть много всяких крутых инструментов которые сильно упрощают процесс Кроме дебага у ассемблером пользуются когда нужно впихнуть "невпихуемое")) разработчики под микроконтроллеры иногда сталкиваются с задачей уместить весьма увесистый алгоритм в очень скромный ресурс контроллера и тут на выручку приходит сверхоптимизированный код на ассемблере и математическая магия)
2 года работал с микроконтроллерами и десктопы для работы с ними писал. Честно говоря ни разу не приходилось оптимизировать код чтобы он занимал меньше места, вопросы скорее к скорости выполнения кода, но вероятно это специфика именно моей задачи
@@darkcorn6059 под "увесистым" имелось ввиду все сразу, а не только размер К тому же, к счастью, это довольно редкий кейс и чаще всего результат ошибки на этапе проектирования или больной головы руководства (когда половина партии уже на складе, а кто-то решил еще какую-то фичу засунуть), специально таким никто заниматься не будет это банально экономически нецелесообразно Сам лично в работе никогда не сталкивался, но видел как коллеги сталкивались Ради интереса и прокачки скила пробовал реализовывать разные протоколы на 13-й тиньке, но это просто пет-проекты, а не производственные задачи.
Ну в сишном коде и сейчас можно встретить директивы со вставками ассемблерного кода, если ваш компилятор не поддерживает к примеру локи или вставки для реализации на разной архитектуре. Ну и понятно, что в Линуксе, в ядре, есть целый блок архитектурно-зависимого кода на асме
90е годы, кафедра вуза, гоняю в игру Дюна2. Приходит препод, поздоровался, ушел на лекцию по ассемблеру для мой группы. Чарез 2 часа, препод пришел с лекции, попрощался, ушел. Я режусь в дюну.😂 Ребята из параллельного потока а ахуе, спрашивают чо за??😮 Говорю, препод сам предложил не ходить, поскольку на асме я лучше него пишу и постоянно его ошибки исправляю! 😂
А я впервые с машины кодом познакомился, когда в Reunion играл, не мог пройти игру, сначала понял механику открытий, как сделать, потом играл с hex для денег и ресурсов, мои первые познания)
По поводу прошитых на безгрешность компиляторов кодеров это точно. Один решал задачки эйлера не мог понять где ошибка, я вскрыл асм листинг и указал на алгоритм и на то, что даже на O3 компилятор не оптимально использует регистры и делает много лишних пересылок. Один чел вылез и давай успорять, что это мол я не вижу, а компилятору виднее в итоге после недели тыков в куски кода и спецификации опкодов я тупо переписал всю задачу на ассемблере убрав лишние операции и просто очевидно показал, что я прав и так быстрее. Но чел не сдался и все равно уверял, что компилятор лучше знает. Такие дела.
А у меня XRay с включенной оптимизацией работает, ну это сталкер ТЧ, компилятор VS2010SP1. А если оптимизация выключена, то ловлю вылет, где баг, вообще не понятно, толи в коде, толи в компиляторе, вроде скрипты Lua выдают ошибку. Как известно, если знаешь где компилятор выдаёт ошибку, то эту проблему решаешь переделав код, то есть проблему обходишь. Но непонятно что выдаёт ошибку, но выход в данном случае, новый ПК, больше памяти, быстрей процессор и не надо выключать оптимизацию. Да, я выключал оптимизацию для ускорения компиляции.
@@LithiumDeuteride-6 у компиляторов есть фундаментальные особенности оптимизация которых возможна только правкой ассемблерного кода или правкой кода самого компилятора. В частности особенность использования локальных переменных. При работе с которыми в 90% случаев используются лишние операции чтения/записи. А у вас ошибку выдает скорее участок кода, который компилятор выкидывает при оптимизации или заменяет константой т.к. либо результат работы кода нигде больше не используется либо всегда равен конкретному числу
Можешь еще больше придавить его осознанием мысли что "оптимизировать" компилятор "научили" прогеры еще больше и еще лучше разбирающиеся в АСМе. Честно говоря создается впечатление что для таких люди считают что компиляторы прилетают с марса, что их никто не пищит а оптимизировать они умеют просто потому что их боженька такими создал.
@@LithiumDeuteride-6 Сдаётся мне, у вас в коде есть UB (undefined behavior), что для кода на C и C++ весьма типично. Компилятор всегда работает из расчёта, что программа написана в соответствии со спецификацией языка, и в этой спецификации какие-то операции являются недопустимыми и считаются UB. Оптимизации компилятора исходят из того, что в вашей программе UB нет, т.к. иначе вся программа формально считается некорректной, и действуют соответственно: любой код с UB может быть удалён или заменён на другой по усмотрению компилятора, т.к. его выполнение нарушило бы спецификацию.
Пишу иногда на ASM для МК. Основная сложность не директивы ассемблера, как сказал автор, тут всё достаточно просто и понятно. 99% работы - это изучить архитектуру процессора и работу с его регистрами.
Мне кажется Интел и АМД должны быть совместимы на уровне ассемблера. Мы же компилируем exe-файл, там машинные коды, а ассемблер это просто мнемоника машинных команд. Этот exe должен работать на любом x86 совместимом процессоре. На то они и называются совместимые. Почти уверен, есть несовместимые ASM-команды, для каких-нибудь оптимизаций итд. Подозреваю, что компилятор их не использует, если его специально не попросить. Но это только мои рассуждения.
@@iotone7525 вы путаете производителя и архитектуру. В данном случае речь, скорее всего, идёт об архитектуре x86 (или производных), а все процессоры на ней совместимы на уровне ассемблера (у них одинаковые регистры, система команд, флаги, методы адресации и т.п.), независимо от конкретного производителя
Писал на ассемблере программу для работы с картами (военное использование), сжатия графики и напрямую с видео памятью, интерфейс был похожий на Винду графический редактор объектов на карте, виды применяемого оружия, разрушения и радиация, заражение газами и бактериями, потоки воздуха, всё вмещалось в 34kb, начинал писать на 386 потом пришлось писать тормозилку иначе на пентиуме было всё очень быстро ) потом писал свой компилятор, помнил команды в 16 виде и мог написать простенький сом файл, сейчас пишу на Golang, Swift, Kotlin, PHP последний раз на низком уровне программировал контроллеры в 2006 году
На втором курсе задали учить асемблер для тмс320, очень хорошо улучшает понимание того, как вообще вся эта тема устроена. Были разные базовые микропрограммки с умножением, ветвлением и циклами, но когда на последней лабе нас заставили писать на машинном коде для симулятора vax машины, взвыли все. Пришлось вручную редактировать ячейки в памяти, листая в методичке мнемокоды. Какая-нибудь операция могла быть длинной в несколько вордов, а если добавить к ко всему этому разные варианты адрессации, весь процесс становился похожим на перевод китайского с бумажным словарем. Я уже не помню, как там правильно писать, но код выглядел примерно так : «B5 R3 45 C3 00 00 F1 11 FF». Ниже этого уровня только на двоичном коде прогать, наверное
"Столет" назад писал на ассемблере, что-то получалось, было интересно. Потом род деятельности пришлось сменить. Сейчас для себя пытаюсь разобраться с современными высокоуровневыми языками, и что-то не очень получается) Между железом и кодом появилась своя "прослойка" абстракции и знать как при этом на самом деле работает железо кодеру не очень то и надо, при этом этот "абстрактный уровень" каждый объясняет со "своей колокольни", иногда без понимания работы аппаратной части. Старые методы изучения прогерства не работают) Сдвиговые команды, запуск каких-то системных функций и проч. сразу бросились в глаза, хоть и прошло "столет", и писалось все под другие процессоры)
Не то, что не работают - они сегодня нахер не нужны 😂 Не конечно, ты можешь знать как работает процессор на самом низком уровне, но плюса это тебе в коммерческой разработке вообще никакого не даст. Ну разве, что твой лид будет просто уважать тебя (но таких лидов, с каждым днём становится меньше)
@@vvdvlas8397 так об том и речь. Ещё в эмбедед он нужен. Но это очень маленький процент рынка вакансий в принципе. Иными словами со знанием асма, можно очень долго работу искать, в то время как какой нибудь питонист или пхпешник будет кушать свой хлеб с икоркой. )
@@SergMirny_yt Видимо поэтому сейчас такое количество неоптимизированного комнософта, разработчики которого считают, что им "нахер не нужны" знания о работе железа. Исключений при компиляции нет, значит - "и так сойдет". Как раз-таки если лид не такой же "грамотный", то он то как раз предпочтет себе в команду шарящего за железо прогера, который будет писать исходя из понимания как оно будет работать в железе, а не очередного "вовки из тридевятого царства".
@@someone-user сразу видно, что вы не программист и вообще далеки от этого. Во первых, конечно от программиста требуется понимать какое действие будет "дорогим", а какое "дешёвым", в плане ресурсов/скорости. Но как это работает на уровне ключей и вентилей в процессоре - никому не нужно, это смешно. В конечном итоге программист вообще не знает на каком конкретном железе будет работать его программа а уж про контейнеризацию э, которая сейчас всюду - и говорить не приходится, прикиньте, что там программа работает вообще на виртуальном процессоре в виртуальной ОС 😁 Читайте внимательно по пунктам 1. Программирование решает вопросы бизнеса - это инструмент бизнеса 2. Написание продукта на фреймворка - это высокая скорость разработки продукта 3. Вытекающее из 2-го, пока вы будете писать свой супер мега оптимизированный код и вычищать в нем баги и допиливать его до состояния такого же какое обеспечит фреймворк - ваши конкуренты успеют уже заработать деньги на продукте и обанкротится, пока вы выкатитесь в продакшн 4. Вытекающего из 3-го - бизнесу гораздо дешевле арендовать мощнее сервер который покроет потребности работы сервиса чем содержать огромный штат программистов, который будет покрывать скорость разработки сравнимый с конкурентами пишущими на фреймворке. 5. Фреймворк обеспечивает стандартный код - это значит, что компания не привязана к программисту, вход (онбординг) нового программиста в проект происходит гораздо быстрее в случае стандартизированного кода фреймворка, нежели чем это будет самописный легаси, ОСОБЕННО если продукту много лет и что там написано уже никто не знает Как итог - не нужно думать, что вы самый умный, то над чем вы задумались лучшие умы от бизнеса и программирования переживали, переварили и высрали в виде оттестированных годами решений.
Очень адекватный ролик. Полностью согласен со всеми выводами. Сам в детстве с бейсика перешел на асм, и чувствовал себя властелином регистров. Потом была дикая ломка с переходом на паскаль, не знать что хранится в регистрах было невыносимо, хорошо в турбопаскать можно было миксить код и делать asm вставки. Но постепенно отпустило и и уже С и Срр, нормально без флэшбэков в асм использовались. В большом проекте как-то задействовали asm, что привело к 15 кратному увеличению скорости загрузки специфических ресурсов, но после это привело к тому, перевод проекта на другой процессор стопорнулся на этом коде и нужно было или достичь такого же эффекта используя другой процессор или выкинуть этот код, выкинули. Язык для чтения это классный вывод!
Ничего не понятно, но очень интересно ) В советском вузе для общего развития учили бейсик, фортран и ассемблер на УМК-80 на КР580ВМ80А - советских аналогах i8080. "Интеграл мне пригодился всего один раз в жизни. Когда я уронил ключи в унитаз, то сделал из проволоки интеграл и достал ключи с его помощью". Впрочем я и не программист )
Впрочем, человек из анекдота мог и не понять, что можно изогнуть проволоку, если бы ни разу не увидел интеграл. Так что действительно помог. Ученье свет))
В университете был курс по компиляторам (до этого уже трогали ассемблер в курсе по архитектуре). Вот это было больно. Писали с абсолютного нуля для выдуманного ограниченного языка (буквально if, else, while, for, print и булины с обычными операторами), спасибо что хотя бы ядро делали питоном, иначе уже на стадии парсинга и лексинга увязли бы поуши (кроме PLY вообще больше ничего не использовали) . В конце даже делали оптимизации control flow graphs, dataflow, register allocation и тд. Счастлив, что это прошло как страшный сон уже, и я вряд ли когда то к этому вернусь (сейчас занимаюсь написанием алгоритмов для математических инструментов в julia), но как опыт было невероятно полезно. Бесконечный респект типам которые серьезно писали и пишут на лоу лвл языках, чтобы мы могли абузить обычные языки и ни о чем не думать)
Раньше, часто делал ассемблерные вставки в c++, чтобы оптимальнее сопроцессор использовать для сложных циклических вычислений, ибо компилятор редко более 2-х из восьми регистров сопроцессора использовал, постоянно гоняя данные в озу и обратно.
Было очень удивительно наткнуться на этот видосик, и вспомнить далёкий 97г года было перечитано много книг по ассемблеру которые кстати было крайне сложно достать. Вспомнить как писал программы на нем прямо в загрузчик дисков boot sector, для защиты данный, небольший червей для уничтожение данный при несанкционных достпуха. Было приятно это вспомнить и понять насколько я стар.... жаль что в то время никому это не нужно было ... молодежь вы живете в прекрасное время где можете продать свои знания - дерзайте
Shenzhen I/O, прикольная игруля. Каждый программист должен в неё поиграть, иначе через 10 лет у нас приложение калькулятора на смартфоне будет весить 100 МБ, жрать гигабайты ОЗУ и тормозить.
DEC'овский ассемблер узнал и хорошо освоил еще 1989 году. Любил "играться" с прямым доступом к памяти на ДВК и БК-0011 гоняя спрайты по экрану. И это все будучи в армии служа по призыву в связистах.
Ассемблер это как раз ОЧЕНЬ ПРОСТО. Потому что всегда понятно что и как делается. Более того, для MCU только так и можно (и нужно) писать. Потому что даже простейший C дает далеко не самый оптимальный результат, а памяти под программу там может быть 2-4Кб.
Ну фиг знает, я лет 25 назад прикладные программки для себя делал на ассемблере. Когда еще дос в ходу был. Потом как-то перешел на паскаль, если покопаться, то много расчетных прог для себя на паскале залепил, он еще с окошками виндовыми уже был. И в итоге последнее, куда я залез - это был спп. Но на нем я уже чуть-чуть совсем делал, там тестировщики, типа для торговых роботов. В итоге в общем забил на все большой болт, прийдя к тому, что все это неперспективное ))). Хотя сейчас я бы снова за спп сел бы. Он и защищенный и код довольно простой быстрый и вставки на ассемблере если уж надо - можно делать.
@@joresso проектирование в строительстве, от низов до верхов, все прошел. Уже и своя фирма была, 10 лет отслужила. Сейчас новую открывать буду. Основное направление было - расчеты конструкций и проектирование конструкций. Сейчас уже проще сказать, какую задачу не смогу решить ))). И программирование очень пригодилось. Сейчас под профильную программу под себя разрабатываю так называемые семейства. В общем в строительстве в этом плане еще поле не паханное. Так что кому it надоело и мозги на месте, то тут работы много. Правда бывает терки с людьми, со строителями, заказчиками и т.д., но уже как-то переступил это все, да и это везде такое +-. Выходит, что уже почти 25 лет я в проектировании, объекты в Мск, Спб. Но зарплаты ниже, чем в it. У хороших инженеров на зарплате - 120...180 наверное в месяц. Но это прям самостоятельные высококлассные спецы должны быть. А те, кто выше - те уже особняком расходятся, конторки свои открывают.
Всё-таки, работал он на машинном коде, а ассемблер нам, зрителям, демонстрировали для пущей крутизны. И да, работал он на 6502 проце, если верить коду на экране, мощностей которого несколько маловато для анализа видепотока и работы нейросети :)
@@bytefuИх там тысячи. 😊 Архитектура Intel x86 тоже родом из 1970-1980х годов, однако в i386 в 1986 году появился защищённый режим процессора, которых мог адресовать 4 Гб ОЗУ (гигантский объём памяти по меркам тех лет). И ничего, архитектура живёт и развивается. Даже микроконтроллеры на архитектуре i8051 до сих пор актуальны. Проскакивала информация, что у военных США i386 в некоторых устройствах до сих пор работают.
C++ - это просто надстройка над Assembler. Язык PHP и многие другие имеют интерпретатор, написанный на С++. На Assemblere написаны ядра операционных систем (Window, Linux и др.), драйверы к принтерам и мн. др.
@@Al.Sy. ну в пет операционках понятно, можно базовые компоненты и на ассемблере написать, но вот когда у ядра сложная архитектура, там на одном ассемблере все сложно будет
Писать на асм интересно и позновательно. Заставляет полность осознать архитектуру и не только процессора, но и периферии. Многие программисты даже не представляют как работают простейшие мышка и клава, вроде и не критично, но... странно это :)
По сути это самый бесполезный урок про ассемблер, просто рассказать про теоретически, как он работает, в добавок, ещё сказать, что это не нужный язык программирования, судя по выводам. В уроке ужасно рассказано, про сам код ассемблера, даже опущены флаги, и очень важное, это ограничения регистров. Пример разобран просто слишком бегло, как будто по листочку пробежал
@@АлексейБ-ф2р к чему ты это написал. урок и вправду как будто для тех кто уже знает об ассемблере. весь урок в том что ну мол, есть несколько команд, их вот можно использовать, еще можно вот на сайте посмотреть во что компилируется твой хай левел код. что я должен был вынести из урока вообще не понятно
Из применений кода на ассемблере, что я видел, кроме обозначенных - это работа с микроконтроллерами и векторизация кода со сложными вычислениями (выжимание максимума из SSSE/AVX, что компилятор практически никогда не делает) в высокопроизводительных системах.
Это да) При том, что сейчас можно запустить микроконтроллер на MicroPython - слегка урезанном питоне. ESP32 S2, например. Хотя в этой сфере С++ (а иногда и чистый С) пока все равно на первом месте.
@@bigbugzboney Да хоть любой язык с поддержкой llvm в качестве бэкенда. И если посмотреть библиотеки для каких-либо тяжелых вычислений (я проверил только для обработки сигнала (esp-dsp, если точнее), т.к. самое используемое на таких устройствах), то можно увидеть, что в них есть приличные части на ассемблере.
я не уверен, но мне кажется, что ассемблер это супер тема для прямого обращения к процессору, можно же буквально что угодно сделать с любой техникой где есть проц или любой микроконтроллер
Не всё, если запускать программу после ассемблирования в ОС, работающей в защищённом режиме. Не даст она изменить значения GDT, LDT и исполнить другие привилегированные команды.
Для узкоспециализированных задач ассемблер прекрасно используется, для узкоспециальных процессоров в специальных областях)) Я даже на нём недавно писал))
не знаю, как ассемблер, а вот подача материала на высоте. Мне даже любоптыно стало, как вы делаете все эти переходы и увеличение масштаба в нужном месте. Хотя выглядит как запись экрана. Шучу, ассемблер, понятное дело, тоже на высоте.
В этом году закончил высшее образование и на последнем курсе у нас был Ассемблер. То что объяснял препод, было равноценно китайскому языку. Приходилось разбираться самим и занимало это не мало времени, но в конечном итоге все разобрались и сдали. Этот опыт я не забуду никогда, потому что только при изучении программирования на ассемблере я понял, как работают языки программирования и чем отличается высокоуровневый язык от низкоуровневого
Интересный у Вас ВУЗ! Нам на мех-мате после архитектуры фон Неймана , объяснили что такое машинные коды, затем ассемблер, а дальше остальные языки, причем не только процедурные. Иначе непонятно будет, как твою "писанину" проц с переферией "переваривает". А понятие оптимизации алгоритмов и ресурсов будет как у разработчиков винды!!!
Странная методика обучения у вашего ВУЗа. Нас сначала обучали математике (численные методы, матрицы, графы, ряды и т.п.), логике, булевой алгебре. Потом была цифровая техника (электроника). Потом изучали различные архитектуры построения процессоров. Затем их устройство: порты ввода-вывода, АЛУ, программный счетчик, регистры, память и организация работы с ней, шины данных и адреса, таймеры, прерывания и.т.п. Все это сопровождалось подачей технологий изготовления кристаллов процессоров и изучением разных протоколов обмена информации и цифровых шин. Потом было программирование на ассемблере. И только после этого рассматривались языки высокого уровня. Это был конец 80-х начало 90-х. Сегодня говорят, что можно програмиста подготовить на 3-х месячных курсах. Это бред! Одна математика займет года 3 минимум. А без математики программистом никогда не стать. Если задача программиста состоит только в воде-выводе каких-то данных и их сортировке по определенным признакам, то 3-х месяцев хватит. Такой херней я занимался в школе на уроках программирования на БК-0010 с Паскалем. Если же вам нужно принимать, обрабатывать, анализировать по разным признакам данные и выводить результат, и все это производить в режиме реального времени, то придется учиться как минимум 5 лет в ВУЗе. Плюс для таких задач придется создавать свое железо (как минимум свою перефирию, а зачастую все систему целиком) и программировать его. Для чего же придумали все эти краткосрочные курсы программирования? Это результат желания быстро восполнить недостачу кадров в этой сфере, снизив при этом их стоимость. То же самое наблюдается и в сфере образования: можно пойти на курсы переподготовки и стать учителем начальных классов. Это решение недалеких людей, разваливших систему подготовки инженерных кадров. Никакого положительного результата такое решение не даст.
@@СергейГоробец-р4с "Если задача программиста состоит только в воде-выводе каких-то данных" Задача ВСЕГДА так стоИт! 1. Уровни разные. От интерпретаторов до логического вывода. 2. Курс управления базами данных в 3 месяца не запихаешь. 3. Рисовать интерфейсы (web - например) - легко, особливо когда писать не надо, а пользуешься каким-нибудь "мастером". 4. Прикрутить п.3 к базе - см.п.2. ЗЫ: У Вас тоже ВУЗ больше технический, чем университетский.
@@airman8215 вы хотите пройти обучение в нем? Я бы не стал этого делать. Прошло много времени (30лет). В жизни все сильно изменилось. Утерено 2 покаления в цепи передачи знаний (это инженерные кадры и преподаватели). Выпускники моего ВУЗа сегодня показывают слабые знания. Есть, конечно, исключения. Но в целом уровень сильно упал. Дело в том, что обучение это не только теория, но и практика. Когда учился я, нам некоторые дисциплины преподавали не академические преподаватели, а работающие инженеры, технологи. Плюс была система так называемых базовых кафедр. Мы были прикреплены к каким-то конкретным НИИ и предприятиям, где нас учили применению теории на практике (это самое ценное). Сегодня НИИ и предприятий можно сказать нет. В итоге проблема сегодняшнего дня заключается в том, что наши инженеры создают проекты на бумаге, но не знают как их реализовать в жизни, да еще в условиях ограниченных возможностей. Технологов вообще нет. Конечно что-то осталось, но этого очень мало для решения насущных потребностей нашего общества. Могу дать вам только рекомендации по выбору ВУЗа. Основным критерием я бы выбрал высокие требования к уровню знаний для поступления в него. Я не ориентируюсь в сегодняшних баллах ЕГЭ, и не знаю как отображается количество баллов на уровень знаний, но думаю принцип вам понятен. И самое главное. Чтобы зачать разум, нужно трахнуть мозг. Чтобы при этом не сойти с дистанции или не отъехать в кащенко, нужна четкая система организации рабочего времени с полноценным отдыхом (сном) и питанием. Короче все точь-в-точь как у спортсменов. Это не так сложно реализовать. Главное - дисциплина в соблюдении режима.
Мужик спасибо тебе, не прекращаю тебя смотреть...все руки до Котлина не доходят....чуток изучал и чат джпт и до этого ещё генераторы фоток.....блин времени нет, но на тебя есть, успехов)
Я так понимаю, что ассемблер нужно хоть как-то освоить уже хотя бы потому, что это ключ к пониманию работы компьютера и оптимизации кода в будущем. Ну а кого затянет, то ещё и компиляторы будете фиксить и обратным инжинирингом заниматься)
Честно говоря не часто слышу об оптимизации кода на таком уровне. К счастью или к сожалению, мощности ростут и обычно достаточно просто написать код на высоком уровне, но прямыми руками, чтобы даже не самые современные железки это дело тащили
Есть проект usb device'а на микроконтроллере атмега, там вроде бы на обработку бита есть время равное 8 командам😂 Эта часть сделана на асм, вот тут настоящая ассемблерная оптимизация💪🤣 А на пука это зачем
хз, если это веб разработка например, то смысл знать как работает асэмблер? Там юзается на фронте js. Если нормально пишеш на нем, то твой код уже будет оптимизированный.
Кто бы что ни говорил, а Ассемблер это "кирпичики" из которыx можно сложить все что угодно. Только на Ассемблере можно получить самое большое быстродействие вычислений, самое малое занимаемое место в памяти, все зависит от искусства программиста. Программа, написанная на Ассемблере практически никогда не имеет багов.
Самое большое быстродействие вычислений будет тогда и только тогда, когда все сделано самым оптимальным образом. На ассемблере легко и просто написать код хуже, чем будет код от сишного компилятора. Было время, я много писал на Ассемблере всякое... Начинал с 8-битного 6502/6510. До сих пор отлично помню его систему команд и все его 13 методов адресации...
@@tuttifrutti6603 Все зависит от опыта программиста. Для некоторыx заданий можно так оптимизировать код, что никакой компилятор такого не напишет. Например, если взять ардуино, то для кода простой мигалки потребуется около килобайта, когда ассемблером код пишется в 11 байт
я в 1994-м написал на ассемблере симуляцию "жизнь". сложность заключалась в том, что сделано это было для системы RSX11, в качестве устройства вывода использовался алфавитно-цифровой терминал, подключенный по последовательному порту, обмен происходил непосредственно через адреса порта с перехватом прерывания и шел в реальном времени, т.е. во время симуляции наблюдатель мог перемещать по экрану курсор и добавлять или удалять "бактерий".
Начал знакомиться с компом с Sinclair's ZX Spectrum. Там был встроенный BASIC, но обычно он использовался, чтоб запустить программу, которая была написана на ассемблере. 🙂 Потом занялся микро-контроллерами, где тоже все делалось тогда на ассемблере. Потом увидел PC. Ну, понятно же, что если что-то непонятное при компиляции любого языка происходит, то сразу смотрим дизасм, чтоб понять, что на самом деле происходит. Бывает, в одном проекте используется несколько типов разных процессоров, и соответственно, разные ассемблеры. Их много разных. Забавно, что некоторые камни даже внутри одного производителя, могут иметь одни опкоды, но не иметь других, а третьи выполняются по разному, в зависимости от конкретного процессора. Кстати, С начал использовать, когда уже в ассемблере начал городить макросами функции с параметрами, и понял, что это уже сделано, и названо С.. XD Теперь на АСМе почти вообще писать не приходится, разве что иногда мелочевку в каком-нить маленьком чипе типа AVR TINY. А еще говорят, что если что-то не получается сделать на ассемблере, то нужно переходить уже к паяльнику. И это не метафора! =)
Всем привет! Когда то был Паскаль, но он не пошел, после был ассемблер, да было круто, правда хобби никак не связано с работой, пока учил асм, уже пришла Винда и все такое, и я застрял в тех годах ) Сейчас хочу начать С++, хотя начинал и бросил. Сложно языки высокого уровня после ассемблера. Мож что-то не так , не знаю. Но думаю верно, что нужен проект, практика, цель, своя команда чтобы поддерживать друг друга, тогда учеба идет быстрее и веселее. Люди дружите! Всем здоровья!
Ещё школьником, в 90х, изучал ассмеблер для zx-spectrum. Жил тогда в Баде. Родители ездили в Улан-Удэ или Читу (не помню) и купили книги по ассемблеру. К сожалению, после школы путь сложился иначе и с программировать на долгие годы пыло покончено. Но сейчас на питоне пишу.
Для микроконтроллеров можно на ассемблере писать и пишут, крошечные attiny 13 например. Какие-нибудь мигалки для гирлянд или терморегуляторы. Там 64 байта памяти. Автору видео можно было про них упомянуть. Просто и наглядно. И программы простые и ассемблер простой. За вечер можно копеечной отладочной платой освоить.
Рекомендую turing complete, научитесь читать и писать код даже ближе, чем ассемблер, правда 8-ми битный, но для понимания и общего развития очень классно
На самом деле ассемблер самый простой язык программирования. На нем можно написать очень быстрый оптимизированный код который не скомпилирует ни один компилятор, просто оперируя регистрами. Компиляторы как правило все делают через память. Регистр это быстрая переменная и часто в коде возникают ситуации когда множество регистров на том или ином этапе выполнения не задействованы, или не будут задействованы и программист их оптимально использует, не обращаясь к памяти.
Помню, на восьмибитном Зевсе писал программу преобразования азбуки морзе в текст. Программа в несколько килобайт, но целую ученическую тетрадь исписал пометками, что куда пойдет и откуда чего забирать.
Ассембли как инструмент программирования нужен для всяких драйверов и ос, например, перевода проца в разнобитные режимы, специальные прерывания uefi bios и т.д.
Полезное видео. И да, если вы пойдёте в эмбедед, то лучше вам с порога уже знать nasm. Просто потому, что не важно, какой язык вы юзаете - си или раст, но оптимизацию узких мест вам всё равно придётся делать на ASSэмблере.
Сейчас сишные компиляторы таковы, что надо быть реально крутым спецом, чтоб суметь написать ассэмберный код, который будет хотя-бы не медленнее. Да и мощность железа в современных микроконтроллерах - для большинства задачь хоть попой ещь, не упрешься в недостаток. Даже код для дронов на обычной атмеге - без ассэмблера написан. Скорости си достаточно, чтобы 300 раз в секунду пересчитывать матрицу 4*4 и управлять всеми моторами (кто видел код квадрокоптпров - поймет). Машинное зрение может сожрать ресурсы - но сам код выполнения нейросетей давно написан, там не надо ничего оптимизировать... разьве что размер модели - меньше модель, быстрее обрабатывается.
Чтобы уметь читать Ассемблер много ума не надо, а вот чтобы понять прочитанное и разобраться в коде, нужен хоть какой-то опыт программирования на Ассемблере. Хоть какой-то навык мышления в этом деле. Больно уж много движений с простыми операциями: сохранить текущее состояние регистров, где-то что-то взять, куда-то положить, произвести нужную операцию, получить результат, где-то его сохранить, восстановить прежде сохранённые состояния регистров, передать управление…🤯
Зачем что-то на нем писать чтобы понять написанное? Как по мне так это куда приятнее, ломать голову над простейшей операций написанной в 20 строчек кода, но простыми операциями, чем бесконечно бегать по форумам и справочникам в поисках информации о том как работает метод библиотеки Васи с соседнего двора
Да там еще так написано может быть, что хрен разберешься. Я еще делал так, в начале простой код, потом хрен пойми что, по этому хрен пойми что пробегался логическими командами там биты инвертировал к примеру, а потом уже запускал этот код. Этим ассебмлером начинал заниматься еще на zx spectrum (точнее contact 128 у меня был с муз. процессором - крутой)), а потом 486й появился. Вот лет 5 я больной на голову ребенок развлекался с этим делом. Сейчас бы сказал, что на асме не нужно писать что-то сложное, когда несколько тыс строчек кода, такое тоже делал. Лучше делать это на более продвинутых языках - асм реально очень много времени убивает, в т.ч. и на тестирование. А сейчас еще по старому если делать - по любому винда будет сопротивляться )). Вообще посмотрел видео, какая-то ностальгия чтоли )).
@@АндрейА-д3ф ну писать на асембе, уже очень давно глупо. Как и сказал автор, сейчас важнее уметь читать диасеблированный код программ которые написаны на других языках. Фактически алгоритмы действий с ячейками памяти усложняются и ризона писать это на асемблере нет никакого, учитывая что прорыв в области вычеслительных мощностей ещё не прекратился. Когда вычеслительных мощности достигнут приделе, думаю люди к этому вернуться
@@darkcorn6059 Так раньше комп был 4мб памяти и это круто, а сейчас у меня в ноуте 64гб озу и проц 13980hx, на 32 потока, раньше на серваках о таком мечтать не приходилось))). Сейчас надо свое время экономить, а не машинное)).
речь тут скорее о реверсе, отладке, а не написании своего кода. Тогда надо смотреть в стэк. Точки возврата и параметры вызовов. Что на входе и на выходе. А зачем вам знать как это обрабатывается внутри?
Ассемблер, в основном, используется в глубине HAL кросс-платформенной операционной системы. Там где для реализации функционала ОС требуется исполнять специфичные инструкции процессора. Другой нишей для ассемблера является программирование примитивных микроконтроллеров, вроде i8051, хотя для них часто используют Си. Третьей, исчезающе-маленькой нишей является глубокая оптимизация исполнения (чаще всего, ради уменьшения задержек), причем, чаще всего с теми же микроконтроллерами.
Ну вот смотри... если круг поделить на 256 частей, то cos() будет искать проще.... cos - это кось... насколько косит от прямой. 1 - не косит, 0 - вообще мимо. кось и сила - это cos и sin... например при кидании снаряда чтобы попасть по косой нужна сила... другая сила нужна при кидании по прямой... если круг поделить на не 360 частей (что произошло от оборотов вокруг Ссолнца)... а на 256 ( что удобно для двоичных вычислений),... то полный круг - это 1, полкруга - это 128/256, четверть - 64/256, восьмая асть круга = 32/256. 1/16 и далее заграют по-новому. на практике для отрисовки UI достаточно деления на 256 частей.и никаких float. число можно хранить в ubyte. и если раньше круг равен 2PI , полкруга PI, 90 градусов - PI/2 ,, то при бинарной записи круг = 256, полкруга 128, а 90 градусов = 64.... получается, что PI = 128 . Длина окружности также вычисляется по формуле L = 2 PI R L = 2 * 128 * R возможно, это самый высокопроизводительный способ считать cos() и рисовать круги.
Я еще в школе научился очень легко программировать на советских программируемых калькуляторах, где логика схожа на ассемблер, но уровень немножко повыше. А уже в универе, как отрубило, не заходил asm ни под каким предлогом. Спасибо, друг, что смог качнуть этот (мой) маятник затыка в нужном направлении!!!!
@@thebestmusicforrelaxationa2142, зачем люди играют в шахматы, если есть тетрис? А если серьёзно, то компилятор Си частенько такие штуки отчебучивает, что потом искать проблему становится себе дороже. Причём одна проблема может возникать при одних настройках оптимизации и другая проблема при других настройках оптимизации или при использовании другого компилятора или линковщика. Конечно, никаких проблем нет, если весь ваш код состоит из main в которой просто сравнения, немного сложения, вычитания, чуть-чуть вывода в порты и ввода. Но как только вы начинаете привязываться к времени, например, вам нужно выдать в некий порт 90h и строго через 120 микросекунд выдать в него 55h с погрешностью +/- 5 микросекунд, то всё может полететь к чертям собачьим и вы будете днями искать где же что идёт не так, проде и прерывания запретили или в прерывании это делаете, вроде и ... Или вот ещё место, которое мне "нравиться": на сях - параллельная работа 2 [3,4,...] ядер. Но всё же моё любимое - время. На память пришел случай из практики: было нужно 1 секунду собирать данные, простейшие, вроде читать с N тактовой наличие ЛОГ1/0 на определённой ноге, а потом провести их анализ, вот только анализ уже был не простым, с массой умножений, делений, синусами и извлечением корней и результат надо было получить к концу следующей секунды и в зависимости от результата установить или сбросить несколько ног. Контроллер для энергосбережения работал на сильно задушенной тактовой частоте. Просрочить нельзя, джиттер по выдаче результата тоже недопустим, нужно строго 1 секуда интервал. Заменить контроллер уже нельзя, изменить тактовую уже нельзя, потому что устройство уже есть и не одно, а много, их очень много и переделывать платы, обвязку будет сильно дорого. На сях это не лезло совершенно, на ассемблере лезло ещё и время оставалось. Не все же люди программируют мигание светодиодом на платке ардуино или веб-сервер с показом температуры и влажности дома на ESP32, некоторые решают задачи промышленного и даже мирового масштаба, ну там управление телескопом орбитальным или миллионами стиральных машин или имплантируемых устройств впрыска лекарств в кровь.
Ооо прикольно. Как 100 лет назад писал на асме, жаль ничего не сказал про "С--" И теперь надо подумать, какие параметры выставить на Генту, чтобы это все еще раз перекомпилировать....
10:50 - и самое главное! Наиглавнейшее!!! Суть всех сутей и тайна всякого программирования на ассемблерах. Важно знать АРХИТЕКТУРУ ЭВМ ДЛЯ КОТОРОЙ ПИШЕТСЯ КОД НА АССЕМБЛЕРЕ. А архитектуры, к слову сказать, бывают не только x86 и ARM.
Есть такие ))) Кодил на ASM в молодые годы. Начинал с игр на ZX Spectrum закончил системными прогами на IBM PC ))) Скорее всего 90% меня не поняли )))))))))))
Программируя под avr регулярно сталкиваюсь с багами оптимизации gcc. Наиболее популярный - это глобальная переменная, которая меняется в прерываниях и считывается внутри main. Компилятор не видит, в каком месте происходит вызов прерываний и, видимо, думает, что переменная нигде не меняется, а потому делает ее локальной и по сути константой. Лечится добавлением ключевого слова volatile при объявлении переменной, что попросту запрещает оптимизатору трогать переменную своими кривыми ручками.
Есть просто потрясающая игра Turing Complete. В ней в понятной форме с нуля сам собираешь простые процессоры и как раз к середине доходишь до ассемблера, которые еще и сам пишешь. Порог вхождения вообще отсутствует- главное желание и умение понимать двоичную логику. Для желающих ознакомиться с тем как работает компьютер на самом низком уровне - самое идеальное.
Боже, ну и 6peд несешь! Программа ассемблера работает с прерываниями, то есть обращается либо к системным подпгораммам биоса, либо напрямую к портам ввода вывода. Второе, любая программа исполняется в машинных кодах, а ассемблер это лишь мнемоническая, условная запись, чисто для более просто восприятия человеком, и не более. Ассемблер не является никаким " промежуточным звеном", между высокоуровней программой, - ассемблер и машинные коды, это одно и тоже. Третье, программирование на аасеблере не только ничем не сложнее, скажем таких языков, как питон или с++, с их сложной системой абстракций, но и намного проще. Достаточно просто знать, что делает то или иное прерывание.
Недавно кодил небольшую программу для стм32. сначала на си. Посмотрел листинг, тряхнул головой написал на асме. В результате обошелся 12 регистрами процессора, без всяких стеков и обращений к озу.
Утверждение, что мало кто в современном мире программирует на ассемблере - такое себе. А как же драйвера, компоненты ядра операционок, системные dll, прошивки, API микроконтроллеров, компиляторы и много чего еще? В этих областях огромный процент специалистов. Простому парсерописателю и покрасчику кнопок на высокоуровневых языках он не нужен ясное дело. Там думать надо как эффективно каждый бит использовать, вся идеология написания кода строится в том числе на защите от утечек памяти. И таких специалистов, кстати, думается мне, еще нескоро заменит нейросеть.
Надо было поломать голову, чтобы перемножить числа на ассемблере! Ни один современный программер не догодается что для умножения на 2 надо было сдвинуть двоичный код числа вправо, а для умножения на 3 сдвинуть и сложить с первым и т.д.
Когда-то давно у меня не было даже ассемблера, а кодить хотелось. Была книга под названием "Машинные коды" по ней мнемоники ассемблера переводились в машинный код и вводились в помять средствами встроенного бейсика (команда POKE). Затем передача управления (USR) и ... сумасшедшая производительность по тем временам. Компьютер назывался ZX-Spectrum. Сейчас ассемблер используют для оптимизации узких мест (интринсики).
На голом ассемблере почти не писал, но в школьные(90-е) годы очень много чего написал на Паскале с блоками ассемблера (Asm...End). Без него работа с прерываниями BIOS была практически невозможной, а следовательно и со всем что подключалось через внешние порты. Спасибо за частичку детства ))))
АЙЙЙЙ
ОЙЙЙЙ
АХХХХ
УФФФФФФ
иииий
ААААА
Ассемблер напрямую связан с твоей вовлечённостью в профессию. Если ты знаешь, как писать на ассемблере, значит понимаешь устройство процессора, памяти и всей системы ввода-вывода на уровне логики. Да, можно жить без этого и зарабатывать хорошие деньги, но эти знания расширяют твой профессиональный кругозор и может статься так, что когда-нибудь они пригодятся. Например, ты знаешь, что функция синуса требует около 200 циклов процессорного времени, но для твоей задачи можно синус заменить на более простую функцию, которая потребует 20 циклов без потери точности. И ты ускоряешь вычисления в 10 раз, что позволяет обрабатывать в 10 раз больше информации за единицу времени на гигантских объёмах. И всё это ты берёшь из подсознания, потому что вспомнил, что оно там в процессоре так на уровне железяки. В этом и есть профессионализм.
маркетингу это не выгодно , нужно же говно видюхи с памятью штамповать, за конский ценник пихать неоптимизированное железо и называть это прорывом технологии)
В этом то и разница между обычным любителем и настоящим специалистом. Старт изучения Ассэмблера, можно смело сравнить с красной таблеткой из матрицы. После которой, уже нельзя будет вернуться в исходную точку
Писать на ассемблере было искусством... когда тебе нужно уложить в 512 байт программу которая откомпилированная из Паскаля занимает несколько килобайт. Такую задачу решаешь несколько дней, это муки творчества и полёт мысли, это хакинг в самой чистой своей сути. Это было красиво.
Зачем в 512байт укладываться? Один сегмент - это 64к. Вот в 64к уложиться, это да, искусство. Кому интересно, можете загуглить "assembly archive demo" Ого, загуглил сам, там ещё 4к есть категория %) Не знал! А 512 байт можете пример показать? Я выше комментарий оставлял про книжку Хижняка, как в детстве с вирусами игрались. Как сейчас помню 132 байта там вирус по книжке выходил. Но Хижняк не дурак. Пока ассемблер весь не выучили - месяца четыре, короче, мы ътот вирус компилировали. А года через два осознал что вирус везде.. А потому, что без единой ошибки был в результате написан и его никто не замечал ;-) Ах, детство! p.s. вот в 32 байта оперативы уместиться, вот это искусство, да ;-) а 512 байт ни у кого нету. Ну если только другие 512 бутлоадером не заняты :-))
не "было" - соревнования всё ещё проводятся.
это всё ещё невероятно красиво.
и вот он вроде правильно говорит - "ассемблер нужно чтобы читать", но ассемблер - это такая вещь, что чтобы читать - надо уметь писать.
@@sergunka79 верю что и сейчас есть. "Было" я имею ввиду - для меня было.
В качестве эксперимента я когда-то написал вирус для PDP-11, который с запасом вмещался в блок 512 байт. Такой гибкости в адресации операндов нет ни в одной современной системе команд! Писать на ассемблере тогда было просто удовольствие.
@@indratoue3717 если бы всё было так радужно, как Вы говорите, то x86 не появился бы ;-) А если бы дело было в богатстве способов адресации, то не появился бы RISC. А так как появились и тот, и другой, то смею предположить, что Вы лукавите. Моторола 68000 посмотрите, как программируется и сделайте свои выводы. P s. Я выше писал, мы в детстве играли с вирусом под x86 и DOS, там длина порядка 130 байт была. Гуглите "Хижняк вирус"
Надо было упомянуть, что мнемоники в Asm являются сокращениями от английских слов:
mov - move
cmp - compare
jbe - jump below or equal
...
Так проще запоминать
кто этого не знает, тому уже и не надо
@@PARomanoff Тобишь все кто этого не знал(т.е. вообще все люди), тем оно не надо было?
Транзисторы - нулевой уровень. Машкоды - 1 уровень. Ассемблер - второй. Хайлевелы - третий. ChatGPT - четвертый.
Уровни организации материи: 1 частицы, 2 атомы, 3 молекулы, 4 клетки, 5 ткани, 6 органы, 7 существо
это не опкоды, это мнемоники, опкоды это КОДЫ, даже из слова понятно что это именно числовые значения
АССЕМБЛЕР -- это круто. Почти любой кто Вас увидит за ассемблером -- будет думать, что вы ломаете Пентагон :)
А если серьёзно -- то в этом есть своя романтика, свой шарм. Да и просто самому приятно понимать хотя-бы на базовом уровне что да как работает.
Спасибо за видео!
А если вздумаете ломать Пентагон, используйте Python и JS, так вас точно никто не заподозрит!
Да в чём крутость? Крутость не пахнет деньгами. Так что такую крутость я хотел бы видеть разве что в музее.
да пох, я пришёл в айти чтобы ничего не делать и получать большие деньги
@@vitaliiivanov9514 Боинг хорош для такой ломки.
@@ДмитрийХоменко-ш1щахахах😂
За наводку на "compiler explorer" благодарю. Глянул на ассемблер и в душе аж потеплело. Кодил на ассемблере простейшие игрушки в 92 году в 12 лет на ZX-spectrum (модификация Magic)
Снимаю перед Вами шляпу. В данный момент изучаю язык Ассемблера, безумно нравится. Это власть и мощь
Разрабатывая на ассемблере программы для сигнальных процессоров Texas Instruments выработался очень полезный навык - ставить комментарии в каждой строке. Это только так кажется, что mov это переместить, а вот без комментария понять зачем этот mov сделан иногда не просто.
О, когда-то давным давно я тоже писала под TMSы, а до этого под ADSP2111...
Получается весь ассемблер построен на GoTo? Это забавно учиться (не в вузе - так, для себя) программировать не используя эту "вредную" команду а потом узнать, что на ником уровне всё только на ней и построено 😀
@@Сергей-ч8б8н На низком уровне ты точно знаешь, куда именно в какой именно памяти переходишь. И прерывания сам обрабатываешь, знаешь, что в любой момент должно происходить. А так да, и прямые переходы, и даже прямое расписывание циклов ради экономии времени, и такую кошмарную вещь, как сохранение в служебном регистре процессора значения переменной без перезаписи в память писать приходилось...(хотя и циклы, и подпрограммы вполне можно и даже удобно реализовывать, но это "долго") И эффективное использование возможности процессора обрабатывать две некоторые специфические операции за один такт... Разумеется, это только регистровые операции могут быть. Фух, задача обработки сигнала в реальном времени в условиях, когда начальство жмотится на более мощный процессор - это забавная штука. Приходится считать каждый такт. Какая нафиг "асимптотика", если N операций ты можешь себе позволить, а 1,2 N - уже не можешь! Но это 20+ лет назад было
@@Сергей-ч8б8н GOTO - это аналог просто jmp (jump, «прыжок» без условий). А циклы и ветвления транслируются в код на языке ассемблера, использующий команды-«прыжки», но условные: je (jump if equal, «прыжок», если предыдущая команда сравнения двух чисел дала результат «равно»), jne (jump if not equal), jbe (jump if below or equal), десятки их.
Много воды, реклама курсов и тд ..
Было дело, в 89-92 я написал и даже продал несколько копий графической библиотеки с драйверами, написанными на ассемблере 8086. Стояла задача превзойти по производительности библиотеку от Turbo (Borland) С и дополнить ее несколькими функциями. Результат был достигнут через примерно полгода. Все функции работали быстрее, причем некоторые аж раза в 2. Хуже всего обстояло дело с рисованием прямых - там разница была в доли процента. Если не ошбаюсь, я нашел способ избавиться от одного оператора сравнения в глубоком цикле.
Только несколько? Или вы смогли сделать огромные деньги с нескольких копий?
Титаническая работа как я представляю
@@hin200 как бизнес проект это была полностью провальная история :) Но приобретенный опыт и по части кодинга, и как первый большой проект, оказался бесценным.
@@sashaandaigul Ух ну главное что опыт бесценен, вы молодцы!
@@hin200 в те годы любые библиотеки, компоненты и прочее публиковались на компакт дисках "всё для программиста" и вместе с компанией Борланд от такого пиратства страдали независимые разработчики. Причем Борланд так получила популярность в России, а независимые большинство сошли на нет ((
А чем вы сейчас занимаетесь, если не секрет? Все еще кодите, или ушли в другой род деятельности?
У меня друг етсь который юзает Асемблер (бизнес связанный с машинами), как он пояснял, потому что большинство современных брендов лочат свой лоулевел и прошивку компонентов, а также создают свой низкоуровневый фреймворк, на котором работает вся система- в том числе и отдельный фреймворк для работы с КАН-шиной, к которому нет доступа, чтобы этим могли заниматься только лицензированные сервисы- а использовать Ассамблер это по сути, костыль для обхода всех запретов
Ваш друг скорее всего играет блюз, а не программирует на асм. И вооще не КАН, а КЭН
Ебать, хз крут тот чувак или играет блюз, но выебнулся ты круто)
Самое главное в Ассемблере, - это знать архитектуру компьютера и операционной системы. 99 всех перемещений и вычитаний связаны с зарезервированной памятью, регистрами, особыми прерываниями ОС. Беда состоит в том, что преподавание ассемблера начинается не из изучения архитектуры, а из изучения самих команд.
Тут спорный вопрос тк какую архитектуру? К моменту выпуска студента все может поехать сильно. Надо и мнемоники и практику на что есть сейчас. А дальше если пойдет по теме, сам изучит, если не дибил.
Яб ваще мк преподавал. Оно нагляднее и можно пощупать результат руками, а не байты гонять.
,@@vladimirorl , "Московский Комсомолец"? Да, это как раз о программировании и подготовке таких кадров.
@@andya4418 иногда лучше жевать, чем говорить. Ну, или загуглить для начала, чтоб не палить свою ЕГЭшность...
@@vasiliygulakov лучше, лучше. "Писать код", "замыкание", "дескриптор". Жвачка. Свой приприетарный жаргон. Обжевывание неправильных переводов. Вообщем такая вот МК.
Мне довелось писать на ассемблере... и если честно идея "читать ассемблер просто" несколько далека от правды))
Особенно вот в таком формате листинга, но для этого есть много всяких крутых инструментов которые сильно упрощают процесс
Кроме дебага у ассемблером пользуются когда нужно впихнуть "невпихуемое")) разработчики под микроконтроллеры иногда сталкиваются с задачей уместить весьма увесистый алгоритм в очень скромный ресурс контроллера и тут на выручку приходит сверхоптимизированный код на ассемблере и математическая магия)
2 года работал с микроконтроллерами и десктопы для работы с ними писал. Честно говоря ни разу не приходилось оптимизировать код чтобы он занимал меньше места, вопросы скорее к скорости выполнения кода, но вероятно это специфика именно моей задачи
@@darkcorn6059 под "увесистым" имелось ввиду все сразу, а не только размер
К тому же, к счастью, это довольно редкий кейс и чаще всего результат ошибки на этапе проектирования или больной головы руководства (когда половина партии уже на складе, а кто-то решил еще какую-то фичу засунуть), специально таким никто заниматься не будет это банально экономически нецелесообразно
Сам лично в работе никогда не сталкивался, но видел как коллеги сталкивались
Ради интереса и прокачки скила пробовал реализовывать разные протоколы на 13-й тиньке, но это просто пет-проекты, а не производственные задачи.
@@Андрей-р2х1е честно говоря с производственными задачами я не работал. Делал маленькие установки для обработки опытных образцов.
Ну в сишном коде и сейчас можно встретить директивы со вставками ассемблерного кода, если ваш компилятор не поддерживает к примеру локи или вставки для реализации на разной архитектуре. Ну и понятно, что в Линуксе, в ядре, есть целый блок архитектурно-зависимого кода на асме
90е годы, кафедра вуза, гоняю в игру Дюна2. Приходит препод, поздоровался, ушел на лекцию по ассемблеру для мой группы. Чарез 2 часа, препод пришел с лекции, попрощался, ушел. Я режусь в дюну.😂 Ребята из параллельного потока а ахуе, спрашивают чо за??😮 Говорю, препод сам предложил не ходить, поскольку на асме я лучше него пишу и постоянно его ошибки исправляю! 😂
Было так, только с веб-приложением + работа с бд. Один раз написал, показал - автомат)
А я впервые с машины кодом познакомился, когда в Reunion играл, не мог пройти игру, сначала понял механику открытий, как сделать, потом играл с hex для денег и ресурсов, мои первые познания)
Когда будет видео туториал по C++ на 10+ часов?
Очень ждем!
Ему слабо
Зачем? На видео в 10 часов не получится много рекламы впихать
@@ПетициявПрофиле Схуяли ?
На 10 минут
По поводу прошитых на безгрешность компиляторов кодеров это точно. Один решал задачки эйлера не мог понять где ошибка, я вскрыл асм листинг и указал на алгоритм и на то, что даже на O3 компилятор не оптимально использует регистры и делает много лишних пересылок. Один чел вылез и давай успорять, что это мол я не вижу, а компилятору виднее в итоге после недели тыков в куски кода и спецификации опкодов я тупо переписал всю задачу на ассемблере убрав лишние операции и просто очевидно показал, что я прав и так быстрее. Но чел не сдался и все равно уверял, что компилятор лучше знает. Такие дела.
А у меня XRay с включенной оптимизацией работает, ну это сталкер ТЧ, компилятор VS2010SP1. А если оптимизация выключена, то ловлю вылет, где баг, вообще не понятно, толи в коде, толи в компиляторе, вроде скрипты Lua выдают ошибку. Как известно, если знаешь где компилятор выдаёт ошибку, то эту проблему решаешь переделав код, то есть проблему обходишь. Но непонятно что выдаёт ошибку, но выход в данном случае, новый ПК, больше памяти, быстрей процессор и не надо выключать оптимизацию. Да, я выключал оптимизацию для ускорения компиляции.
@@LithiumDeuteride-6 у компиляторов есть фундаментальные особенности оптимизация которых возможна только правкой ассемблерного кода или правкой кода самого компилятора. В частности особенность использования локальных переменных. При работе с которыми в 90% случаев используются лишние операции чтения/записи. А у вас ошибку выдает скорее участок кода, который компилятор выкидывает при оптимизации или заменяет константой т.к. либо результат работы кода нигде больше не используется либо всегда равен конкретному числу
Можешь еще больше придавить его осознанием мысли что "оптимизировать" компилятор "научили" прогеры еще больше и еще лучше разбирающиеся в АСМе. Честно говоря создается впечатление что для таких люди считают что компиляторы прилетают с марса, что их никто не пищит а оптимизировать они умеют просто потому что их боженька такими создал.
@@KILYAV я не настолько жестокий чел)
@@LithiumDeuteride-6 Сдаётся мне, у вас в коде есть UB (undefined behavior), что для кода на C и C++ весьма типично. Компилятор всегда работает из расчёта, что программа написана в соответствии со спецификацией языка, и в этой спецификации какие-то операции являются недопустимыми и считаются UB. Оптимизации компилятора исходят из того, что в вашей программе UB нет, т.к. иначе вся программа формально считается некорректной, и действуют соответственно: любой код с UB может быть удалён или заменён на другой по усмотрению компилятора, т.к. его выполнение нарушило бы спецификацию.
Пишу иногда на ASM для МК. Основная сложность не директивы ассемблера, как сказал автор, тут всё достаточно просто и понятно. 99% работы - это изучить архитектуру процессора и работу с его регистрами.
Под какие мк пишешь?
Архитнктура плюс минус одинаковая. Разные - прерывания.
А если будет другой процессор, то ничего уже не будет работать? Дилетантский вопрос. Типа написал код под какой-нибудь intel, а на amd он не работает?
Мне кажется Интел и АМД должны быть совместимы на уровне ассемблера. Мы же компилируем exe-файл, там машинные коды, а ассемблер это просто мнемоника машинных команд. Этот exe должен работать на любом x86 совместимом процессоре. На то они и называются совместимые. Почти уверен, есть несовместимые ASM-команды, для каких-нибудь оптимизаций итд. Подозреваю, что компилятор их не использует, если его специально не попросить. Но это только мои рассуждения.
@@iotone7525 вы путаете производителя и архитектуру. В данном случае речь, скорее всего, идёт об архитектуре x86 (или производных), а все процессоры на ней совместимы на уровне ассемблера (у них одинаковые регистры, система команд, флаги, методы адресации и т.п.), независимо от конкретного производителя
Как всегда вложил очень много материала в такой короткий видос. Спасибо тебе
Спасибо за инфу про Compiler Explorer, надо пощупать его
С теплотой вспоминаю свои лабы по ассемблер. Я мало что понимал, но у меня неплохо получалось) Было здорово
Однозначный лайк за проделанную работу. Четко, понятно и без лишней воды!
Писал на ассемблере программу для работы с картами (военное использование), сжатия графики и напрямую с видео памятью, интерфейс был похожий на Винду графический редактор объектов на карте, виды применяемого оружия, разрушения и радиация, заражение газами и бактериями, потоки воздуха, всё вмещалось в 34kb, начинал писать на 386 потом пришлось писать тормозилку иначе на пентиуме было всё очень быстро ) потом писал свой компилятор, помнил команды в 16 виде и мог написать простенький сом файл, сейчас пишу на Golang, Swift, Kotlin, PHP последний раз на низком уровне программировал контроллеры в 2006 году
На втором курсе задали учить асемблер для тмс320, очень хорошо улучшает понимание того, как вообще вся эта тема устроена. Были разные базовые микропрограммки с умножением, ветвлением и циклами, но когда на последней лабе нас заставили писать на машинном коде для симулятора vax машины, взвыли все. Пришлось вручную редактировать ячейки в памяти, листая в методичке мнемокоды. Какая-нибудь операция могла быть длинной в несколько вордов, а если добавить к ко всему этому разные варианты адрессации, весь процесс становился похожим на перевод китайского с бумажным словарем. Я уже не помню, как там правильно писать, но код выглядел примерно так : «B5 R3 45 C3 00 00 F1 11 FF». Ниже этого уровня только на двоичном коде прогать, наверное
С R3 в качестве примеры Вы сильно "загнули". 😊
Спасибо за интересность )) и в самом деле, можно разобраться. Всегда думал что Ассемблер это что то страшное )). Благодарю за понятное объяснение))
"Столет" назад писал на ассемблере, что-то получалось, было интересно. Потом род деятельности пришлось сменить. Сейчас для себя пытаюсь разобраться с современными высокоуровневыми языками, и что-то не очень получается) Между железом и кодом появилась своя "прослойка" абстракции и знать как при этом на самом деле работает железо кодеру не очень то и надо, при этом этот "абстрактный уровень" каждый объясняет со "своей колокольни", иногда без понимания работы аппаратной части. Старые методы изучения прогерства не работают)
Сдвиговые команды, запуск каких-то системных функций и проч. сразу бросились в глаза, хоть и прошло "столет", и писалось все под другие процессоры)
Не то, что не работают - они сегодня нахер не нужны 😂
Не конечно, ты можешь знать как работает процессор на самом низком уровне, но плюса это тебе в коммерческой разработке вообще никакого не даст. Ну разве, что твой лид будет просто уважать тебя (но таких лидов, с каждым днём становится меньше)
@@SergMirny_yt
Ассемблер нужен для разработки компиляторов. Этим занимаются очень небольшое количество программистов.
@@vvdvlas8397 так об том и речь. Ещё в эмбедед он нужен. Но это очень маленький процент рынка вакансий в принципе. Иными словами со знанием асма, можно очень долго работу искать, в то время как какой нибудь питонист или пхпешник будет кушать свой хлеб с икоркой. )
@@SergMirny_yt
Видимо поэтому сейчас такое количество неоптимизированного комнософта, разработчики которого считают, что им "нахер не нужны" знания о работе железа. Исключений при компиляции нет, значит - "и так сойдет". Как раз-таки если лид не такой же "грамотный", то он то как раз предпочтет себе в команду шарящего за железо прогера, который будет писать исходя из понимания как оно будет работать в железе, а не очередного "вовки из тридевятого царства".
@@someone-user сразу видно, что вы не программист и вообще далеки от этого.
Во первых, конечно от программиста требуется понимать какое действие будет "дорогим", а какое "дешёвым", в плане ресурсов/скорости. Но как это работает на уровне ключей и вентилей в процессоре - никому не нужно, это смешно. В конечном итоге программист вообще не знает на каком конкретном железе будет работать его программа а уж про контейнеризацию э, которая сейчас всюду - и говорить не приходится, прикиньте, что там программа работает вообще на виртуальном процессоре в виртуальной ОС 😁
Читайте внимательно по пунктам
1. Программирование решает вопросы бизнеса - это инструмент бизнеса
2. Написание продукта на фреймворка - это высокая скорость разработки продукта
3. Вытекающее из 2-го, пока вы будете писать свой супер мега оптимизированный код и вычищать в нем баги и допиливать его до состояния такого же какое обеспечит фреймворк - ваши конкуренты успеют уже заработать деньги на продукте и обанкротится, пока вы выкатитесь в продакшн
4. Вытекающего из 3-го - бизнесу гораздо дешевле арендовать мощнее сервер который покроет потребности работы сервиса чем содержать огромный штат программистов, который будет покрывать скорость разработки сравнимый с конкурентами пишущими на фреймворке.
5. Фреймворк обеспечивает стандартный код - это значит, что компания не привязана к программисту, вход (онбординг) нового программиста в проект происходит гораздо быстрее в случае стандартизированного кода фреймворка, нежели чем это будет самописный легаси, ОСОБЕННО если продукту много лет и что там написано уже никто не знает
Как итог - не нужно думать, что вы самый умный, то над чем вы задумались лучшие умы от бизнеса и программирования переживали, переварили и высрали в виде оттестированных годами решений.
я всегда считал что асм это лучший яп вообще, чтобы понять всю “генетику” архитектуры
Так и есть) все остальное недоязыки для слабаков
@@walcermelodia странно мыслить так, что ассемблер - это что-то сложное сложнее джаваскрипта какого-то
@@cppdeveloper чел, ты знаешь что такое рофл?)))) Роффллл
Не нужно все подряд воспринимать все подряд в интернет всерьез)))
@@walcermelodia где контекст чтоб человек мог нормально понять что это рофл?
@@walcermelodiaжестко зарофлил, аж всем нужно объяснять, что это рофл
Очень адекватный ролик. Полностью согласен со всеми выводами. Сам в детстве с бейсика перешел на асм, и чувствовал себя властелином регистров. Потом была дикая ломка с переходом на паскаль, не знать что хранится в регистрах было невыносимо, хорошо в турбопаскать можно было миксить код и делать asm вставки. Но постепенно отпустило и и уже С и Срр, нормально без флэшбэков в асм использовались. В большом проекте как-то задействовали asm, что привело к 15 кратному увеличению скорости загрузки специфических ресурсов, но после это привело к тому, перевод проекта на другой процессор стопорнулся на этом коде и нужно было или достичь такого же эффекта используя другой процессор или выкинуть этот код, выкинули. Язык для чтения это классный вывод!
Мув, мув. Поздравляю, вы восхитительны.
Ничего не понятно, но очень интересно )
В советском вузе для общего развития учили бейсик, фортран и ассемблер на УМК-80 на КР580ВМ80А - советских аналогах i8080. "Интеграл мне пригодился всего один раз в жизни. Когда я уронил ключи в унитаз, то сделал из проволоки интеграл и достал ключи с его помощью". Впрочем я и не программист )
Впрочем, человек из анекдота мог и не понять, что можно изогнуть проволоку, если бы ни разу не увидел интеграл. Так что действительно помог. Ученье свет))
В университете был курс по компиляторам (до этого уже трогали ассемблер в курсе по архитектуре). Вот это было больно. Писали с абсолютного нуля для выдуманного ограниченного языка (буквально if, else, while, for, print и булины с обычными операторами), спасибо что хотя бы ядро делали питоном, иначе уже на стадии парсинга и лексинга увязли бы поуши (кроме PLY вообще больше ничего не использовали) . В конце даже делали оптимизации control flow graphs, dataflow, register allocation и тд. Счастлив, что это прошло как страшный сон уже, и я вряд ли когда то к этому вернусь (сейчас занимаюсь написанием алгоритмов для математических инструментов в julia), но как опыт было невероятно полезно. Бесконечный респект типам которые серьезно писали и пишут на лоу лвл языках, чтобы мы могли абузить обычные языки и ни о чем не думать)
В каком универе этому учат?
прям вот здравый комент
Раньше, часто делал ассемблерные вставки в c++, чтобы оптимальнее сопроцессор использовать для сложных циклических вычислений, ибо компилятор редко более 2-х из восьми регистров сопроцессора использовал, постоянно гоняя данные в озу и обратно.
Что за компилятор: gcc, msvc, watcom?
@@Al.Sy. msvc 1998-го
@@alexanderv.7404 Понятно. Тогда компиляторы ещё не были столь навороченными, как ныне.
Как обычно - максимально насыщенный в технологическом смысле контент, спасибо Рома!
сам себя коментишь? говень полная, обычный чел нихера не поймет, кроме рекламы
Было очень удивительно наткнуться на этот видосик, и вспомнить далёкий 97г года было перечитано много книг по ассемблеру которые кстати было крайне сложно достать. Вспомнить как писал программы на нем прямо в загрузчик дисков boot sector, для защиты данный, небольший червей для уничтожение данный при несанкционных достпуха.
Было приятно это вспомнить и понять насколько я стар.... жаль что в то время никому это не нужно было ... молодежь вы живете в прекрасное время где можете продать свои знания - дерзайте
А еще в него можно играть - есть игрушка Шеньжень АйОу - где программируешь на асме микроконтроллеры и таким образом решаешь пазлы )
Shenzhen I/O, прикольная игруля. Каждый программист должен в неё поиграть, иначе через 10 лет у нас приложение калькулятора на смартфоне будет весить 100 МБ, жрать гигабайты ОЗУ и тормозить.
Видосик в кайф давай ещё!
на 5:35 ты говоришь то что это квадратный корень, но это просто возведение в квадрат
Спасибо, было интересно.
DEC'овский ассемблер узнал и хорошо освоил еще 1989 году. Любил "играться" с прямым доступом к памяти на ДВК и БК-0011 гоняя спрайты по экрану. И это все будучи в армии служа по призыву в связистах.
Что за ПДП в бэкашке, там вроде все нехитро было, в отличии от интелей.....
Все тоже, в тоже время. Только после армии :)
Ассемблер это как раз ОЧЕНЬ ПРОСТО. Потому что всегда понятно что и как делается. Более того, для MCU только так и можно (и нужно) писать. Потому что даже простейший C дает далеко не самый оптимальный результат, а памяти под программу там может быть 2-4Кб.
Ну фиг знает, я лет 25 назад прикладные программки для себя делал на ассемблере. Когда еще дос в ходу был. Потом как-то перешел на паскаль, если покопаться, то много расчетных прог для себя на паскале залепил, он еще с окошками виндовыми уже был. И в итоге последнее, куда я залез - это был спп. Но на нем я уже чуть-чуть совсем делал, там тестировщики, типа для торговых роботов. В итоге в общем забил на все большой болт, прийдя к тому, что все это неперспективное ))). Хотя сейчас я бы снова за спп сел бы. Он и защищенный и код довольно простой быстрый и вставки на ассемблере если уж надо - можно делать.
@@АндрейА-д3фя так понял перестали программировать. Чем занялись?
@@joresso проектирование в строительстве, от низов до верхов, все прошел. Уже и своя фирма была, 10 лет отслужила. Сейчас новую открывать буду. Основное направление было - расчеты конструкций и проектирование конструкций. Сейчас уже проще сказать, какую задачу не смогу решить ))). И программирование очень пригодилось. Сейчас под профильную программу под себя разрабатываю так называемые семейства. В общем в строительстве в этом плане еще поле не паханное. Так что кому it надоело и мозги на месте, то тут работы много. Правда бывает терки с людьми, со строителями, заказчиками и т.д., но уже как-то переступил это все, да и это везде такое +-. Выходит, что уже почти 25 лет я в проектировании, объекты в Мск, Спб. Но зарплаты ниже, чем в it. У хороших инженеров на зарплате - 120...180 наверное в месяц. Но это прям самостоятельные высококлассные спецы должны быть. А те, кто выше - те уже особняком расходятся, конторки свои открывают.
Даже Терминатор работал на ассемблере!
Всё-таки, работал он на машинном коде, а ассемблер нам, зрителям, демонстрировали для пущей крутизны. И да, работал он на 6502 проце, если верить коду на экране, мощностей которого несколько маловато для анализа видепотока и работы нейросети :)
@@bytefuИх там тысячи. 😊
Архитектура Intel x86 тоже родом из 1970-1980х годов, однако в i386 в 1986 году появился защищённый режим процессора, которых мог адресовать 4 Гб ОЗУ (гигантский объём памяти по меркам тех лет). И ничего, архитектура живёт и развивается. Даже микроконтроллеры на архитектуре i8051 до сих пор актуальны. Проскакивала информация, что у военных США i386 в некоторых устройствах до сих пор работают.
C++ - это просто надстройка над Assembler.
Язык PHP и многие другие имеют интерпретатор, написанный на С++.
На Assemblere написаны ядра операционных систем (Window, Linux и др.), драйверы к принтерам и мн. др.
Ядра и драйвера более на си пишутся, с ассемблерными вставками
@@ownedbyptrХотя пример KolibriOS показателен - там всё на ассемблере писано.
@@Al.Sy. ну в пет операционках понятно, можно базовые компоненты и на ассемблере написать, но вот когда у ядра сложная архитектура, там на одном ассемблере все сложно будет
Писать на асм интересно и позновательно. Заставляет полность осознать архитектуру и не только процессора, но и периферии. Многие программисты даже не представляют как работают простейшие мышка и клава, вроде и не критично, но... странно это :)
По сути это самый бесполезный урок про ассемблер, просто рассказать про теоретически, как он работает, в добавок, ещё сказать, что это не нужный язык программирования, судя по выводам. В уроке ужасно рассказано, про сам код ассемблера, даже опущены флаги, и очень важное, это ограничения регистров. Пример разобран просто слишком бегло, как будто по листочку пробежал
Это современный программист😂
@@АлексейБ-ф2р к чему ты это написал. урок и вправду как будто для тех кто уже знает об ассемблере. весь урок в том что ну мол, есть несколько команд, их вот можно использовать, еще можно вот на сайте посмотреть во что компилируется твой хай левел код. что я должен был вынести из урока вообще не понятно
Отличный базовый урок, рассказывающий теорию и дающий порцию практических знаний. Чо ещё надо-то
Много чего, если бы я не знал освещеную историю то ничего бы не понял, очень бегло и водянисто@@UnderFromAbove
На работе до сих пор используют ассемблер. К примеру, так можно написать действительно быстрый, гибкий и компактный загрузчик для железки.
Жаль, что не упомянули о SIMD-оптимизациях. А это пожалуй одна из немногих причин, по которой все еще нужно изучать ассемблер.
Благодаря тебя, я снова попытаюсь!
Из применений кода на ассемблере, что я видел, кроме обозначенных - это работа с микроконтроллерами и векторизация кода со сложными вычислениями (выжимание максимума из SSSE/AVX, что компилятор практически никогда не делает) в высокопроизводительных системах.
Это да) При том, что сейчас можно запустить микроконтроллер на MicroPython - слегка урезанном питоне. ESP32 S2, например. Хотя в этой сфере С++ (а иногда и чистый С) пока все равно на первом месте.
@@bigbugzboney Да хоть любой язык с поддержкой llvm в качестве бэкенда. И если посмотреть библиотеки для каких-либо тяжелых вычислений (я проверил только для обработки сигнала (esp-dsp, если точнее), т.к. самое используемое на таких устройствах), то можно увидеть, что в них есть приличные части на ассемблере.
Прикольно прикольно)))) неплохая напоминалка получилась))) спасибо
я не уверен, но мне кажется, что ассемблер это супер тема для прямого обращения к процессору, можно же буквально что угодно сделать с любой техникой где есть проц или любой микроконтроллер
Не всё, если запускать программу после ассемблирования в ОС, работающей в защищённом режиме. Не даст она изменить значения GDT, LDT и исполнить другие привилегированные команды.
@@Al.Sy. Прям таки не даст?
Увидел 'mov eax, 0', и кровь предков вскипела в моих жилах - настолько использование 'xor eax, eax' доведено до автоматизма. 😉
А если требуется сохранить флаги и обнулить eax?
@@ЮраН-ь2к Не поверишь, pushf/xor/popf всё равно короче (но не всегда так же быстро).
Для узкоспециализированных задач ассемблер прекрасно используется, для узкоспециальных процессоров в специальных областях)) Я даже на нём недавно писал))
Благодарю за видео!
Изучал asm для ломания клиента через реверс WOW в 2008 году, вытаскивал опкоды игры для написания своего сервера. 😊😊😊
Успешно?
не знаю, как ассемблер, а вот подача материала на высоте. Мне даже любоптыно стало, как вы делаете все эти переходы и увеличение масштаба в нужном месте. Хотя выглядит как запись экрана.
Шучу, ассемблер, понятное дело, тоже на высоте.
В этом году закончил высшее образование и на последнем курсе у нас был Ассемблер. То что объяснял препод, было равноценно китайскому языку. Приходилось разбираться самим и занимало это не мало времени, но в конечном итоге все разобрались и сдали. Этот опыт я не забуду никогда, потому что только при изучении программирования на ассемблере я понял, как работают языки программирования и чем отличается высокоуровневый язык от низкоуровневого
Интересный у Вас ВУЗ!
Нам на мех-мате после архитектуры фон Неймана , объяснили что такое машинные коды, затем ассемблер, а дальше остальные языки, причем не только процедурные. Иначе непонятно будет, как твою "писанину" проц с переферией "переваривает". А понятие оптимизации алгоритмов и ресурсов будет как у разработчиков винды!!!
Странная методика обучения у вашего ВУЗа. Нас сначала обучали математике (численные методы, матрицы, графы, ряды и т.п.), логике, булевой алгебре. Потом была цифровая техника (электроника). Потом изучали различные архитектуры построения процессоров. Затем их устройство: порты ввода-вывода, АЛУ, программный счетчик, регистры, память и организация работы с ней, шины данных и адреса, таймеры, прерывания и.т.п. Все это сопровождалось подачей технологий изготовления кристаллов процессоров и изучением разных протоколов обмена информации и цифровых шин. Потом было программирование на ассемблере. И только после этого рассматривались языки высокого уровня. Это был конец 80-х начало 90-х. Сегодня говорят, что можно програмиста подготовить на 3-х месячных курсах. Это бред! Одна математика займет года 3 минимум. А без математики программистом никогда не стать. Если задача программиста состоит только в воде-выводе каких-то данных и их сортировке по определенным признакам, то 3-х месяцев хватит. Такой херней я занимался в школе на уроках программирования на БК-0010 с Паскалем. Если же вам нужно принимать, обрабатывать, анализировать по разным признакам данные и выводить результат, и все это производить в режиме реального времени, то придется учиться как минимум 5 лет в ВУЗе. Плюс для таких задач придется создавать свое железо (как минимум свою перефирию, а зачастую все систему целиком) и программировать его. Для чего же придумали все эти краткосрочные курсы программирования? Это результат желания быстро восполнить недостачу кадров в этой сфере, снизив при этом их стоимость. То же самое наблюдается и в сфере образования: можно пойти на курсы переподготовки и стать учителем начальных классов. Это решение недалеких людей, разваливших систему подготовки инженерных кадров. Никакого положительного результата такое решение не даст.
@@СергейГоробец-р4с
"Если задача программиста состоит только в воде-выводе каких-то данных"
Задача ВСЕГДА так стоИт!
1. Уровни разные. От интерпретаторов до логического вывода.
2. Курс управления базами данных в 3 месяца не запихаешь.
3. Рисовать интерфейсы (web - например) - легко, особливо когда писать не надо, а пользуешься каким-нибудь "мастером".
4. Прикрутить п.3 к базе - см.п.2.
ЗЫ: У Вас тоже ВУЗ больше технический, чем университетский.
@@СергейГоробец-р4с, подскажите, пожалуйста, в каком ВУЗе вы учились?
@@airman8215 вы хотите пройти обучение в нем? Я бы не стал этого делать. Прошло много времени (30лет). В жизни все сильно изменилось. Утерено 2 покаления в цепи передачи знаний (это инженерные кадры и преподаватели). Выпускники моего ВУЗа сегодня показывают слабые знания. Есть, конечно, исключения. Но в целом уровень сильно упал. Дело в том, что обучение это не только теория, но и практика. Когда учился я, нам некоторые дисциплины преподавали не академические преподаватели, а работающие инженеры, технологи. Плюс была система так называемых базовых кафедр. Мы были прикреплены к каким-то конкретным НИИ и предприятиям, где нас учили применению теории на практике (это самое ценное). Сегодня НИИ и предприятий можно сказать нет. В итоге проблема сегодняшнего дня заключается в том, что наши инженеры создают проекты на бумаге, но не знают как их реализовать в жизни, да еще в условиях ограниченных возможностей. Технологов вообще нет. Конечно что-то осталось, но этого очень мало для решения насущных потребностей нашего общества.
Могу дать вам только рекомендации по выбору ВУЗа. Основным критерием я бы выбрал высокие требования к уровню знаний для поступления в него. Я не ориентируюсь в сегодняшних баллах ЕГЭ, и не знаю как отображается количество баллов на уровень знаний, но думаю принцип вам понятен.
И самое главное. Чтобы зачать разум, нужно трахнуть мозг. Чтобы при этом не сойти с дистанции или не отъехать в кащенко, нужна четкая система организации рабочего времени с полноценным отдыхом (сном) и питанием. Короче все точь-в-точь как у спортсменов. Это не так сложно реализовать. Главное - дисциплина в соблюдении режима.
Очень хорошая подача роликов, легко и интересно смотреть
Как у вас MOV и BEQ оказались в одном ряду?
Мужик спасибо тебе, не прекращаю тебя смотреть...все руки до Котлина не доходят....чуток изучал и чат джпт и до этого ещё генераторы фоток.....блин времени нет, но на тебя есть, успехов)
Я так понимаю, что ассемблер нужно хоть как-то освоить уже хотя бы потому, что это ключ к пониманию работы компьютера и оптимизации кода в будущем. Ну а кого затянет, то ещё и компиляторы будете фиксить и обратным инжинирингом заниматься)
Честно говоря не часто слышу об оптимизации кода на таком уровне. К счастью или к сожалению, мощности ростут и обычно достаточно просто написать код на высоком уровне, но прямыми руками, чтобы даже не самые современные железки это дело тащили
Есть проект usb device'а на микроконтроллере атмега, там вроде бы на обработку бита есть время равное 8 командам😂 Эта часть сделана на асм, вот тут настоящая ассемблерная оптимизация💪🤣 А на пука это зачем
Полная херня
хз, если это веб разработка например, то смысл знать как работает асэмблер? Там юзается на фронте js. Если нормально пишеш на нем, то твой код уже будет оптимизированный.
Для многих программистов будет полезным увидеть во что конкретно компилируется их говнокод!
Спасибо. Было очень интересно .
Кто бы что ни говорил, а Ассемблер это "кирпичики" из которыx можно сложить все что угодно. Только на Ассемблере можно получить самое большое быстродействие вычислений, самое малое занимаемое место в памяти, все зависит от искусства программиста. Программа, написанная на Ассемблере практически никогда не имеет багов.
Ассемблер - это как молекулярная генетика.
Самое большое быстродействие вычислений будет тогда и только тогда, когда все сделано самым оптимальным образом. На ассемблере легко и просто написать код хуже, чем будет код от сишного компилятора. Было время, я много писал на Ассемблере всякое... Начинал с 8-битного 6502/6510. До сих пор отлично помню его систему команд и все его 13 методов адресации...
@@tuttifrutti6603 Все зависит от опыта программиста. Для некоторыx заданий можно так оптимизировать код, что никакой компилятор такого не напишет. Например, если взять ардуино, то для кода простой мигалки потребуется около килобайта, когда ассемблером код пишется в 11 байт
я в 1994-м написал на ассемблере симуляцию "жизнь".
сложность заключалась в том, что сделано это было для системы RSX11, в качестве устройства вывода использовался алфавитно-цифровой терминал, подключенный по последовательному порту, обмен происходил непосредственно через адреса порта с перехватом прерывания и шел в реальном времени, т.е. во время симуляции наблюдатель мог перемещать по экрану курсор и добавлять или удалять "бактерий".
Начал знакомиться с компом с Sinclair's ZX Spectrum. Там был встроенный BASIC, но обычно он использовался, чтоб запустить программу, которая была написана на ассемблере. 🙂
Потом занялся микро-контроллерами, где тоже все делалось тогда на ассемблере. Потом увидел PC. Ну, понятно же, что если что-то непонятное при компиляции любого языка происходит, то сразу смотрим дизасм, чтоб понять, что на самом деле происходит.
Бывает, в одном проекте используется несколько типов разных процессоров, и соответственно, разные ассемблеры. Их много разных. Забавно, что некоторые камни даже внутри одного производителя, могут иметь одни опкоды, но не иметь других, а третьи выполняются по разному, в зависимости от конкретного процессора.
Кстати, С начал использовать, когда уже в ассемблере начал городить макросами функции с параметрами, и понял, что это уже сделано, и названо С.. XD Теперь на АСМе почти вообще писать не приходится, разве что иногда мелочевку в каком-нить маленьком чипе типа AVR TINY.
А еще говорят, что если что-то не получается сделать на ассемблере, то нужно переходить уже к паяльнику. И это не метафора! =)
У автора дикция не самая лучшая, а он ещё тараторит, чтобы кем-то казаться. Слушать реально проблематично! За освещённую тему спасибо!
Всем привет!
Когда то был Паскаль, но он не пошел, после был ассемблер, да было круто,
правда хобби никак не связано с работой, пока учил асм, уже пришла Винда и все такое,
и я застрял в тех годах )
Сейчас хочу начать С++, хотя начинал и бросил.
Сложно языки высокого уровня после ассемблера.
Мож что-то не так , не знаю.
Но думаю верно, что нужен проект, практика, цель, своя команда чтобы поддерживать друг друга,
тогда учеба идет быстрее и веселее.
Люди дружите!
Всем здоровья!
Зафлексил nop цепочками
Супер! Спасибо!
Ассемблер нужно хорошо знать тем, кто занимается ромхакингом (модификацией старых игр)
нужно знать всем, ибо ни игр, ни компиляторов всех языков - без этого не получится.
Ещё школьником, в 90х, изучал ассмеблер для zx-spectrum. Жил тогда в Баде. Родители ездили в Улан-Удэ или Читу (не помню) и купили книги по ассемблеру. К сожалению, после школы путь сложился иначе и с программировать на долгие годы пыло покончено. Но сейчас на питоне пишу.
Для микроконтроллеров можно на ассемблере писать и пишут, крошечные attiny 13 например. Какие-нибудь мигалки для гирлянд или терморегуляторы. Там 64 байта памяти. Автору видео можно было про них упомянуть. Просто и наглядно. И программы простые и ассемблер простой. За вечер можно копеечной отладочной платой освоить.
Рекомендую turing complete, научитесь читать и писать код даже ближе, чем ассемблер, правда 8-ми битный, но для понимания и общего развития очень классно
На самом деле ассемблер самый простой язык программирования. На нем можно написать очень быстрый оптимизированный код который не скомпилирует ни один компилятор, просто оперируя регистрами. Компиляторы как правило все делают через память. Регистр это быстрая переменная и часто в коде возникают ситуации когда множество регистров на том или ином этапе выполнения не задействованы, или не будут задействованы и программист их оптимально использует, не обращаясь к памяти.
Помню, на восьмибитном Зевсе писал программу преобразования азбуки морзе в текст.
Программа в несколько килобайт, но целую ученическую тетрадь исписал пометками, что куда пойдет и откуда чего забирать.
Ассембли как инструмент программирования нужен для всяких драйверов и ос, например, перевода проца в разнобитные режимы, специальные прерывания uefi bios и т.д.
Спасибо за профессиональное видео!
Полезное видео. И да, если вы пойдёте в эмбедед, то лучше вам с порога уже знать nasm. Просто потому, что не важно, какой язык вы юзаете - си или раст, но оптимизацию узких мест вам всё равно придётся делать на ASSэмблере.
Сейчас сишные компиляторы таковы, что надо быть реально крутым спецом, чтоб суметь написать ассэмберный код, который будет хотя-бы не медленнее. Да и мощность железа в современных микроконтроллерах - для большинства задачь хоть попой ещь, не упрешься в недостаток. Даже код для дронов на обычной атмеге - без ассэмблера написан. Скорости си достаточно, чтобы 300 раз в секунду пересчитывать матрицу 4*4 и управлять всеми моторами (кто видел код квадрокоптпров - поймет). Машинное зрение может сожрать ресурсы - но сам код выполнения нейросетей давно написан, там не надо ничего оптимизировать... разьве что размер модели - меньше модель, быстрее обрабатывается.
Только в эмбедед и остался сегодня асм, наверное. Ну ещё наверняка для драйверов, но по сути это тот же эмбедед
Ass we can
обязательно попробую этот инструмент, прямо открытие!
я постоянно использую асм для оптимизации бутылочных горлышек
Познавательно! В начале многова-то не нужной анимации, но в целом, полезное видео.
No i kolejny raz cały semestr na uczelni w 10 minut
Co ty robisz tu?! Jak ty go rozumiesz? Spoko!
Есть. Начал увлекаться ретро-компьютерной тусовкой, выучил z80, пишу потихоньку всякие штуки.
Чтобы уметь читать Ассемблер много ума не надо, а вот чтобы понять прочитанное и разобраться в коде, нужен хоть какой-то опыт программирования на Ассемблере. Хоть какой-то навык мышления в этом деле. Больно уж много движений с простыми операциями: сохранить текущее состояние регистров, где-то что-то взять, куда-то положить, произвести нужную операцию, получить результат, где-то его сохранить, восстановить прежде сохранённые состояния регистров, передать управление…🤯
Зачем что-то на нем писать чтобы понять написанное? Как по мне так это куда приятнее, ломать голову над простейшей операций написанной в 20 строчек кода, но простыми операциями, чем бесконечно бегать по форумам и справочникам в поисках информации о том как работает метод библиотеки Васи с соседнего двора
Да там еще так написано может быть, что хрен разберешься. Я еще делал так, в начале простой код, потом хрен пойми что, по этому хрен пойми что пробегался логическими командами там биты инвертировал к примеру, а потом уже запускал этот код. Этим ассебмлером начинал заниматься еще на zx spectrum (точнее contact 128 у меня был с муз. процессором - крутой)), а потом 486й появился. Вот лет 5 я больной на голову ребенок развлекался с этим делом. Сейчас бы сказал, что на асме не нужно писать что-то сложное, когда несколько тыс строчек кода, такое тоже делал. Лучше делать это на более продвинутых языках - асм реально очень много времени убивает, в т.ч. и на тестирование. А сейчас еще по старому если делать - по любому винда будет сопротивляться )). Вообще посмотрел видео, какая-то ностальгия чтоли )).
@@АндрейА-д3ф ну писать на асембе, уже очень давно глупо. Как и сказал автор, сейчас важнее уметь читать диасеблированный код программ которые написаны на других языках. Фактически алгоритмы действий с ячейками памяти усложняются и ризона писать это на асемблере нет никакого, учитывая что прорыв в области вычеслительных мощностей ещё не прекратился. Когда вычеслительных мощности достигнут приделе, думаю люди к этому вернуться
@@darkcorn6059 Так раньше комп был 4мб памяти и это круто, а сейчас у меня в ноуте 64гб озу и проц 13980hx, на 32 потока, раньше на серваках о таком мечтать не приходилось))). Сейчас надо свое время экономить, а не машинное)).
речь тут скорее о реверсе, отладке, а не написании своего кода. Тогда надо смотреть в стэк. Точки возврата и параметры вызовов. Что на входе и на выходе. А зачем вам знать как это обрабатывается внутри?
Ассемблер, в основном, используется в глубине HAL кросс-платформенной операционной системы. Там где для реализации функционала ОС требуется исполнять специфичные инструкции процессора.
Другой нишей для ассемблера является программирование примитивных микроконтроллеров, вроде i8051, хотя для них часто используют Си.
Третьей, исчезающе-маленькой нишей является глубокая оптимизация исполнения (чаще всего, ради уменьшения задержек), причем, чаще всего с теми же микроконтроллерами.
Никто не кодит на асемблеллере
Люди, программирующие сверхмалые микроконтроллеры
*Психоделический смех*
и сверхмалые, и просто малые, и даже "самые большие" - для космоса и армии и оптимизация размера кода, и скорость обработки критичны.
Ну вот смотри... если круг поделить на 256 частей, то cos() будет искать проще.... cos - это кось... насколько косит от прямой. 1 - не косит, 0 - вообще мимо.
кось и сила - это cos и sin... например при кидании снаряда чтобы попасть по косой нужна сила... другая сила нужна при кидании по прямой...
если круг поделить на не 360 частей (что произошло от оборотов вокруг Ссолнца)... а на 256 ( что удобно для двоичных вычислений),... то полный круг - это 1, полкруга - это 128/256, четверть - 64/256, восьмая асть круга = 32/256. 1/16 и далее заграют по-новому.
на практике для отрисовки UI достаточно деления на 256 частей.и никаких float. число можно хранить в ubyte.
и если раньше круг равен 2PI , полкруга PI, 90 градусов - PI/2 ,, то при бинарной записи круг = 256, полкруга 128, а 90 градусов = 64.... получается, что PI = 128 .
Длина окружности также вычисляется по формуле L = 2 PI R
L = 2 * 128 * R
возможно, это самый высокопроизводительный способ считать cos() и рисовать круги.
Поскольку экран в пикселях... а они всегда целые... то и вычислять хорошо бы в целых.
Ну и осмелишься ли предположить каким будет год в 256 дней ?
Дни станут длиннее.
В игре Doom так и сделано, только частей больше.
Я еще в школе научился очень легко программировать на советских программируемых калькуляторах, где логика схожа на ассемблер, но уровень немножко повыше. А уже в универе, как отрубило, не заходил asm ни под каким предлогом. Спасибо, друг, что смог качнуть этот (мой) маятник затыка в нужном направлении!!!!
Писал, пишу и буду писать на ассемблере под микроконтроллеры.
Жму руку !
А зачем если есть С??!
@@thebestmusicforrelaxationa2142, зачем люди играют в шахматы, если есть тетрис?
А если серьёзно, то компилятор Си частенько такие штуки отчебучивает, что потом искать проблему становится себе дороже. Причём одна проблема может возникать при одних настройках оптимизации и другая проблема при других настройках оптимизации или при использовании другого компилятора или линковщика.
Конечно, никаких проблем нет, если весь ваш код состоит из main в которой просто сравнения, немного сложения, вычитания, чуть-чуть вывода в порты и ввода. Но как только вы начинаете привязываться к времени, например, вам нужно выдать в некий порт 90h и строго через 120 микросекунд выдать в него 55h с погрешностью +/- 5 микросекунд, то всё может полететь к чертям собачьим и вы будете днями искать где же что идёт не так, проде и прерывания запретили или в прерывании это делаете, вроде и ... Или вот ещё место, которое мне "нравиться": на сях - параллельная работа 2 [3,4,...] ядер. Но всё же моё любимое - время. На память пришел случай из практики: было нужно 1 секунду собирать данные, простейшие, вроде читать с N тактовой наличие ЛОГ1/0 на определённой ноге, а потом провести их анализ, вот только анализ уже был не простым, с массой умножений, делений, синусами и извлечением корней и результат надо было получить к концу следующей секунды и в зависимости от результата установить или сбросить несколько ног. Контроллер для энергосбережения работал на сильно задушенной тактовой частоте. Просрочить нельзя, джиттер по выдаче результата тоже недопустим, нужно строго 1 секуда интервал. Заменить контроллер уже нельзя, изменить тактовую уже нельзя, потому что устройство уже есть и не одно, а много, их очень много и переделывать платы, обвязку будет сильно дорого. На сях это не лезло совершенно, на ассемблере лезло ещё и время оставалось.
Не все же люди программируют мигание светодиодом на платке ардуино или веб-сервер с показом температуры и влажности дома на ESP32, некоторые решают задачи промышленного и даже мирового масштаба, ну там управление телескопом орбитальным или миллионами стиральных машин или имплантируемых устройств впрыска лекарств в кровь.
Ооо прикольно.
Как 100 лет назад писал на асме, жаль ничего не сказал про "С--"
И теперь надо подумать, какие параметры выставить на Генту, чтобы это все еще раз перекомпилировать....
Как всегда отличный ролик🎉
Жду 10 часов С++
10:50 - и самое главное! Наиглавнейшее!!! Суть всех сутей и тайна всякого программирования на ассемблерах.
Важно знать АРХИТЕКТУРУ ЭВМ ДЛЯ КОТОРОЙ ПИШЕТСЯ КОД НА АССЕМБЛЕРЕ.
А архитектуры, к слову сказать, бывают не только x86 и ARM.
ты как то начал про ассемблер, но не объяснил начинающим что это такое....ps что это по сути команды процессора буквами...
Да он вообще ничего не объяснил. Показазал косяки отдельного сишного компилятора на выходном асм коде
Есть такие ))) Кодил на ASM в молодые годы. Начинал с игр на ZX Spectrum закончил системными прогами на IBM PC ))) Скорее всего 90% меня не поняли )))))))))))
научишь?😅
@@mamainelohokda заплатишь? 😅
Ассемблер надо учить, чтобы работать над проектами, как, например, KolibriOS.
Сколько тебе лет, только честно?
Программируя под avr регулярно сталкиваюсь с багами оптимизации gcc. Наиболее популярный - это глобальная переменная, которая меняется в прерываниях и считывается внутри main. Компилятор не видит, в каком месте происходит вызов прерываний и, видимо, думает, что переменная нигде не меняется, а потому делает ее локальной и по сути константой. Лечится добавлением ключевого слова volatile при объявлении переменной, что попросту запрещает оптимизатору трогать переменную своими кривыми ручками.
Это не баг, это канон.
Читайте стандарты C99 и поздние, используйте опции -Wall -Wextra -Werror, тогда не будет заблуждений насчёт "глюков" AVR-GCC.
Есть просто потрясающая игра Turing Complete. В ней в понятной форме с нуля сам собираешь простые процессоры и как раз к середине доходишь до ассемблера, которые еще и сам пишешь. Порог вхождения вообще отсутствует- главное желание и умение понимать двоичную логику. Для желающих ознакомиться с тем как работает компьютер на самом низком уровне - самое идеальное.
Боже, ну и 6peд несешь! Программа ассемблера работает с прерываниями, то есть обращается либо к системным подпгораммам биоса, либо напрямую к портам ввода вывода. Второе, любая программа исполняется в машинных кодах, а ассемблер это лишь мнемоническая, условная запись, чисто для более просто восприятия человеком, и не более. Ассемблер не является никаким " промежуточным звеном", между высокоуровней программой, - ассемблер и машинные коды, это одно и тоже. Третье, программирование на аасеблере не только ничем не сложнее, скажем таких языков, как питон или с++, с их сложной системой абстракций, но и намного проще. Достаточно просто знать, что делает то или иное прерывание.
Учи матчасть, не позорся.....
Недавно кодил небольшую программу для стм32. сначала на си. Посмотрел листинг, тряхнул головой написал на асме. В результате обошелся 12 регистрами процессора, без всяких стеков и обращений к озу.
Утверждение, что мало кто в современном мире программирует на ассемблере - такое себе. А как же драйвера, компоненты ядра операционок, системные dll, прошивки, API микроконтроллеров, компиляторы и много чего еще? В этих областях огромный процент специалистов. Простому парсерописателю и покрасчику кнопок на высокоуровневых языках он не нужен ясное дело. Там думать надо как эффективно каждый бит использовать, вся идеология написания кода строится в том числе на защите от утечек памяти. И таких специалистов, кстати, думается мне, еще нескоро заменит нейросеть.
Надо было поломать голову, чтобы перемножить числа на ассемблере!
Ни один современный программер не догодается что для умножения на 2 надо было сдвинуть двоичный код числа вправо, а для умножения на 3 сдвинуть и сложить с первым и т.д.
Когда-то давно у меня не было даже ассемблера, а кодить хотелось. Была книга под названием "Машинные коды" по ней мнемоники ассемблера переводились в машинный код и вводились в помять средствами встроенного бейсика (команда POKE). Затем передача управления (USR) и ... сумасшедшая производительность по тем временам. Компьютер назывался ZX-Spectrum. Сейчас ассемблер используют для оптимизации узких мест (интринсики).
Виндертон чепуха, кормит вкатунов калом, а те рады в коментариях
На голом ассемблере почти не писал, но в школьные(90-е) годы очень много чего написал на Паскале с блоками ассемблера (Asm...End). Без него работа с прерываниями BIOS была практически невозможной, а следовательно и со всем что подключалось через внешние порты. Спасибо за частичку детства ))))