Ассемблер RISC-V под голое железо. Часть 1. Hello, World!

Поділитися
Вставка
  • Опубліковано 6 вер 2024
  • В этом ролике мы вкратце познакомимся с процессорами архитектуры RISC-V, развернём простую среду разработки, а также напишем, скомпилируем и запустим простейшую программа на ассемблере, и разберём как она работает.
    Telegram: t.me/bare_asm
    Все материалы из роликов на GitHub: github.com/Cit...
    Notepad++: notepad-plus-p...
    Toolchain RISC-V: gnutoolchains....
    QEMU: www.qemu.org/
    Подсветка синтаксиса, как в ролике: disk.yandex.ru...
    Это же видео на других площадках:
    / @cityacee
    rutube.ru/chan...
    dzen.ru/cityacee
    video/@...

КОМЕНТАРІ • 73

  • @sledleo
    @sledleo Місяць тому +2

    Супер тема!! Респект за обучающие видео!
    Ждем больше разнообразных видео по bare-metall для ARM и RISC-V!

  • @mep3mep350
    @mep3mep350 5 місяців тому +5

    в России тоже начали делать какие-то контроллеры на RISC-V. а значит скоро эта архитектура станет использоваться в промышленности и в госзакупках. для рф важная тема, более перспективная возможно чем arm.

  • @GudinVladimir
    @GudinVladimir 5 місяців тому +6

    Да, было бы очень интересно посмотреть про работу с фреймбуфером! Спасибо за ролик.

  • @alekmit13
    @alekmit13 5 місяців тому +6

    Спасибо! Очень интересно!

  • @user-hw2eb8bl8e
    @user-hw2eb8bl8e 19 днів тому +1

    отличный материал.

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

    Спасибо! С удовольствием адаптировал инструменты под линукс и повторил весь процесс. Но ARM, пожалуйста, не забрасывайте, хочется пройти до финала.

  • @blackdragon7047
    @blackdragon7047 2 дні тому

    Спасибо!

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

    Браво! Спасибо за проделанную работу!

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

    Спасибо! Только вперёд!

  • @siarheimarozau6763
    @siarheimarozau6763 3 місяці тому +1

    Про дизасселблер IDA для RISC-V более подробно можно?

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

    Идеально!!!
    Но еще раз прошу, оставляйте пожалуйста подсветку синтаксиса специализированного под данный ассемблер!

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

      disk.yandex.ru/d/W-cYuFjXj2yTNA Добавил и в описание ролика.

  • @Non-fiction_00
    @Non-fiction_00 Місяць тому +1

    Насчёт section. У исполняемого файла есть секции. Их может быть несколько. Например, секция .data -- это область статических данных, в которых нельзя (в идеале) исполняться коду. Секция .text -- как раз таки и говорит компилятору (линкеру), что это секция исполняемого кода.
    Вообще, это отдельная тема и можно даже было бы ролик запилить. Но у Вас и так времени мало, как я понимаю.

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

      Всё правильно пишите. Но у нас baremetal, мы ни на кого не смотрим и ни от кого не зависим :)

  • @diloL
    @diloL 5 місяців тому +1

    Случайно наткнулся на ваш видос
    Интересно и познавательно, рад, что подобное попадается в моей ленте

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

    чтото новое узнать это хорошо, если ,конечно, чтото старое уже полностью освоено / усвоено, например armv7 и какой нибудь soc с ним. Вот бы звук издать устройством или в видеокамеру заглянуть 😅

    • @Alexander_Gurov_RF
      @Alexander_Gurov_RF 5 місяців тому +1

      На RPi звук выводится дубово, через ШИМ. Чем то похоже на Covox. Значения ШИМ из буфера выводятся по прерыванию от таймера.

  • @nickhouse555
    @nickhouse555 5 місяців тому +1

    Познавательно👍
    Спасибо!!!

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

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

  • @alexloktionoff6833
    @alexloktionoff6833 5 місяців тому +3

    Производительных десктопных RISCV еще ждать и ждать, одно для бесплатно стянуть систему команд, а совсем другое это накрутить на нее конвеерность, суперскалярность и т.п. чтоб за такт делать в разы больше. Такие ноу-хау имеют только солидные конторы, и отдавать свои дизайны за песплатно не собираются, они их лицензируют на тех-же условиях что и АРМ.

    • @mep3mep350
      @mep3mep350 5 місяців тому +1

      главное сохранение совместимости софта. даже если у тебя проц говно и без проприетарных фишек - софт на нем должен кое-как заработать. железо это полдела - софт это тоже куча человеко-часов. в условиях ограниченных ресурсов это очень критично не изобретать велосипеды.

    • @alexloktionoff6833
      @alexloktionoff6833 5 місяців тому

      @@mep3mep350Да софт тоже придется оптимизировать под разные версии RISCV.

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

    Про FB надо делать!

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

    к слову в кавычках " " должно автоматом дописываться 0. .byte 0x00 - это уже лишнее.

    • @CityAceE
      @CityAceE  5 місяців тому

      Ах, так вот откуда лишний байт нулей взялся! Я на знал, что ассемблер GNU C после кавычек автоматически добавляет дополнительный байт нулей. Спасибо за эту информацию! 👍

  • @user-bh2ot5ks8f
    @user-bh2ot5ks8f 5 місяців тому

    О! Отлично про эту архитектуру я почти ничего не знаю!

  • @brill2k
    @brill2k 5 місяців тому

    После PlayStation 1&2 все опкоды оказались до боли знакомы. Автору успехов и ждёмс продолжения riscv уроков. А, и второй раз рекомендую использовать плагин nppexec, что позволит избавиться от батников и компилить из npp нажатием одной клавиши.

    • @CityAceE
      @CityAceE  5 місяців тому

      Спасибо за рекомендацию. Возможно, я лично приму её на вооружение. Но в роликах не хотелось бы привязывать зрителей именно к Notepad++.

    • @kakosnonos4541
      @kakosnonos4541 5 місяців тому

      @@CityAceE Плагин полезный, тоже им пользуюсь

  • @alexorlovecky6662
    @alexorlovecky6662 5 місяців тому +1

    Вот у всех открытых технологий, есть один большой косяк: каждый делает чё ему взбредёт в голову.
    Даже у проприетарных системах есть косяки в документации/ совместимости (как минимум у того же стм32 лично мной их было выявлено дофига, особенно в H7 ), так то у французов...
    Даже представить боюсь, во что это превратится у китайцев с риск-5.

    • @alexloktionoff6833
      @alexloktionoff6833 5 місяців тому +1

      Да уже есть расхождения в реализации плавающей точки у HUAWEI. Но прелесть RISCV в том что можно реализовывать подмножества команд, это на порядок проще и совместимей, но конечно не для APPLICATION уровня процессоров, а для микро-контроллеров пойдет

    • @alexorlovecky6662
      @alexorlovecky6662 5 місяців тому

      @@alexloktionoff6833 Можно реализовать что угодно, но это преимущество не потребителя/ разработчика программного обеспечения, а преимущество производителя этого самого процессора.
      Разработчику софта, необходим чёткий мануал. И вот с этим как раз я и вижу все беды. Особенно когда производители китайцы.
      стм32 привёл как пример, у них и очепятки в документации к периферии, есть недоработки в компиляторе (при использовании H7, невозможно нормально размечать внешнюю память, которую нужно инициализировать). Но с ними можно разговаривать.
      Как и кто будет разговаривать с китайцами?
      А в конце, всё может быть, как с Nvidia: хотите документацию? Заплати бабла, подпиши документ о неразглашении.
      Был у меня недавно один проект, нужен был монохромный графический модуль с высоким разрешением. Проект "одноразовый".
      Нашёл офигенный модуль и будь дураком, сперва не нашёл документацию, купил на попробовать. Потом пошёл гуглить, понял, что гугл про него ничего не знает. Нашёл как выйти на контору (в Китае), написал им.
      Через пару дней пришёл ответ. А там мало того что за бабки, так они как в банке: ты сперва нарисуй что вообще за проект, какая моя выгода, какая партия.. Даже отвечать не стал, выбросил в урну.
      По этому, лучше за бОльшие деньги, но получить изделие по прописному стандарту, чем бегать потом за ними и клянчить разъяснения.

  • @b213videoz
    @b213videoz 5 місяців тому

    Очень интересно б твои видео посмотреть о программировани FPGA

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 5 місяців тому

    Конечно, у classic risc based архитектур очень хорошая обратная совместивость с более низкой разрядностью. Но запускать чисто 32-х битный код на 64-битной архитектуре так себе идея. Хотя работать будет. Да и для начала стоит использовать именно rv32. Так как её хватит за глаза, и для embedded она очень популярна.

  • @Al.Sy.
    @Al.Sy. 5 місяців тому

    Очень странно, что на Toolchain RISC-V ругался Kaspersky Security Cloud, обнаружив вредоносы. На Virustotal много антивирусов так же среагировали.

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 5 місяців тому +1

    Для строк можно использовать директиву .asciiz, тогда завершающий 0 добавится автоматически.

    • @Al.Sy.
      @Al.Sy. 5 місяців тому

      Со времён ДВК. 😊

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 5 місяців тому

    beqz -- это псевдоинструкция на risc-v. Но таковая присутствовала в mips. Видимо, данный дизассемблер не отображает инструкции как есть (возможно, есть какие то настройки). У objdump есть соответствующая опция. -Mno-aliases.
    The following RISC-V-specific disassembler options are supported for use
    with the -M switch (multiple options should be separated by commas):
    numeric Print numeric register names, rather than ABI names.
    no-aliases Disassemble only into canonical instructions, rather
    than into pseudoinstructions.

  • @Alan-12345
    @Alan-12345 5 місяців тому +1

    А нельзя ли заменить j loop на что-то типа bneq (t1), zero, loop?

    • @CityAceE
      @CityAceE  5 місяців тому +1

      Команда Branch Not Equal записывается, как bne, а не как bneq. И, к сожалению, косвенную адресацию (t1) в подобного рода командах использоваться нельзя. Но ход мыслей очень правильный! 👍

    • @Alan-12345
      @Alan-12345 5 місяців тому +1

      @@CityAceEПонял, спасибо!

  • @AvitoBot
    @AvitoBot 5 місяців тому

    11:50 ASCII символы!

  • @user-bp3hg9fu5t
    @user-bp3hg9fu5t 5 місяців тому +1

    Хорошо. Но можно уже и менее разжёвывать. 8080 неинтересен - устарел имхо

    • @CityAceE
      @CityAceE  5 місяців тому +1

      Разжёвываю подробно для новых зрителей, коих на этих роликах большинство. А для тех, кто смотрел предыдущие видео, можно было и половины не повторять.

  • @user-ep4rn9zh9g
    @user-ep4rn9zh9g 5 місяців тому

    17:55 То есть, UTF-8 нужно как-то отдельно реализовывать? Можете объяснить? Или будете рассматривать это в будущем?
    Сам я забросил ассемблер еще лет 27 назад. Забыл уже все.

    • @CityAceE
      @CityAceE  5 місяців тому

      Символы юникода могут кодироваться от одного до четырьмя байтами. Причём буквы латинского алфавита кодируются одним байтом, так что для них разницы между кодировкой ASCII нет. А вот спец.символы и кириллица - это другое дело. Для них нужен особый подход. Но и он тоже может быть реализован в терминале.

    • @user-ep4rn9zh9g
      @user-ep4rn9zh9g 5 місяців тому

      @@CityAceE Спасибо! Просто я думал, что в более современных процессорах стоило бы реализовать это уже, как минимум, на уровне микрокода. Хотя бы для двухбайтовых символов.

    • @cat35467
      @cat35467 Місяць тому

      ​@@user-ep4rn9zh9gПроцессор ничего не знает про текст и его кодирование. Для него есть только байты. А как их интерпретировать - это уже дело программиста.

  • @dkalmykov
    @dkalmykov 5 місяців тому

    А можно сюда адрес фреймбуфера огласить? И с какими ключами qemu-system-riscv64 запускать? Не могу терпеть, хочу сам попробовать продожить, по аналогии с уроками по ARM :^)

    • @CityAceE
      @CityAceE  5 місяців тому

      Чтобы получить адрес фреймбуфера необходимо произвести длинную цепочку инициализации PCI-шины, VGA-адаптера и других действий. Так что не всё так просто, к сожалению.

  • @V32Vlad
    @V32Vlad Місяць тому

    Забавно -- батники, а что make уже не в почёте у тех, кто пишет на ассемблере? ;)

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

      Ну так я ж показываю под Windows. Или make уже и в Windows завезли?

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

      @@CityAceE, про консоль и консольные приложения (тот же FAR) под Windows вы конечно же ничего не слышали? ;-D

  • @alexloktionoff6833
    @alexloktionoff6833 5 місяців тому

    Изучение ассемблера RISCV - хорошее вложение для эмбедеров, микроконтроллеров понаделают кому не лень, вряд ли он умрет.

    • @Al.Sy.
      @Al.Sy. 5 місяців тому +2

      Уже делают. В России НИИЭТ сделал, в продаже уже есть.

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

      @@Al.Sy.Китай штампует RISCV микроконтроллеры по 10 центов давно

  • @AvitoBot
    @AvitoBot 5 місяців тому

    KolibriOS собрать для RISC-V

    • @CityAceE
      @CityAceE  5 місяців тому

      KolibriOS гвоздями прибита к архитектуре Intel x86, так как написана на местном ассемблере. Собрать её под что-то другое не получится никак - только переписать с нуля.

    • @AvitoBot
      @AvitoBot 5 місяців тому

      @@CityAceE ну я про это 🙂
      Когда уже искусственный интеллект научится писать операционную систему с нуля по другую архитектуру

  • @user-wv5wj7sz2e
    @user-wv5wj7sz2e 5 місяців тому

    Risc-v всё ещё 32-х битный или уже изобрили 64-х битную версию

    • @CityAceE
      @CityAceE  5 місяців тому

      Если посмотреть более внимательно, то и компилятор, и эмулятор в этом примере используются именно 64-х битные, хотя сам код написал для 32-х бит. Но на это у меня были причины.

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

    И ещё один вопрос - как вы узнали адрес?

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

      В дереве устройств всё есть - qemu-riscv64-virt.dts

  • @PavelLaminar
    @PavelLaminar 5 місяців тому

    На мой взгляд надо было хоть немного раскрыть тему сегментации памяти в противном случае для новичков вряд ли будет понятно что за .text что за магический 0х800000000

    • @CityAceE
      @CityAceE  5 місяців тому

      Ну так-то да, но я стараюсь всё-таки объяснять то, без чего нельзя обойтись на данном конкретном этапе. И, по моему скоромному мнению, до сегментации памяти можно не добраться ещё довольно долгое время 😉Я ведь даже про регистры ничего не рассказал и про другие важные вещи типа прерываний. Да и про потоки умолчал, просто под шумок задействовав одноядерный процессор. В общем, чем меньше сразу грузить людей всякими нюансами, там больше шансов, что они не разбегутся после первого же ролика. Но я могу быть и не прав 🤷‍♂️

    • @PavelLaminar
      @PavelLaminar 5 місяців тому

      @@CityAceE Про регистры как раз таки было сказано ) и самое главное минимально и достаточно чтобы с одной стороны сказать что они есть и с другой не перегрузить. Про память примерно в таком же ключе - было бы идеально. В любом случае серию по ассемблеру всячески поддерживаю и слежу. 👍

  • @abelyarlindsey8386
    @abelyarlindsey8386 5 місяців тому

    29:30 @echo off

  • @user-qp5sf7ik8i
    @user-qp5sf7ik8i 5 місяців тому

    А можно получить плагин для notepad?

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

      Вот, например: github.com/aidandempsey/riscv_npp
      А цвета можно подкрутить по вкусу, зайдя в настройки.

  • @user-pn5xz2uu5w
    @user-pn5xz2uu5w 3 місяці тому

    Ой-ой-ой, к логопеду, срочно!!!

    • @CityAceE
      @CityAceE  3 місяці тому

      Был я у него. Поздно, говорят...

    • @user-pn5xz2uu5w
      @user-pn5xz2uu5w 3 місяці тому

      @@CityAceE в Советскую эпоху это успешно делали в детском саду.
      В либерал-капиталистическое время всем на все похрен, кроме денег.