Программа на С с линковкой функций на ASM

Поділитися
Вставка
  • Опубліковано 16 жов 2024
  • #soer #itubeteam
    Основной канал для общения и публикации новых видео - Телегарм - t.me/softwaree...
    Спонсорство - donate.s0er.ru
    Сайт платным контентом - soer.pro
    Зеркало для видео Дзен Видео - zen.yandex.ru/...
    GitHub - github.com/soe...
    Чат для программистов - / discord
    Группа ВК - codeart...

КОМЕНТАРІ • 77

  • @S0ERDEVS
    @S0ERDEVS  4 роки тому +9

    00:00 Введение
    00:29 Реализация fizzbuzz.c
    02:40 ELF64
    03:32 Fizz.asm
    09:26 Buzz.asm
    09:52 Оптимизация
    12:50 Компиляция

    • @batfist6595
      @batfist6595 4 роки тому

      Спасибо, за видос. Не так кринжово как обычно

  • @dimovich85
    @dimovich85 4 роки тому +48

    В следующем видео предлагаю спаять fizzbuzz на интегральных микросхемах или транзисторах)

  • @YuryScript
    @YuryScript 4 роки тому +10

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

  • @Ланс-м1в
    @Ланс-м1в 3 роки тому +2

    Спасибо за то, что делитесь знаниями

  • @amalliar3794
    @amalliar3794 4 роки тому +2

    Начал делать учебный проект на asm - Соер выпускает видос как раз на эту тему... 👌🏻

  • @НикитаНемков-ц1т
    @НикитаНемков-ц1т 4 роки тому +3

    Большое спасибо за ролик.
    У меня вопрос про оптимизацию: с одной стороны мы сократили число команд, но с другой все команды выполняются за различное время, и битовые операции выполняются явно быстрее, чем вычитание.
    Или вам было важно именно память сэкономить?

  • @Max-nr1bv
    @Max-nr1bv 4 роки тому +1

    Вспомнил универ, спасибо) но я бы битовую маску наложил и возвращал что получится. NUM & 1: вернёт 1 если младший байт 1, и ноль если ноль. 1 может быть только тогда, когда число нечётное и наоборот соответственно

  • @ivanshmarov2866
    @ivanshmarov2866 4 роки тому +4

    У меня такой вопрос. В файле fizzbuzz.c указываетеся, что обе функции fizz() и buzz() возвращают и принимают как аргумент 64-битный int. Однако в реализации на ассемблере используются регистры EDI и EAX, которые в свою очередь являются 32-битными. Означает ли это что эти функции не будут работать корректно, если им пердоставить число большее чем 2^32? Если да, то решиться ли эта проблема, если использовать RDI и RDX соотвественно?

    • @Green-jb7jm
      @Green-jb7jm 4 роки тому

      Да, в коде допущена ошибка. Надо либо использовать 64-х битные регистры (и в связи с этим возможно ассемблерный код придётся переписать, используя другие инструкции), либо исправить объявление функций на int32_t.

  • @astarkmn
    @astarkmn 4 роки тому

    Наконец то понятная для меня тема на канале 😆. Могу предложить тему для другого видео: - медианный фильтр на основе связанного списка. В сети очень мало инфы по нему. Я нашел только 2 реализации. От профессора Филла Экстрома и нашего соотечественника Пашгана

  • @АлександрБлизнецов

    я слишком фронтедер для этого.
    спасибо за интересный материал

  • @dimovich85
    @dimovich85 4 роки тому +1

    Спасибо, классное видео! :)

  • @Принуждениекмиру-ь2ц

    Вы крут)))

  • @АндрейРеш-г9в
    @АндрейРеш-г9в 4 роки тому +1

    класс

  • @cdeblog
    @cdeblog 3 роки тому +2

    Neg eax не было смысла делать, в си, все что не ноль = true, можно ещё одну команду оптимизировать 😀

  • @ОлегВоробьев-б6м
    @ОлегВоробьев-б6м 3 роки тому

    Продолжай в том же духе!!!!

  • @alexmicke7181
    @alexmicke7181 4 роки тому +2

    Посоветуйте пожалуйста книгу по asm

  • @ДжонСноу-я8э
    @ДжонСноу-я8э 4 роки тому +1

    Почему после sub edx,1 нельзя сделать проверку на флаг CF(командой SETC al)?

  • @antonpetrov5910
    @antonpetrov5910 4 роки тому +10

    А канал твоего товарища ещё остался? Интересно подцепить оттуда инфы=)

    • @Kismonavt
      @Kismonavt 4 роки тому +1

      О каком товарище речь?

    • @cyrilanisimov
      @cyrilanisimov 4 роки тому +2

      У которого по ассемблеру канал

  • @alexeysidorov9793
    @alexeysidorov9793 3 роки тому +2

    Привет! Согласно коллинг конвенции amd64 system v, регистр rbx является callee-saved, то есть его значение не должно меняться для вызывающего метода.
    Получается, здесь это соглашение нарушено. Повезло, что программа отработала корректно.
    Я бы рекомендовал вместо rbx использовать регистр rcx, например, который является caller-saved и его можно менять.

    • @S0ERDEVS
      @S0ERDEVS  3 роки тому

      В данном конкретном случае использование rbx абсолютно безопасно. Если сильно этот момент беспокоит, то можешь добавить пролог и эпилог, тогда будет по спеки все.

    • @alexeysidorov9793
      @alexeysidorov9793 3 роки тому

      @@S0ERDEVS если бы вызывающая функция была гораздо более сложной, то компилятор мог бы положить в %rbx какое-то значение, а вы бы его "испортили" в асм-функции. Не думали о таком сценарии?

    • @S0ERDEVS
      @S0ERDEVS  3 роки тому

      Ты сейчас решаешь несуществующую проблему. Еще раз повторяю, когда ты не контролируешь вызывающую функцию, то просто добавляешь пролог и эпилог к своим функциям.

    • @alexeysidorov9793
      @alexeysidorov9793 3 роки тому +1

      @@S0ERDEVS а каким образом вы контролируете вызывающую функцию здесь? код для неё генерит компилятор, который полагает, что вы соблюдаете коллинг конвеншн.

    • @S0ERDEVS
      @S0ERDEVS  3 роки тому

      А что тебя заставляет думать, что компилятор соблюдает соглашение System V или что в нем нет какого-либо бага нарушающего это соглашение? Смысл впадать в паранойю? Если есть что-то конкретное, то всегда рад разобраться, а просто фантазировать - это без меня.

  • @ievgenk.8991
    @ievgenk.8991 4 роки тому

    Интересно, спасибо

  • @СергейНовожилов-я6я

    Какой у тебя эмулятор терминала?

    • @cyrilanisimov
      @cyrilanisimov 4 роки тому

      Да и сама DE интересно, какая

    • @osmanof9209
      @osmanof9209 3 роки тому

      у него линукс

  • @titanovsky
    @titanovsky 4 роки тому

    Спасибо.

  • @babenoff
    @babenoff 4 роки тому +4

    ничего вообще не понял, но было очень интересно 🤟🏼🤟🏼🤟🏼

  • @ПавелГорбушин-м7з
    @ПавелГорбушин-м7з 4 роки тому

    Эх, вспомнил сразу старые добрые cracking tutorials ...

  • @masterbedroom594
    @masterbedroom594 4 роки тому +1

    Ай маладца

  • @AndroidsReview
    @AndroidsReview 4 роки тому

    только сегодня смотрел видос по тому как писать операционную систему и там это было.

  • @gagikpog
    @gagikpog 4 роки тому

    Валерий Лис, знаем, жалко что он пропал(

  • @suetnoj1067
    @suetnoj1067 4 роки тому

    Вот видео как раз по интересующей теме. Кто может подсказать, каким компилятором си можно получить чистый 16/32 битный бинарник не привязанный к ОС ?

  • @valeriy_seregin
    @valeriy_seregin 4 роки тому

    Не расскажете ли как Вы достигли такой скорости работы в наборе текста? Очень быстро работаете, хотелось бы узнать какие усилия нужно приложить для получения аналогичной скорости. Спасибо.

    • @VitalySazanovich
      @VitalySazanovich 2 роки тому

      Всё там уже напечатано... printer.sh - это такая прожка, которая неспеша выводит текст файла в консоль.

  • @Вова-ъ7ы6щ
    @Вова-ъ7ы6щ 4 роки тому

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

  • @H1roKamado
    @H1roKamado 3 роки тому

    Что это за linux-дистрибутив?

  • @Vovasch
    @Vovasch 4 роки тому

    Опа, у меня примерно такая последняя лабораторная по системному программированию

    • @batfist6595
      @batfist6595 4 роки тому

      Го проговммировать в спальне

    • @Vovasch
      @Vovasch 4 роки тому +2

      @@batfist6595 Парное програмирование - топ

  • @NecroRomnt
    @NecroRomnt 4 роки тому

    Ностальгическое чувство студенческих времён

  • @igorseledtsov7345
    @igorseledtsov7345 3 роки тому

    там варниг будет i целое, а передается инт64

  • @разгов
    @разгов 4 роки тому

    Где можно учить C и ASM ?

    • @phat80
      @phat80 3 роки тому

      Можно учить самостоятельно. Инфы море. Если сейчас уже не выпускают много книг на эту тему, то в 80-90е их было очень много. Все эти книги до сих пор можно найти в интернете.

    • @разгов
      @разгов 3 роки тому

      @@phat80 да, но что из этого всего читать?

    • @phat80
      @phat80 3 роки тому

      @@разгов тут посоветовать ничего немогу. Занимался этой темой давно и названий книг не помню. Я читал все подряд. Если книга не нравилась, бросал, переходил к следующей. Благо, выбор есть. Нуи главное решить для себя, надо ли вообще погружаться так глубоко. Помню сам много времени потратил на изучение низкоуровнего программирования, но на практике так и не использовал эти знания. Сейчас уже мало чего помню. Например, на ассемблере уже программку написать не смогу, только если с помощью справки.

    • @umnikumnikov1338
      @umnikumnikov1338 3 роки тому

      @@phat80 стоит ,хорошая это база в дополнении другим языкам

    • @monk_t8763
      @monk_t8763 3 роки тому

      @@разгов по С могу посоветовать Стивина Прата

  • @МаксимХвостов-м1й
    @МаксимХвостов-м1й 4 роки тому +1

    Исходный код (для экспериментов) godbolt.org/z/84TjY5

  • @sashakuzin4458
    @sashakuzin4458 Рік тому

    4:18

  • @timurdanilenko3582
    @timurdanilenko3582 4 роки тому

    ничего не понятно, но очень...

  • @batfist6595
    @batfist6595 4 роки тому +1

    Диз поставил я

    • @3955006
      @3955006 4 роки тому

      На момент твоего коммента - 0 дизов. Врещь товарищ

    • @lastsp9990
      @lastsp9990 4 роки тому

      Я тоже

    • @batfist6595
      @batfist6595 4 роки тому

      @@3955006 у тебя заторможенный клиент

    • @zmeygavrilych
      @zmeygavrilych 4 роки тому +4

      Нихрена, диз поставил мой скрипт - ДизБаз называется )

    • @batfist6595
      @batfist6595 4 роки тому

      Теперь осталось выяснить кто поставил 4-й диз

  • @sayen5269
    @sayen5269 2 роки тому

    А как компилировать с gas файлом(.s)?

  • @kkkargeva
    @kkkargeva 3 роки тому

    По поводу оптимизации - кол-во команд ≠ производительность. Некоторые команды выполняются быстрее других. Так mov eax, 0 медленнее чем xor eax, eax
    Возможно ваша реализация действительно быстрее, но это стоит доказывать как раз производительностью команд, а не количеством

  • @kkkargeva
    @kkkargeva 3 роки тому +1

    7:55
    al это младшие 8 бит, а не 16
    16 это ax