Основы Ассемблера, часть #03. Первая функция на ассемблере

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ธ.ค. 2024

ความคิดเห็น • 65

  • @allanurjumayev5290
    @allanurjumayev5290 9 หลายเดือนก่อน +4

    Единственный нормальный канал для изучение ассемблера

  • @fulldodge4096
    @fulldodge4096 ปีที่แล้ว +6

    Сначала пытался скомпилировать на 64 конфигурации и не понимал почему не получается, поискал информацию, оказалось только на 32 работает, в видео через 30 секунд получил ответ на свой вопрос, недосмотрел. Спасибо, отличные уроки!

  • @РусланКарнеенко
    @РусланКарнеенко ปีที่แล้ว +4

    Спасибо. Надо несколько раз просматривать и параллельно с Вами выполнять, чтобы уяснить.

  • @B5U8
    @B5U8 9 หลายเดือนก่อน +4

    8 марта, а я смотрю видео про ассемблер.
    Подписалась. 9 марта тоже буду смотреть.

  • @blazhenny
    @blazhenny 2 ปีที่แล้ว +9

    После ваших лекций задания из односеместрового ознакомительного курса по ассемблеру перестали вызывать у меня физическую тошноту и желание выбросится в окно! Огромное спасибо за ваш труд!

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว +2

      Ещё одна жизнь спасена! ;-)

  • @stanislav8313
    @stanislav8313 9 หลายเดือนก่อน +1

    Святой человек! Посмотрел бы твои видео лет 25 назад - жизнь была бы другой...

    • @AlexanderSemenko
      @AlexanderSemenko  9 หลายเดือนก่อน

      Твоя жизнь не просто так стала такой, какой есть. Ищи ответ на вопрос "зачем это всё", и многое тайное станет понятно ))

    • @stanislav8313
      @stanislav8313 9 หลายเดือนก่อน

      Я знаю как она стала такой. В детстве, когда я впервые услышал слово компьютер, на вопрос:Что это такое ? Мне ответили: "Та, это так сложно, ты не разберёшся. Я подумал: "Я не разберусь..?" И стал разбираться...В конце 80-х, в СССР, много не накопаешь. Но уже заболел и разобрался в устройстве ПК.Потом Бейсик... Я не понимал зачем он нужен - я хотел писать программы (.com, .exe)...Своего компа не было.Появился в 2003.Но уже - семья, ребёнок. Так я и не стал программистом.Но писал, не имея системных знаний, по учебникам и докам, написал на j2me, которая не поддерживает числа с плавающей точкой, прогу с их поддержкой. На работе приходилось редактировать специфические файлы в не удобном редакторе. Я в HxD изучил формат файла и написал генератор на VB.NET. Пару приложений под Android на Java… Короче болен до сих пор… Ну, а времени, на своё увлечение так и нет :(
      @@AlexanderSemenko

  • @SS_Glitter_SS
    @SS_Glitter_SS 4 หลายเดือนก่อน

    Отличные уроки! Спасибо!

  • @volodymyrgutsu7011
    @volodymyrgutsu7011 3 ปีที่แล้ว +1

    Вот она изюминка курса, мне это нравится, продолжайте)

  • @temirkhanamanbaev42
    @temirkhanamanbaev42 3 ปีที่แล้ว +1

    Класс, этот урок буду повторять несколько раз, спасибо!

  • @Nikita_Pro89
    @Nikita_Pro89 ปีที่แล้ว

    Просто нет слов, на сколько это крутая инфа. 🔥🔥🔥

    • @AlexanderSemenko
      @AlexanderSemenko  ปีที่แล้ว

      Рекомендуйте друзьям и знакомым!

    • @Nikita_Pro89
      @Nikita_Pro89 ปีที่แล้ว

      Да если бы у меня ещё были друзья и знакомы, которым бы была интересна такая сложная информация. 😂 таких людей во всей России то, дай бог тысяча наберется.

  • @селфик-н2д
    @селфик-н2д 3 ปีที่แล้ว +2

    Спасибо, было интересно

  • @prostocrazy1105
    @prostocrazy1105 ปีที่แล้ว

    спасибо ваши уроки шикарны!

    • @AlexanderSemenko
      @AlexanderSemenko  ปีที่แล้ว

      Рекомендуйте друзьям и знакомым!

    • @prostocrazy1105
      @prostocrazy1105 ปีที่แล้ว

      @@AlexanderSemenko обязательно

  • @bambalbino
    @bambalbino ปีที่แล้ว +1

    Спасибо большое

  • @sdfsfsdsfsdfsdf7595
    @sdfsfsdsfsdfsdf7595 ปีที่แล้ว +1

    спасибо за урок.

  • @bulba1995
    @bulba1995 2 ปีที่แล้ว

    Отличный урок , спасибо .

  • @starplay6380
    @starplay6380 3 ปีที่แล้ว +2

    Круто¡¡¡

  • @Иван-о3ъ6ь
    @Иван-о3ъ6ь 10 หลายเดือนก่อน

    Подобный синтаксис ассемблерной вставки будет работать только под vc++. На компиляторе gcc используется другой синтаксис оформления блока и самих инструкций асма (там по умолчанию синтаксис at&t, а не intel).

  • @vladyan01
    @vladyan01 2 ปีที่แล้ว +2

    Получается что, сначала придумали команды на процессоре, напаяли их на нем, потом придумали язык ассемблер, чтобы было проще пользоваться процессором, потом придумали Си чтобы проще пользоваться ассемблером, потом придумали СПП, чтобы делать более большие программы и ТД до питона. Понятно что до си были какие языки, но в целом такая концепция) Получается любой язык это набор шаблонов кода ассемблера?8

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว +2

      Вы кратко описали историю развития программирования )) И да, любой исполняемый язык программирования в результате компиляции превращается в набор машинных команд, т.е. по сути - в ассемблер.

  • @yavbvb123
    @yavbvb123 7 หลายเดือนก่อน

    Прошу ответить, если есть возможность, на несколько вопросов: 1. Приходилось ли выполнять дизассемблирование в CLion? 2. В CLion при подключении компилятора от Visual Studio архитектуры х86, при дизассемблировании кода, результат выглядит несколько иначе, чем в самой Visual Studio. Может есть какой-то способ получить одинаковый результат?

    • @AlexanderSemenko
      @AlexanderSemenko  7 หลายเดือนก่อน +1

      Я не работал с CLion. Машинный код должен быть идентичен в любом дизассемблере. Отличия могут быть только в декорации кода, но сами команды Ассемблера должны быть одинаковы в любом дизассемблере.

  • @AMith-lv2cv
    @AMith-lv2cv 2 ปีที่แล้ว

    🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥

  • @uhjzuydcgujy1236
    @uhjzuydcgujy1236 11 หลายเดือนก่อน

    Здравствуйте. Зачем мы используем регистр eax, ведь по разрядности нам бы хватило бы и ax.
    ?

    • @AlexanderSemenko
      @AlexanderSemenko  11 หลายเดือนก่อน

      Да, это немного не логично (на первый взгляд). Команды, использующие расширенные версии регистров EAX / RAX и сокращённые (AX) отличаются однобайтовым префиксом. Раньше команды для EAX были длиннее, однако, в 64-разрядном режиме такие регистры считаются "родными" (native), и такие команды не имеют префикса, и он теперь используется для оперирования короткими регистрами (AX). Т.е. в 64-разрядном режиме это работает наоборот.
      В результате, команды для длинных регистров стали короче, а значит - они быстрее выбираются из памяти, что ускоряет работу программы.
      Т.е. мы пользуемся длинными регистрами не потому, что можем, либо узнали про это, либо это модно - а просто потому, что так наши программы работают быстрее ))

  • @thetraveler7779
    @thetraveler7779 2 ปีที่แล้ว

    Правильно ли я понимаю, что при вызове самой первой функции, особого смысла в сохранении значения регистра EBP в стек нет? и что оно имеет смысл, только в случае когда функция вызывается другой функцией?

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว +3

      Назначение EBP - хранить копию значения ESP. В примере при вызове функции Make_Sum регистр EBP сохраняется в стек только потому, что в него сразу же будет записана копия из ESP. Ну, а по окончании выполнения функции значение ESP восстанавливается и сравнивается с исходным, хранящимся в EBP. Именно так программа может определить, был ли испорчен стек вызываемой функцией, или нет.

  • @assemblerandmath1753
    @assemblerandmath1753 2 ปีที่แล้ว

    13:40 - Не совсем понятно, что значит вызываемая и вызывающая функция, почему данные хранятся отдельно у этих функций? ведь мы кладем адрес возврата, потом параметры/аргуметы функции, рано или поздно функция будет выполняться и уже из вызываемой превратится в вызывающую (так как вы сказали это текущая), тогда по логике хранения параметров, они должны еще раз продублироваться в стеке занимая место в два раз больше, не врубаюсь что то совсем.

    • @assemblerandmath1753
      @assemblerandmath1753 2 ปีที่แล้ว

      может снимите ещё один ролик с пояснением этого момента? в котором это всё подробно объяснялось бы, приводя реальные примеры, например видео про стек на канале Alek Os тоже непонятное относительно освещения темы вызываемой и вызывающей функции, реально ни одном видео в ютубе на эту тему не проливают свет из просмотренных мною.

    • @assemblerandmath1753
      @assemblerandmath1753 2 ปีที่แล้ว

      под локальными переменами вызывающей функции, подразумевается результат функции которая она возвращает после операции над заранее переданными аргументами?

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว

      Поясню на примере: функция F1() вызывает функцию F2(). В таком случае F1() - вызывающая, а F2() - вызываемая.
      Обе функции могут иметь свои собственные локальные переменные - поэтому эти данные и должны храниться отдельно.

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว

      @@assemblerandmath1753 Вы только начали смотреть курс, а уже предлагаете снять дополнительные серии. А что, если в последующих сериях этого курса уже содержатся ответы на ваши вопросы?

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว

      @@assemblerandmath1753 Локальные переменные функции - это множество переменных, в которых производятся вычисления внутри функции. Возвращаемый результат вообще не хранится в стеке - он возвращается через регистр.
      Курс по ассемблеру рассчитан на тех, кто уже разбирается в программировании, поэтому я не объясняю многие простые вещи. Посмотрите хотя бы 10-20 первых частей моего "Базового курса по С++", на котором я очень подробно разбираю основы программирования - после этого вам Ассемблер будет даваться гораздо легче.

  • @erikostrovski3601
    @erikostrovski3601 6 วันที่ผ่านมา

    а можно для первокласников . почему говорят " вернёт нам результат " . а не покажет или просто равно или както ещё

    • @AlexanderSemenko
      @AlexanderSemenko  6 วันที่ผ่านมา +1

      Потому что программирование придумали математики. Они же добавили такой термин как "функция" вместе со всем, что к ней относится - результату и аргументам. В математике функция должна "вернуть" результат своей "работы" - поэтому так говорят и в программировании уже много десятков лет и все привыкли.

  • @mrslashx
    @mrslashx 2 ปีที่แล้ว

    А как написать функцию на чистом NASM?

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว

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

  • @JohnWickMovie
    @JohnWickMovie 2 ปีที่แล้ว

    Странно конечно что MSVC не может в ассемблерные вставки. Clang и GCC позволяет это делать для 64 битных сборок

    • @Cub_A
      @Cub_A ปีที่แล้ว +1

      GCC то позволяет, но вот синтаксис этого позволения убивает желание это делать, проще в отдельный модуль выставить и вызывать из сишного кода:-(

  • @Lathary_EFT_Products
    @Lathary_EFT_Products 2 ปีที่แล้ว

    у меня нет дизассемблирования в VS. Облазил весь интернет не понимаю в чём проблема, чекбоксы включены

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว +1

      Не может быть! Эта фича была всегда во всех версиях VS.

    • @Lathary_EFT_Products
      @Lathary_EFT_Products 2 ปีที่แล้ว

      @@AlexanderSemenko у меня удаляется ссылка на imgur, ютуб не дает приложить скриншот но дизассемблирования нет. imgur. com/a/vkaB2nr (без пробела), также не появляется по нажатию Alt+8

    • @Lathary_EFT_Products
      @Lathary_EFT_Products 2 ปีที่แล้ว

      @@AlexanderSemenko я не очень компетентен в сфере VS поэтому не знаю с чем это может быть связано :(

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว

      @@Lathary_EFT_Products Этот пункт появится в меню когда вы запустите программу из под отладчика (F5)! ;-)

    • @Lathary_EFT_Products
      @Lathary_EFT_Products 2 ปีที่แล้ว

      @@AlexanderSemenko Не могу приложить здесь видео, все пять попыток чистит ютуб, я попробовал запустить отладчик на примере программы hello world и пример с ассемблерной вставкой из видео, тоже не появляется дизассемблирование

  • @Cub_A
    @Cub_A ปีที่แล้ว

    Только вот не ясно параметры пушатся в стэк, они ведь не читаются, а читаются локальные переменные, зачем это извращение?

  • @nakidai
    @nakidai 2 ปีที่แล้ว

    Япона мать скока материала надо чтобы поставить метку с ретом

  • @bat_bsv
    @bat_bsv 5 หลายเดือนก่อน

    мы будем изучать х64 потому что х86 устарела.... ассемблерные вставки можно делать только в х86.... смотрю дальше.

  • @marknoyanzin6108
    @marknoyanzin6108 ปีที่แล้ว

    Зачем так долго объяснять что такое файл msi и что он делает!? Это для программистов или для домохозяек? 😢

    • @AlexanderSemenko
      @AlexanderSemenko  ปีที่แล้ว +3

      15 секунд, которые я это рассказываю, для вас, похоже - это целая вечность!

  • @ВладимирШевчук-ъ2г
    @ВладимирШевчук-ъ2г ปีที่แล้ว

    Если Александр не против, оставлю ссылку, здесь хорошо объясняется работа стека - th-cam.com/video/MXoMuymbfo8/w-d-xo.html&ab_channel=AlekOS

    • @Nikita_Pro89
      @Nikita_Pro89 ปีที่แล้ว

      Не сказал бы что там хорошо объясняется, что такое стёк. Скажем, после просмотра этого видеоролика, тот более менее перевариваемый. Если бы я его посмотрел до того, как посмотрел этот, я бы нечего там не понял)

  • @redice8928
    @redice8928 2 ปีที่แล้ว

    Ничего не понятно

    • @AlexanderSemenko
      @AlexanderSemenko  2 ปีที่แล้ว +3

      Ну, Ассемблер - это не для новичков. Попробуйте сначала пройти мой Базовый курс программирования на С++, после которого вам тут всё будет понятно