Практика языка C (МФТИ, 2023-2024). Семинар 6.1. Изобретаем ассемблер.

  Рет қаралды 19,544

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы начнём своё путешествие в ассемблер. Для начала мы изобретём свой собственный несложный ассемблер и даже потренируемся писать для него кодировщик и декодер инструкций. Далее мы посмотрим на более взрослый x86 его регистры и систему команд. Я также устрою большой сеанс live-coding и в конце мы подумаем над одной увлекательной головоломкой.
Семинарист: Константин Владимиров.
Дата: 26 февраля 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.
Предыдущий семинар: • Практика языка C (МФТИ...
Следующий семинар: • Практика языка C (МФТИ...
Слайды к занятиям: cs.mipt.ru/wp/?page_id=7775
Примеры кода: github.com/tilir/c-graduate
Задачник: olymp1.vdi.mipt.ru/
Timeline
00:00 Микрокалькуляторы
05:05 Придумываем кодировку
13:53 Первая программа на ассемблере
21:50 Три задачи: encoder, decoder, simulator
26:55 Регистры и система команд в x86
36:20 Время решать задачи
39:30 Пример решения Problem AS2, live coding
01:11:10 Условные переходы и первое упражнение в угадывании кода.
Errata
* слайд 13 для jle/jng флаг четности pf вместо флага переполнения of

Пікірлер: 54
@user-xd1rr1vj3f
@user-xd1rr1vj3f 3 ай бұрын
Прекрасное объяснение. Огромное спасибо Вам за ваш труд.
@user-tp1qn2wt6t
@user-tp1qn2wt6t 3 ай бұрын
Огромное спасибо вам!!! Вы прям настоящая находка! Низкий вам поклон!!!
@misternether8602
@misternether8602 2 ай бұрын
Отличное объяснение. Обычно начинают грузить терминами, а тут сразу ясно не только что работает, а как и почему работает
@andreykhakimov5588
@andreykhakimov5588 3 ай бұрын
Восхищен как никогда! Лекция - огонь! Прекрасная подача материала!! Спасибо :)
@MikhailGoncharov-tl4cr
@MikhailGoncharov-tl4cr 3 ай бұрын
Рад вас видеть хорошего вам здоровья
@alexandrgonzales6503
@alexandrgonzales6503 3 ай бұрын
Как всегда доходчиво, ёмко и интересно. Спасибо
@kirich_yo
@kirich_yo 3 ай бұрын
посмотрел на одном дыхании, вы лучшие как всегда
@phil2964
@phil2964 2 ай бұрын
Просто огонь, спасибо огромное👍👍👍
@user-ne4bd3ry1n
@user-ne4bd3ry1n 3 ай бұрын
Замечательный преподаватель
@moshamiracle
@moshamiracle 2 ай бұрын
Спасибо за Ваши лекции, всегда рада их слушать и внимать
@moshamiracle
@moshamiracle 2 ай бұрын
@@hondaxxx9220 а как связано то, что я девочка и то, что мне нравятся ассемблеры? )
@tilir
@tilir 2 ай бұрын
Не обращайте внимания на кретинов. Если что у меня в группе для которой я читаю этот курс целых 4 девушки. Спасибо за добрый отзыв ))
@andrewkot5212
@andrewkot5212 2 ай бұрын
Лучший контент по копутер сайнс и си!!!
@user-wv8lb7ow6k
@user-wv8lb7ow6k 3 ай бұрын
спасибо за очередной урок)
@user-kk7xt3uo7x
@user-kk7xt3uo7x 2 ай бұрын
Великолепная лекция! Сразу видно, что преподаватель знает и любит свой предмет. Очень интересная лекция, лайк и подписка однозначно. Но мне показалось, что есть несколько мелких неточностей: 12:20 Illegal можно сделать "11111xxx", а не "111111xx"; 21:27 Каждая команда кодируется опкодом НЕ "от 0 до 6", а опкодом от "1 до 6" (написан текст на слайде, п.3); 29:00 Intel 4004 - 4-битный микропроцессор, поэтому регистры НЕ 8-битные, а 4-х битные.
@sergeyegorov8018
@sergeyegorov8018 2 ай бұрын
Нас так не учили! Очень интересно и круто
@theflipofun6858
@theflipofun6858 2 ай бұрын
У нас вообще лекций не было по Ассемблеру, тупо грузили практиками и требовали понимая, что в теории невозможно. Тогда я просто забил на это все дело, а оказывается можно объяснять понятно и интересно. Все таки не я тупой, а зависит многое от преподавателя
@exx-ns4tt
@exx-ns4tt 2 ай бұрын
корешу на экзамене асм попался, хотя ни одной лекции по нём за семестр не было, только плюсы
@kvt5002
@kvt5002 Ай бұрын
Посмотрел все лекции на этом канале. Начал видеть сквозь стены.
@kissejau6505
@kissejau6505 2 ай бұрын
жора лучник респект!
@worseize
@worseize 2 ай бұрын
Шедевр
@ode2877
@ode2877 2 ай бұрын
Неожиданно для себя захотел написать ассемблер на си))
@_test_test
@_test_test 2 ай бұрын
прослушал первую минуту и сразу понял, что чел шарит. респектово
@stanislavstanislavius7618
@stanislavstanislavius7618 15 күн бұрын
Только на 6-м семинаре удалось это понять?
@_test_test
@_test_test 15 күн бұрын
@@stanislavstanislavius7618 ну ты будто первый день в интернете. для новичков расскажу - иногда в рекомендациях попадаются случайные неупорядоченные видео
@Japrajah
@Japrajah Ай бұрын
34:04 ну есть еще "AMD64 Architecture Programmer's Manual, Volume 3" . Там vpn не нужен.
@DmitryKandiner
@DmitryKandiner 15 күн бұрын
29:18 Если не ошибаюсь, Intel 4004 всё-таки 4-битный процессор. Возможно, Вы имели в видu Intel 8008?
@stanislavstanislavius7618
@stanislavstanislavius7618 18 күн бұрын
Так вот как работает реверс инжениринг))
@max-he7xz
@max-he7xz 2 ай бұрын
Интересно, а насколько эффективнее использовать при проверке (на 57:14) логическое И с маской и сравнение вместо сдвига? Конечно все зависит от процессора под который все это будет скомпилировано. Но чисто теоретически должно быть быстрее.
@tilir
@tilir 2 ай бұрын
Я думаю до процессора тут не дойдёт -- компилятор очень легко трансформирует такого рода эквивалентные конструкции в те, которые в среднем лучше.
@victormustya1745
@victormustya1745 3 ай бұрын
Костя, а почему ты называешь x86, arm, mips и risc-v микроархитектурами? Это всё-таки просто архитектуры. Микроархитектура это уже про более-менее конкретную реализацию, типа intel redwood cove или arm cortex-a57.
@tilir
@tilir 2 ай бұрын
У меня "микроархитектура" это скорее такое сокращение от "микропроцессорная архитектура". Наверное действительно надо начать использовать этот термин более точно.
@unixway
@unixway 2 ай бұрын
Уважаемый лектор! В целом мне понравилось, но в программах лучше избегать волшебных чисел, тем более, что все опкоды уже описаны в отдельном константном множестве.
@tilir
@tilir 2 ай бұрын
Я совершенно согласен. Но лайв кодинг как формат имеет свои ограничения.
@magicmetal8679
@magicmetal8679 3 ай бұрын
Спасибо. Лекция, как всегда - отличная. Однако ввиду собственного мерзкого характера, не могу не отметить, что в дизассемблере problem_as2 проверять входные данные assert''ом 46:00 не стоит, сами же говорили. Даже невзирая на то, что дальше исходные данные подрезаются до char. Релиз станет "правильно" дизассемблировать всё-таки, изначально неправильный код - "политически неверно". А ещё (дело вкуса, конечно, недолюбливаю линейный switch), я бы полез решать эту задачку вокруг массива структур, индексированных опкодом. В структуре можно было бы даже набором параметров описать инструкцию (например, в какой позиции хранится код регистра в одно-операндной инструкции, если бы она у IN и OUT отличались), и оставить указатель на дизассемблирующую инструкцию функцию (скажем, для ADD/SUB/DIV/MUL - одна функция, IN/OUT - вторая и т.д., они бы получали аргументом указатель на "спровоцировавший" её вызов элемент массива). Но кажется меня тащит в сторону С++, причём процесс осложнён ересью мысленного расширения задачи )).
@tilir
@tilir 2 ай бұрын
Я согласен, проверку надо делать лучше. Но это лайв-кодинг и у меня ограничения по времени. Я рассчитываю что вдумчивое решение этой задачи дома будет куда лучше чем тот скетч который я демонстрирую.
@magicmetal8679
@magicmetal8679 2 ай бұрын
​@@tilir100% правы. Поэтому злоупотребляю комментариями, а не лив-кодингом )), где особый талант нужен. Нет желания в чём-то вас уличить. Тренирую способность критически осмыслить код. Да и читателям, возможно, полезно будет.
@exx-ns4tt
@exx-ns4tt 3 ай бұрын
заранее лайк)
@call_nick
@call_nick Ай бұрын
Можно вопрос. Intel Architectures Software Developer’s Manual описывает архитектуру и команды ассемблера. Там есть целый том Instruction Set Reference, который описывает команды. Я хочу понять, вот эти команды они на каком ассемблере. Есть же fasm, tasm, masm или они все обязаны содержать команды (с таким же мнемоническим названием?), представленные в Instruction Set Reference. Если нет, то какой ассемблер описан в книге. Я попытался найти ответ в самом мануале но не смог(
@tilir
@tilir Ай бұрын
Это тот самый интеловский синтаксис, который мы разбираем у меня на семинарах. И это логично, поскольку это интеловская ISA. Если вы пользуетесь другим синтаксисом, вам надо делать в уме поправку.
@call_nick
@call_nick Ай бұрын
@@tilir Спасибо большое за ответ, Вы направили меня в нужно направление.
@DmitriNesterov
@DmitriNesterov 3 ай бұрын
Здравствуйте! LLVM Assembler? 😊
@tilir
@tilir 3 ай бұрын
Нет, обычный ))
@DmitriNesterov
@DmitriNesterov 3 ай бұрын
@@tilir большое спасибо за Ваши замечательные лекции! А Ваша улыбка для меня бесценна! )
@kirillnikulin605
@kirillnikulin605 3 ай бұрын
@@DmitriNesterov да, точно!! шутка про TDD))) как же я понимаю как круто, когда так, все с лету получается .... эх)))
@DmitriNesterov
@DmitriNesterov 3 ай бұрын
@@kirillnikulin605 таак, не надо меня валить! 😃🤗👍 Ни разу ни с лёту - это раз, я четверть века в плюсах - это два. Константин Игоревич великолепно излагает материал - это ноль!
@w777ru4
@w777ru4 2 ай бұрын
На асемблере начал писать на Агате.
@sibedir
@sibedir 3 ай бұрын
Ну всё, ассемблер готов. Осталось сделать процессор и погнали ))) Как тебе такое Илон Маск?
@evgur4
@evgur4 2 ай бұрын
Вы че?? Вы люди вообще ??
@milsnel
@milsnel 2 ай бұрын
Доброго дня, а разве на 28:20 указатель на следующую инструкцию выполняеят не указатель RIP(он для x64, как раз х64 регистры показаны), ведь EIP он только в x32
@tilir
@tilir 2 ай бұрын
Да действительно rip. Опечатка на слайде, спасибо за внимательность.
@user-rj7kg6jj7k
@user-rj7kg6jj7k 2 ай бұрын
Здорово !!! Был бы я по моложе, лет так 25-30, я бы поступил в МФТИ. Но мне уже считай сорокет - 39, я наверное уже старый для этого.....У меня есть высшее, гуманитарное, но с возрастом (после 30), потянуло в техническую тематику.
@exx-ns4tt
@exx-ns4tt 2 ай бұрын
Ну да, было бы немного странно если бы мужик с детьми в одной группе учился)). Попробуй на заочное поступить
@user-rj7kg6jj7k
@user-rj7kg6jj7k 2 ай бұрын
@@exx-ns4tt - у меня нет детей, у меня никого нет. Да и меня скоро не будет.....
Ну Лилит))) прода в онк: завидные котики
00:51
когда достали одноклассники!
00:49
БРУНО
Рет қаралды 3,8 МЛН
Шокирующая Речь Выпускника 😳📽️@CarrolltonTexas
00:43
Глеб Рандалайнен
Рет қаралды 10 МЛН
Базовый курс C++ (MIPT, ILab). Lecture 3. Имена и сущности
1:16:16
Vulkan vs. OpenGL
1:33
ForceofPhoenix
Рет қаралды 22 М.
LLVM IR training at Intel (in Russian)
1:02:27
Konstantin Vladimirov
Рет қаралды 11 М.
Making Simple Windows Driver in C
7:26
Nir Lichtman
Рет қаралды 311 М.
Каталоги /proc, /sys и /dev // Демо-занятие курса «Administrator Linux. Professional»
1:24:30
Ну Лилит))) прода в онк: завидные котики
00:51