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

#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog

Пікірлер: 77

  • @S0ERDEVS
    @S0ERDEVS3 жыл бұрын

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

  • @batfist6595

    @batfist6595

    3 жыл бұрын

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

  • @dimovich85
    @dimovich853 жыл бұрын

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

  • @YuryScript
    @YuryScript3 жыл бұрын

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

  • @user-is9fv5bi7x
    @user-is9fv5bi7x3 жыл бұрын

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

  • @amalliar3794
    @amalliar37943 жыл бұрын

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

  • @dimovich85
    @dimovich853 жыл бұрын

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

  • @user-lv7kx7jj5c
    @user-lv7kx7jj5c3 жыл бұрын

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

  • @ievgenk.8991
    @ievgenk.89913 жыл бұрын

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

  • @Max-nr1bv
    @Max-nr1bv3 жыл бұрын

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

  • @ivanshmarov2866
    @ivanshmarov28663 жыл бұрын

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

  • @Green-jb7jm

    @Green-jb7jm

    3 жыл бұрын

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

  • @user-xd8sn4wh6r
    @user-xd8sn4wh6r3 жыл бұрын

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

  • @alexmicke7181
    @alexmicke71813 жыл бұрын

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

  • @titanovsky
    @titanovsky3 жыл бұрын

    Спасибо.

  • @user-ft6zh8ny9i
    @user-ft6zh8ny9i Жыл бұрын

    Вы крут)))

  • @astarkmn
    @astarkmn3 жыл бұрын

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

  • @user-hy1vn9zj5r
    @user-hy1vn9zj5r3 жыл бұрын

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

  • @suetnoj1067
    @suetnoj10673 жыл бұрын

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

  • @user-yc6ez9lf9t
    @user-yc6ez9lf9t3 жыл бұрын

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

  • @user-gt7rz5uw5z
    @user-gt7rz5uw5z3 жыл бұрын

    класс

  • @user-od4ce8pe3u
    @user-od4ce8pe3u3 жыл бұрын

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

  • @cdeblog
    @cdeblog3 жыл бұрын

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

  • @AndroidsReview
    @AndroidsReview3 жыл бұрын

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

  • @antonpetrov5910
    @antonpetrov59103 жыл бұрын

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

  • @Kismonavt

    @Kismonavt

    3 жыл бұрын

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

  • @cyrilanisimov

    @cyrilanisimov

    3 жыл бұрын

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

  • @valeriy_seregin
    @valeriy_seregin3 жыл бұрын

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

  • @VitalySazanovich

    @VitalySazanovich

    2 жыл бұрын

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

  • @masterbedroom594
    @masterbedroom5943 жыл бұрын

    Ай маладца

  • @user-rc8ei2ko9z
    @user-rc8ei2ko9z3 жыл бұрын

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

  • @gagikpog
    @gagikpog3 жыл бұрын

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

  • @user-wh8ww5lp2l
    @user-wh8ww5lp2l3 жыл бұрын

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

  • @cyrilanisimov

    @cyrilanisimov

    3 жыл бұрын

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

  • @osmanof9209

    @osmanof9209

    2 жыл бұрын

    у него линукс

  • @alexeysidorov9793
    @alexeysidorov97933 жыл бұрын

    Привет! Согласно коллинг конвенции 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 жыл бұрын

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

  • @S0ERDEVS

    @S0ERDEVS

    3 жыл бұрын

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

  • @user-xq4ft8kz9f
    @user-xq4ft8kz9f3 жыл бұрын

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

  • @babenoff
    @babenoff3 жыл бұрын

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

  • @sashakuzin4458
    @sashakuzin4458 Жыл бұрын

    4:18

  • @Vovasch
    @Vovasch3 жыл бұрын

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

  • @batfist6595

    @batfist6595

    3 жыл бұрын

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

  • @Vovasch

    @Vovasch

    3 жыл бұрын

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

  • @kkkargeva
    @kkkargeva3 жыл бұрын

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

  • @NecroRomnt
    @NecroRomnt3 жыл бұрын

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

  • @batfist6595

    @batfist6595

    3 жыл бұрын

    Да пошел ты

  • @H1roKamado
    @H1roKamado3 жыл бұрын

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

  • @igorseledtsov7345
    @igorseledtsov73453 жыл бұрын

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

  • @kkkargeva
    @kkkargeva3 жыл бұрын

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

  • @user-tv3jq2vt8s
    @user-tv3jq2vt8s3 жыл бұрын

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

  • @phat80

    @phat80

    3 жыл бұрын

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

  • @user-tv3jq2vt8s

    @user-tv3jq2vt8s

    3 жыл бұрын

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

  • @phat80

    @phat80

    3 жыл бұрын

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

  • @umnikumnikov1338

    @umnikumnikov1338

    3 жыл бұрын

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

  • @monk_t8763

    @monk_t8763

    3 жыл бұрын

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

  • @timurdanilenko3582
    @timurdanilenko35823 жыл бұрын

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

  • @batfist6595
    @batfist65953 жыл бұрын

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

  • @3955006

    @3955006

    3 жыл бұрын

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

  • @lastsp9990

    @lastsp9990

    3 жыл бұрын

    Я тоже

  • @batfist6595

    @batfist6595

    3 жыл бұрын

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

  • @zmeygavrilych

    @zmeygavrilych

    3 жыл бұрын

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

  • @batfist6595

    @batfist6595

    3 жыл бұрын

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

  • @sayen5269
    @sayen5269 Жыл бұрын

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