Ассемблер 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/@...
Супер тема!! Респект за обучающие видео!
Ждем больше разнообразных видео по bare-metall для ARM и RISC-V!
в России тоже начали делать какие-то контроллеры на RISC-V. а значит скоро эта архитектура станет использоваться в промышленности и в госзакупках. для рф важная тема, более перспективная возможно чем arm.
Да, было бы очень интересно посмотреть про работу с фреймбуфером! Спасибо за ролик.
Спасибо! Очень интересно!
отличный материал.
Спасибо! С удовольствием адаптировал инструменты под линукс и повторил весь процесс. Но ARM, пожалуйста, не забрасывайте, хочется пройти до финала.
Спасибо!
Браво! Спасибо за проделанную работу!
Спасибо! Только вперёд!
Про дизасселблер IDA для RISC-V более подробно можно?
Идеально!!!
Но еще раз прошу, оставляйте пожалуйста подсветку синтаксиса специализированного под данный ассемблер!
disk.yandex.ru/d/W-cYuFjXj2yTNA Добавил и в описание ролика.
Насчёт section. У исполняемого файла есть секции. Их может быть несколько. Например, секция .data -- это область статических данных, в которых нельзя (в идеале) исполняться коду. Секция .text -- как раз таки и говорит компилятору (линкеру), что это секция исполняемого кода.
Вообще, это отдельная тема и можно даже было бы ролик запилить. Но у Вас и так времени мало, как я понимаю.
Всё правильно пишите. Но у нас baremetal, мы ни на кого не смотрим и ни от кого не зависим :)
Случайно наткнулся на ваш видос
Интересно и познавательно, рад, что подобное попадается в моей ленте
чтото новое узнать это хорошо, если ,конечно, чтото старое уже полностью освоено / усвоено, например armv7 и какой нибудь soc с ним. Вот бы звук издать устройством или в видеокамеру заглянуть 😅
На RPi звук выводится дубово, через ШИМ. Чем то похоже на Covox. Значения ШИМ из буфера выводятся по прерыванию от таймера.
Познавательно👍
Спасибо!!!
first!
спасибо, было интересно
Производительных десктопных RISCV еще ждать и ждать, одно для бесплатно стянуть систему команд, а совсем другое это накрутить на нее конвеерность, суперскалярность и т.п. чтоб за такт делать в разы больше. Такие ноу-хау имеют только солидные конторы, и отдавать свои дизайны за песплатно не собираются, они их лицензируют на тех-же условиях что и АРМ.
главное сохранение совместимости софта. даже если у тебя проц говно и без проприетарных фишек - софт на нем должен кое-как заработать. железо это полдела - софт это тоже куча человеко-часов. в условиях ограниченных ресурсов это очень критично не изобретать велосипеды.
@@mep3mep350Да софт тоже придется оптимизировать под разные версии RISCV.
Про FB надо делать!
к слову в кавычках " " должно автоматом дописываться 0. .byte 0x00 - это уже лишнее.
Ах, так вот откуда лишний байт нулей взялся! Я на знал, что ассемблер GNU C после кавычек автоматически добавляет дополнительный байт нулей. Спасибо за эту информацию! 👍
О! Отлично про эту архитектуру я почти ничего не знаю!
После PlayStation 1&2 все опкоды оказались до боли знакомы. Автору успехов и ждёмс продолжения riscv уроков. А, и второй раз рекомендую использовать плагин nppexec, что позволит избавиться от батников и компилить из npp нажатием одной клавиши.
Спасибо за рекомендацию. Возможно, я лично приму её на вооружение. Но в роликах не хотелось бы привязывать зрителей именно к Notepad++.
@@CityAceE Плагин полезный, тоже им пользуюсь
Вот у всех открытых технологий, есть один большой косяк: каждый делает чё ему взбредёт в голову.
Даже у проприетарных системах есть косяки в документации/ совместимости (как минимум у того же стм32 лично мной их было выявлено дофига, особенно в H7 ), так то у французов...
Даже представить боюсь, во что это превратится у китайцев с риск-5.
Да уже есть расхождения в реализации плавающей точки у HUAWEI. Но прелесть RISCV в том что можно реализовывать подмножества команд, это на порядок проще и совместимей, но конечно не для APPLICATION уровня процессоров, а для микро-контроллеров пойдет
@@alexloktionoff6833 Можно реализовать что угодно, но это преимущество не потребителя/ разработчика программного обеспечения, а преимущество производителя этого самого процессора.
Разработчику софта, необходим чёткий мануал. И вот с этим как раз я и вижу все беды. Особенно когда производители китайцы.
стм32 привёл как пример, у них и очепятки в документации к периферии, есть недоработки в компиляторе (при использовании H7, невозможно нормально размечать внешнюю память, которую нужно инициализировать). Но с ними можно разговаривать.
Как и кто будет разговаривать с китайцами?
А в конце, всё может быть, как с Nvidia: хотите документацию? Заплати бабла, подпиши документ о неразглашении.
Был у меня недавно один проект, нужен был монохромный графический модуль с высоким разрешением. Проект "одноразовый".
Нашёл офигенный модуль и будь дураком, сперва не нашёл документацию, купил на попробовать. Потом пошёл гуглить, понял, что гугл про него ничего не знает. Нашёл как выйти на контору (в Китае), написал им.
Через пару дней пришёл ответ. А там мало того что за бабки, так они как в банке: ты сперва нарисуй что вообще за проект, какая моя выгода, какая партия.. Даже отвечать не стал, выбросил в урну.
По этому, лучше за бОльшие деньги, но получить изделие по прописному стандарту, чем бегать потом за ними и клянчить разъяснения.
Очень интересно б твои видео посмотреть о программировани FPGA
Конечно, у classic risc based архитектур очень хорошая обратная совместивость с более низкой разрядностью. Но запускать чисто 32-х битный код на 64-битной архитектуре так себе идея. Хотя работать будет. Да и для начала стоит использовать именно rv32. Так как её хватит за глаза, и для embedded она очень популярна.
Очень странно, что на Toolchain RISC-V ругался Kaspersky Security Cloud, обнаружив вредоносы. На Virustotal много антивирусов так же среагировали.
Для строк можно использовать директиву .asciiz, тогда завершающий 0 добавится автоматически.
Со времён ДВК. 😊
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.
А нельзя ли заменить j loop на что-то типа bneq (t1), zero, loop?
Команда Branch Not Equal записывается, как bne, а не как bneq. И, к сожалению, косвенную адресацию (t1) в подобного рода командах использоваться нельзя. Но ход мыслей очень правильный! 👍
@@CityAceEПонял, спасибо!
11:50 ASCII символы!
Хорошо. Но можно уже и менее разжёвывать. 8080 неинтересен - устарел имхо
Разжёвываю подробно для новых зрителей, коих на этих роликах большинство. А для тех, кто смотрел предыдущие видео, можно было и половины не повторять.
17:55 То есть, UTF-8 нужно как-то отдельно реализовывать? Можете объяснить? Или будете рассматривать это в будущем?
Сам я забросил ассемблер еще лет 27 назад. Забыл уже все.
Символы юникода могут кодироваться от одного до четырьмя байтами. Причём буквы латинского алфавита кодируются одним байтом, так что для них разницы между кодировкой ASCII нет. А вот спец.символы и кириллица - это другое дело. Для них нужен особый подход. Но и он тоже может быть реализован в терминале.
@@CityAceE Спасибо! Просто я думал, что в более современных процессорах стоило бы реализовать это уже, как минимум, на уровне микрокода. Хотя бы для двухбайтовых символов.
@@user-ep4rn9zh9gПроцессор ничего не знает про текст и его кодирование. Для него есть только байты. А как их интерпретировать - это уже дело программиста.
А можно сюда адрес фреймбуфера огласить? И с какими ключами qemu-system-riscv64 запускать? Не могу терпеть, хочу сам попробовать продожить, по аналогии с уроками по ARM :^)
Чтобы получить адрес фреймбуфера необходимо произвести длинную цепочку инициализации PCI-шины, VGA-адаптера и других действий. Так что не всё так просто, к сожалению.
Забавно -- батники, а что make уже не в почёте у тех, кто пишет на ассемблере? ;)
Ну так я ж показываю под Windows. Или make уже и в Windows завезли?
@@CityAceE, про консоль и консольные приложения (тот же FAR) под Windows вы конечно же ничего не слышали? ;-D
Изучение ассемблера RISCV - хорошее вложение для эмбедеров, микроконтроллеров понаделают кому не лень, вряд ли он умрет.
Уже делают. В России НИИЭТ сделал, в продаже уже есть.
@@Al.Sy.Китай штампует RISCV микроконтроллеры по 10 центов давно
KolibriOS собрать для RISC-V
KolibriOS гвоздями прибита к архитектуре Intel x86, так как написана на местном ассемблере. Собрать её под что-то другое не получится никак - только переписать с нуля.
@@CityAceE ну я про это 🙂
Когда уже искусственный интеллект научится писать операционную систему с нуля по другую архитектуру
Risc-v всё ещё 32-х битный или уже изобрили 64-х битную версию
Если посмотреть более внимательно, то и компилятор, и эмулятор в этом примере используются именно 64-х битные, хотя сам код написал для 32-х бит. Но на это у меня были причины.
И ещё один вопрос - как вы узнали адрес?
В дереве устройств всё есть - qemu-riscv64-virt.dts
На мой взгляд надо было хоть немного раскрыть тему сегментации памяти в противном случае для новичков вряд ли будет понятно что за .text что за магический 0х800000000
Ну так-то да, но я стараюсь всё-таки объяснять то, без чего нельзя обойтись на данном конкретном этапе. И, по моему скоромному мнению, до сегментации памяти можно не добраться ещё довольно долгое время 😉Я ведь даже про регистры ничего не рассказал и про другие важные вещи типа прерываний. Да и про потоки умолчал, просто под шумок задействовав одноядерный процессор. В общем, чем меньше сразу грузить людей всякими нюансами, там больше шансов, что они не разбегутся после первого же ролика. Но я могу быть и не прав 🤷♂️
@@CityAceE Про регистры как раз таки было сказано ) и самое главное минимально и достаточно чтобы с одной стороны сказать что они есть и с другой не перегрузить. Про память примерно в таком же ключе - было бы идеально. В любом случае серию по ассемблеру всячески поддерживаю и слежу. 👍
29:30 @echo off
А можно получить плагин для notepad?
Вот, например: github.com/aidandempsey/riscv_npp
А цвета можно подкрутить по вкусу, зайдя в настройки.
Ой-ой-ой, к логопеду, срочно!!!
Был я у него. Поздно, говорят...
@@CityAceE в Советскую эпоху это успешно делали в детском саду.
В либерал-капиталистическое время всем на все похрен, кроме денег.