Программа на С с линковкой функций на ASM
#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
Спонсорство - donate.s0er.ru
Сайт платным контентом - soer.pro
Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
GitHub - github.com/soerdev
Чат для программистов - / discord
Группа ВК - codeartblog
Пікірлер: 77
00:00 Введение 00:29 Реализация fizzbuzz.c 02:40 ELF64 03:32 Fizz.asm 09:26 Buzz.asm 09:52 Оптимизация 12:50 Компиляция
@batfist6595
3 жыл бұрын
Спасибо, за видос. Не так кринжово как обычно
В следующем видео предлагаю спаять fizzbuzz на интегральных микросхемах или транзисторах)
Не знаю зачем я это посмотрел, ведь не пишу ни на си, ни на ассемблере. Но было интересно!
Спасибо за то, что делитесь знаниями
Начал делать учебный проект на asm - Соер выпускает видос как раз на эту тему... 👌🏻
Спасибо, классное видео! :)
Большое спасибо за ролик. У меня вопрос про оптимизацию: с одной стороны мы сократили число команд, но с другой все команды выполняются за различное время, и битовые операции выполняются явно быстрее, чем вычитание. Или вам было важно именно память сэкономить?
Интересно, спасибо
Вспомнил универ, спасибо) но я бы битовую маску наложил и возвращал что получится. NUM & 1: вернёт 1 если младший байт 1, и ноль если ноль. 1 может быть только тогда, когда число нечётное и наоборот соответственно
У меня такой вопрос. В файле fizzbuzz.c указываетеся, что обе функции fizz() и buzz() возвращают и принимают как аргумент 64-битный int. Однако в реализации на ассемблере используются регистры EDI и EAX, которые в свою очередь являются 32-битными. Означает ли это что эти функции не будут работать корректно, если им пердоставить число большее чем 2^32? Если да, то решиться ли эта проблема, если использовать RDI и RDX соотвественно?
@Green-jb7jm
3 жыл бұрын
Да, в коде допущена ошибка. Надо либо использовать 64-х битные регистры (и в связи с этим возможно ассемблерный код придётся переписать, используя другие инструкции), либо исправить объявление функций на int32_t.
я слишком фронтедер для этого. спасибо за интересный материал
Посоветуйте пожалуйста книгу по asm
Спасибо.
Вы крут)))
Наконец то понятная для меня тема на канале 😆. Могу предложить тему для другого видео: - медианный фильтр на основе связанного списка. В сети очень мало инфы по нему. Я нашел только 2 реализации. От профессора Филла Экстрома и нашего соотечественника Пашгана
Продолжай в том же духе!!!!
Вот видео как раз по интересующей теме. Кто может подсказать, каким компилятором си можно получить чистый 16/32 битный бинарник не привязанный к ОС ?
Почему после sub edx,1 нельзя сделать проверку на флаг CF(командой SETC al)?
класс
Посоветуйте ресурсы, где вы учили ассемблер. Можно и на английском. Нужно для универа)
Neg eax не было смысла делать, в си, все что не ноль = true, можно ещё одну команду оптимизировать 😀
только сегодня смотрел видос по тому как писать операционную систему и там это было.
А канал твоего товарища ещё остался? Интересно подцепить оттуда инфы=)
@Kismonavt
3 жыл бұрын
О каком товарище речь?
@cyrilanisimov
3 жыл бұрын
У которого по ассемблеру канал
Не расскажете ли как Вы достигли такой скорости работы в наборе текста? Очень быстро работаете, хотелось бы узнать какие усилия нужно приложить для получения аналогичной скорости. Спасибо.
@VitalySazanovich
2 жыл бұрын
Всё там уже напечатано... printer.sh - это такая прожка, которая неспеша выводит текст файла в консоль.
Ай маладца
Эх, вспомнил сразу старые добрые cracking tutorials ...
Валерий Лис, знаем, жалко что он пропал(
Какой у тебя эмулятор терминала?
@cyrilanisimov
3 жыл бұрын
Да и сама DE интересно, какая
@osmanof9209
2 жыл бұрын
у него линукс
Привет! Согласно коллинг конвенции amd64 system v, регистр rbx является callee-saved, то есть его значение не должно меняться для вызывающего метода. Получается, здесь это соглашение нарушено. Повезло, что программа отработала корректно. Я бы рекомендовал вместо rbx использовать регистр rcx, например, который является caller-saved и его можно менять.
@S0ERDEVS
3 жыл бұрын
В данном конкретном случае использование rbx абсолютно безопасно. Если сильно этот момент беспокоит, то можешь добавить пролог и эпилог, тогда будет по спеки все.
@alexeysidorov9793
3 жыл бұрын
@@S0ERDEVS если бы вызывающая функция была гораздо более сложной, то компилятор мог бы положить в %rbx какое-то значение, а вы бы его "испортили" в асм-функции. Не думали о таком сценарии?
@S0ERDEVS
3 жыл бұрын
Ты сейчас решаешь несуществующую проблему. Еще раз повторяю, когда ты не контролируешь вызывающую функцию, то просто добавляешь пролог и эпилог к своим функциям.
@alexeysidorov9793
3 жыл бұрын
@@S0ERDEVS а каким образом вы контролируете вызывающую функцию здесь? код для неё генерит компилятор, который полагает, что вы соблюдаете коллинг конвеншн.
@S0ERDEVS
3 жыл бұрын
А что тебя заставляет думать, что компилятор соблюдает соглашение System V или что в нем нет какого-либо бага нарушающего это соглашение? Смысл впадать в паранойю? Если есть что-то конкретное, то всегда рад разобраться, а просто фантазировать - это без меня.
Исходный код (для экспериментов) godbolt.org/z/84TjY5
ничего вообще не понял, но было очень интересно 🤟🏼🤟🏼🤟🏼
4:18
Опа, у меня примерно такая последняя лабораторная по системному программированию
@batfist6595
3 жыл бұрын
Го проговммировать в спальне
@Vovasch
3 жыл бұрын
@@batfist6595 Парное програмирование - топ
7:55 al это младшие 8 бит, а не 16 16 это ax
Ностальгическое чувство студенческих времён
@batfist6595
3 жыл бұрын
Да пошел ты
Что это за linux-дистрибутив?
там варниг будет i целое, а передается инт64
По поводу оптимизации - кол-во команд ≠ производительность. Некоторые команды выполняются быстрее других. Так mov eax, 0 медленнее чем xor eax, eax Возможно ваша реализация действительно быстрее, но это стоит доказывать как раз производительностью команд, а не количеством
Где можно учить C и ASM ?
@phat80
3 жыл бұрын
Можно учить самостоятельно. Инфы море. Если сейчас уже не выпускают много книг на эту тему, то в 80-90е их было очень много. Все эти книги до сих пор можно найти в интернете.
@user-tv3jq2vt8s
3 жыл бұрын
@@phat80 да, но что из этого всего читать?
@phat80
3 жыл бұрын
@@user-tv3jq2vt8s тут посоветовать ничего немогу. Занимался этой темой давно и названий книг не помню. Я читал все подряд. Если книга не нравилась, бросал, переходил к следующей. Благо, выбор есть. Нуи главное решить для себя, надо ли вообще погружаться так глубоко. Помню сам много времени потратил на изучение низкоуровнего программирования, но на практике так и не использовал эти знания. Сейчас уже мало чего помню. Например, на ассемблере уже программку написать не смогу, только если с помощью справки.
@umnikumnikov1338
3 жыл бұрын
@@phat80 стоит ,хорошая это база в дополнении другим языкам
@monk_t8763
3 жыл бұрын
@@user-tv3jq2vt8s по С могу посоветовать Стивина Прата
ничего не понятно, но очень...
Диз поставил я
@3955006
3 жыл бұрын
На момент твоего коммента - 0 дизов. Врещь товарищ
@lastsp9990
3 жыл бұрын
Я тоже
@batfist6595
3 жыл бұрын
@@3955006 у тебя заторможенный клиент
@zmeygavrilych
3 жыл бұрын
Нихрена, диз поставил мой скрипт - ДизБаз называется )
@batfist6595
3 жыл бұрын
Теперь осталось выяснить кто поставил 4-й диз
А как компилировать с gas файлом(.s)?