Практика языка 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

КОМЕНТАРІ • 54

  • @user-xd1rr1vj3f
    @user-xd1rr1vj3f 2 місяці тому +15

    Прекрасное объяснение. Огромное спасибо Вам за ваш труд.

  • @kvt5002
    @kvt5002 17 днів тому

    Посмотрел все лекции на этом канале. Начал видеть сквозь стены.

  • @user-tp1qn2wt6t
    @user-tp1qn2wt6t 2 місяці тому +9

    Огромное спасибо вам!!! Вы прям настоящая находка! Низкий вам поклон!!!

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 2 місяці тому +9

    Рад вас видеть хорошего вам здоровья

  • @andreykhakimov5588
    @andreykhakimov5588 2 місяці тому +8

    Восхищен как никогда! Лекция - огонь! Прекрасная подача материала!! Спасибо :)

  • @misternether8602
    @misternether8602 2 місяці тому +5

    Отличное объяснение. Обычно начинают грузить терминами, а тут сразу ясно не только что работает, а как и почему работает

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n 2 місяці тому +4

    Замечательный преподаватель

  • @alexandrgonzales6503
    @alexandrgonzales6503 2 місяці тому +8

    Как всегда доходчиво, ёмко и интересно. Спасибо

  • @kirich_yo
    @kirich_yo 2 місяці тому +5

    посмотрел на одном дыхании, вы лучшие как всегда

  • @phil2964
    @phil2964 2 місяці тому +5

    Просто огонь, спасибо огромное👍👍👍

  • @moshamiracle
    @moshamiracle 2 місяці тому +4

    Спасибо за Ваши лекции, всегда рада их слушать и внимать

    • @moshamiracle
      @moshamiracle 2 місяці тому

      @@hondaxxx9220 а как связано то, что я девочка и то, что мне нравятся ассемблеры? )

    • @tilir
      @tilir  2 місяці тому +3

      Не обращайте внимания на кретинов. Если что у меня в группе для которой я читаю этот курс целых 4 девушки. Спасибо за добрый отзыв ))

  • @sergeyegorov8018
    @sergeyegorov8018 2 місяці тому +3

    Нас так не учили! Очень интересно и круто

  • @andrewkot5212
    @andrewkot5212 2 місяці тому +4

    Лучший контент по копутер сайнс и си!!!

  • @user-kk7xt3uo7x
    @user-kk7xt3uo7x 2 місяці тому +2

    Великолепная лекция! Сразу видно, что преподаватель знает и любит свой предмет. Очень интересная лекция, лайк и подписка однозначно. Но мне показалось, что есть несколько мелких неточностей:
    12:20 Illegal можно сделать "11111xxx", а не "111111xx";
    21:27 Каждая команда кодируется опкодом НЕ "от 0 до 6", а опкодом от "1 до 6" (написан текст на слайде, п.3);
    29:00 Intel 4004 - 4-битный микропроцессор, поэтому регистры НЕ 8-битные, а 4-х битные.

  • @kissejau6505
    @kissejau6505 2 місяці тому +1

    жора лучник респект!

  • @user-wv8lb7ow6k
    @user-wv8lb7ow6k 2 місяці тому +2

    спасибо за очередной урок)

  • @theflipofun6858
    @theflipofun6858 2 місяці тому +2

    У нас вообще лекций не было по Ассемблеру, тупо грузили практиками и требовали понимая, что в теории невозможно. Тогда я просто забил на это все дело, а оказывается можно объяснять понятно и интересно. Все таки не я тупой, а зависит многое от преподавателя

    • @exx-ns4tt
      @exx-ns4tt 2 місяці тому

      корешу на экзамене асм попался, хотя ни одной лекции по нём за семестр не было, только плюсы

  • @stanislavstanislavius7618
    @stanislavstanislavius7618 4 дні тому

    Так вот как работает реверс инжениринг))

  • @worseize
    @worseize 2 місяці тому

    Шедевр

  • @ode2877
    @ode2877 2 місяці тому

    Неожиданно для себя захотел написать ассемблер на си))

  • @_test_test
    @_test_test 2 місяці тому +3

    прослушал первую минуту и сразу понял, что чел шарит. респектово

    • @stanislavstanislavius7618
      @stanislavstanislavius7618 День тому

      Только на 6-м семинаре удалось это понять?

    • @_test_test
      @_test_test День тому

      @@stanislavstanislavius7618 ну ты будто первый день в интернете. для новичков расскажу - иногда в рекомендациях попадаются случайные неупорядоченные видео

  • @DmitryKandiner
    @DmitryKandiner День тому

    29:18 Если не ошибаюсь, Intel 4004 всё-таки 4-битный процессор. Возможно, Вы имели в видu Intel 8008?

  • @Japrajah
    @Japrajah 26 днів тому

    34:04 ну есть еще "AMD64 Architecture Programmer's Manual, Volume 3" . Там vpn не нужен.

  • @max-he7xz
    @max-he7xz 2 місяці тому

    Интересно, а насколько эффективнее использовать при проверке (на 57:14) логическое И с маской и сравнение вместо сдвига? Конечно все зависит от процессора под который все это будет скомпилировано. Но чисто теоретически должно быть быстрее.

    • @tilir
      @tilir  2 місяці тому

      Я думаю до процессора тут не дойдёт -- компилятор очень легко трансформирует такого рода эквивалентные конструкции в те, которые в среднем лучше.

  • @unixway
    @unixway 2 місяці тому

    Уважаемый лектор!
    В целом мне понравилось, но в программах лучше избегать волшебных чисел, тем более, что все опкоды уже описаны в отдельном константном множестве.

    • @tilir
      @tilir  2 місяці тому +1

      Я совершенно согласен. Но лайв кодинг как формат имеет свои ограничения.

  • @exx-ns4tt
    @exx-ns4tt 2 місяці тому +2

    заранее лайк)

  • @victormustya1745
    @victormustya1745 2 місяці тому

    Костя, а почему ты называешь x86, arm, mips и risc-v микроархитектурами? Это всё-таки просто архитектуры. Микроархитектура это уже про более-менее конкретную реализацию, типа intel redwood cove или arm cortex-a57.

    • @tilir
      @tilir  2 місяці тому

      У меня "микроархитектура" это скорее такое сокращение от "микропроцессорная архитектура". Наверное действительно надо начать использовать этот термин более точно.

  • @magicmetal8679
    @magicmetal8679 2 місяці тому

    Спасибо. Лекция, как всегда - отличная.
    Однако ввиду собственного мерзкого характера, не могу не отметить, что в дизассемблере problem_as2 проверять входные данные assert''ом 46:00 не стоит, сами же говорили. Даже невзирая на то, что дальше исходные данные подрезаются до char. Релиз станет "правильно" дизассемблировать всё-таки, изначально неправильный код - "политически неверно".
    А ещё (дело вкуса, конечно, недолюбливаю линейный switch), я бы полез решать эту задачку вокруг массива структур, индексированных опкодом. В структуре можно было бы даже набором параметров описать инструкцию (например, в какой позиции хранится код регистра в одно-операндной инструкции, если бы она у IN и OUT отличались), и оставить указатель на дизассемблирующую инструкцию функцию (скажем, для ADD/SUB/DIV/MUL - одна функция, IN/OUT - вторая и т.д., они бы получали аргументом указатель на "спровоцировавший" её вызов элемент массива).
    Но кажется меня тащит в сторону С++, причём процесс осложнён ересью мысленного расширения задачи )).

    • @tilir
      @tilir  2 місяці тому

      Я согласен, проверку надо делать лучше. Но это лайв-кодинг и у меня ограничения по времени. Я рассчитываю что вдумчивое решение этой задачи дома будет куда лучше чем тот скетч который я демонстрирую.

    • @magicmetal8679
      @magicmetal8679 2 місяці тому

      ​@@tilir100% правы. Поэтому злоупотребляю комментариями, а не лив-кодингом )), где особый талант нужен.
      Нет желания в чём-то вас уличить. Тренирую способность критически осмыслить код. Да и читателям, возможно, полезно будет.

  • @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 Спасибо большое за ответ, Вы направили меня в нужно направление.

  • @w777ru4
    @w777ru4 2 місяці тому +1

    На асемблере начал писать на Агате.

  • @DmitriNesterov
    @DmitriNesterov 2 місяці тому +3

    Здравствуйте! LLVM Assembler? 😊

    • @tilir
      @tilir  2 місяці тому +3

      Нет, обычный ))

    • @DmitriNesterov
      @DmitriNesterov 2 місяці тому +7

      @@tilir большое спасибо за Ваши замечательные лекции! А Ваша улыбка для меня бесценна! )

    • @kirillnikulin605
      @kirillnikulin605 2 місяці тому +1

      @@DmitriNesterov да, точно!! шутка про TDD))) как же я понимаю как круто, когда так, все с лету получается .... эх)))

    • @DmitriNesterov
      @DmitriNesterov 2 місяці тому +1

      @@kirillnikulin605 таак, не надо меня валить! 😃🤗👍 Ни разу ни с лёту - это раз, я четверть века в плюсах - это два. Константин Игоревич великолепно излагает материал - это ноль!

  • @sibedir
    @sibedir 2 місяці тому +1

    Ну всё, ассемблер готов. Осталось сделать процессор и погнали )))
    Как тебе такое Илон Маск?

  • @evgur4
    @evgur4 2 місяці тому +3

    Вы че?? Вы люди вообще ??

  • @user-rj7kg6jj7k
    @user-rj7kg6jj7k 2 місяці тому

    Здорово !!! Был бы я по моложе, лет так 25-30, я бы поступил в МФТИ. Но мне уже считай сорокет - 39, я наверное уже старый для этого.....У меня есть высшее, гуманитарное, но с возрастом (после 30), потянуло в техническую тематику.

    • @exx-ns4tt
      @exx-ns4tt 2 місяці тому

      Ну да, было бы немного странно если бы мужик с детьми в одной группе учился)). Попробуй на заочное поступить

    • @user-rj7kg6jj7k
      @user-rj7kg6jj7k 2 місяці тому

      @@exx-ns4tt - у меня нет детей, у меня никого нет. Да и меня скоро не будет.....

  • @milsnel
    @milsnel 2 місяці тому

    Доброго дня, а разве на 28:20 указатель на следующую инструкцию выполняеят не указатель RIP(он для x64, как раз х64 регистры показаны), ведь EIP он только в x32

    • @tilir
      @tilir  2 місяці тому

      Да действительно rip. Опечатка на слайде, спасибо за внимательность.