Практика языка C (МФТИ, 2023-2024). Семинар 6.1. Изобретаем ассемблер.
Вставка
- Опубліковано 21 тра 2024
- Практические занятия по языку 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
Прекрасное объяснение. Огромное спасибо Вам за ваш труд.
Посмотрел все лекции на этом канале. Начал видеть сквозь стены.
Огромное спасибо вам!!! Вы прям настоящая находка! Низкий вам поклон!!!
Рад вас видеть хорошего вам здоровья
Восхищен как никогда! Лекция - огонь! Прекрасная подача материала!! Спасибо :)
Отличное объяснение. Обычно начинают грузить терминами, а тут сразу ясно не только что работает, а как и почему работает
Замечательный преподаватель
Как всегда доходчиво, ёмко и интересно. Спасибо
посмотрел на одном дыхании, вы лучшие как всегда
Просто огонь, спасибо огромное👍👍👍
Спасибо за Ваши лекции, всегда рада их слушать и внимать
@@hondaxxx9220 а как связано то, что я девочка и то, что мне нравятся ассемблеры? )
Не обращайте внимания на кретинов. Если что у меня в группе для которой я читаю этот курс целых 4 девушки. Спасибо за добрый отзыв ))
Нас так не учили! Очень интересно и круто
Лучший контент по копутер сайнс и си!!!
Великолепная лекция! Сразу видно, что преподаватель знает и любит свой предмет. Очень интересная лекция, лайк и подписка однозначно. Но мне показалось, что есть несколько мелких неточностей:
12:20 Illegal можно сделать "11111xxx", а не "111111xx";
21:27 Каждая команда кодируется опкодом НЕ "от 0 до 6", а опкодом от "1 до 6" (написан текст на слайде, п.3);
29:00 Intel 4004 - 4-битный микропроцессор, поэтому регистры НЕ 8-битные, а 4-х битные.
жора лучник респект!
спасибо за очередной урок)
У нас вообще лекций не было по Ассемблеру, тупо грузили практиками и требовали понимая, что в теории невозможно. Тогда я просто забил на это все дело, а оказывается можно объяснять понятно и интересно. Все таки не я тупой, а зависит многое от преподавателя
корешу на экзамене асм попался, хотя ни одной лекции по нём за семестр не было, только плюсы
Так вот как работает реверс инжениринг))
Шедевр
Неожиданно для себя захотел написать ассемблер на си))
прослушал первую минуту и сразу понял, что чел шарит. респектово
Только на 6-м семинаре удалось это понять?
@@stanislavstanislavius7618 ну ты будто первый день в интернете. для новичков расскажу - иногда в рекомендациях попадаются случайные неупорядоченные видео
29:18 Если не ошибаюсь, Intel 4004 всё-таки 4-битный процессор. Возможно, Вы имели в видu Intel 8008?
34:04 ну есть еще "AMD64 Architecture Programmer's Manual, Volume 3" . Там vpn не нужен.
Интересно, а насколько эффективнее использовать при проверке (на 57:14) логическое И с маской и сравнение вместо сдвига? Конечно все зависит от процессора под который все это будет скомпилировано. Но чисто теоретически должно быть быстрее.
Я думаю до процессора тут не дойдёт -- компилятор очень легко трансформирует такого рода эквивалентные конструкции в те, которые в среднем лучше.
Уважаемый лектор!
В целом мне понравилось, но в программах лучше избегать волшебных чисел, тем более, что все опкоды уже описаны в отдельном константном множестве.
Я совершенно согласен. Но лайв кодинг как формат имеет свои ограничения.
заранее лайк)
Костя, а почему ты называешь x86, arm, mips и risc-v микроархитектурами? Это всё-таки просто архитектуры. Микроархитектура это уже про более-менее конкретную реализацию, типа intel redwood cove или arm cortex-a57.
У меня "микроархитектура" это скорее такое сокращение от "микропроцессорная архитектура". Наверное действительно надо начать использовать этот термин более точно.
Спасибо. Лекция, как всегда - отличная.
Однако ввиду собственного мерзкого характера, не могу не отметить, что в дизассемблере problem_as2 проверять входные данные assert''ом 46:00 не стоит, сами же говорили. Даже невзирая на то, что дальше исходные данные подрезаются до char. Релиз станет "правильно" дизассемблировать всё-таки, изначально неправильный код - "политически неверно".
А ещё (дело вкуса, конечно, недолюбливаю линейный switch), я бы полез решать эту задачку вокруг массива структур, индексированных опкодом. В структуре можно было бы даже набором параметров описать инструкцию (например, в какой позиции хранится код регистра в одно-операндной инструкции, если бы она у IN и OUT отличались), и оставить указатель на дизассемблирующую инструкцию функцию (скажем, для ADD/SUB/DIV/MUL - одна функция, IN/OUT - вторая и т.д., они бы получали аргументом указатель на "спровоцировавший" её вызов элемент массива).
Но кажется меня тащит в сторону С++, причём процесс осложнён ересью мысленного расширения задачи )).
Я согласен, проверку надо делать лучше. Но это лайв-кодинг и у меня ограничения по времени. Я рассчитываю что вдумчивое решение этой задачи дома будет куда лучше чем тот скетч который я демонстрирую.
@@tilir100% правы. Поэтому злоупотребляю комментариями, а не лив-кодингом )), где особый талант нужен.
Нет желания в чём-то вас уличить. Тренирую способность критически осмыслить код. Да и читателям, возможно, полезно будет.
Можно вопрос. Intel Architectures Software Developer’s Manual описывает архитектуру и команды ассемблера. Там есть целый том Instruction Set Reference, который описывает команды. Я хочу понять, вот эти команды они на каком ассемблере. Есть же fasm, tasm, masm или они все обязаны содержать команды (с таким же мнемоническим названием?), представленные в Instruction Set Reference. Если нет, то какой ассемблер описан в книге. Я попытался найти ответ в самом мануале но не смог(
Это тот самый интеловский синтаксис, который мы разбираем у меня на семинарах. И это логично, поскольку это интеловская ISA.
Если вы пользуетесь другим синтаксисом, вам надо делать в уме поправку.
@@tilir Спасибо большое за ответ, Вы направили меня в нужно направление.
На асемблере начал писать на Агате.
Здравствуйте! LLVM Assembler? 😊
Нет, обычный ))
@@tilir большое спасибо за Ваши замечательные лекции! А Ваша улыбка для меня бесценна! )
@@DmitriNesterov да, точно!! шутка про TDD))) как же я понимаю как круто, когда так, все с лету получается .... эх)))
@@kirillnikulin605 таак, не надо меня валить! 😃🤗👍 Ни разу ни с лёту - это раз, я четверть века в плюсах - это два. Константин Игоревич великолепно излагает материал - это ноль!
Ну всё, ассемблер готов. Осталось сделать процессор и погнали )))
Как тебе такое Илон Маск?
Вы че?? Вы люди вообще ??
Здорово !!! Был бы я по моложе, лет так 25-30, я бы поступил в МФТИ. Но мне уже считай сорокет - 39, я наверное уже старый для этого.....У меня есть высшее, гуманитарное, но с возрастом (после 30), потянуло в техническую тематику.
Ну да, было бы немного странно если бы мужик с детьми в одной группе учился)). Попробуй на заочное поступить
@@exx-ns4tt - у меня нет детей, у меня никого нет. Да и меня скоро не будет.....
Доброго дня, а разве на 28:20 указатель на следующую инструкцию выполняеят не указатель RIP(он для x64, как раз х64 регистры показаны), ведь EIP он только в x32
Да действительно rip. Опечатка на слайде, спасибо за внимательность.