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

В этом ролике мы вкратце познакомимся с процессорами архитектуры RISC-V, развернём простую среду разработки, а также напишем, скомпилируем и запустим простейшую программа на ассемблере, и разберём как она работает.

Краткое содержание видео:

Введение:

Автор знакомит с темой программирования на ассемблере для RISC-V.
Объясняет, почему он выбрал RISC-V вместо ARM.
Перечисляет преимущества RISC-V, такие как открытая архитектура, энергоэффективность и производительность.

Установка:

Автор демонстрирует, как установить текстовый редактор Notepad++ и плагин для подсветки синтаксиса.
Объясняет, как скачать и установить кросс-компилятор и эмулятор RISC-V.

Написание программы:

Автор показывает пример простой программы Hello World на ассемблере RISC-V.
Объясняет каждую строку кода и используемые команды.
Детально описывает регистры RISC-V и соглашение ABI.

Компиляция и запуск:

Автор демонстрирует, как создать пакетный файл для компиляции и запуска программы.
Объясняет команды в пакетном файле.
Запускает программу и показывает результат в эмуляторе.

Заключение:

Автор подводит итоги, кратко повторяя основные моменты.
Выражает надежду, что видео было информативным и мотивирующим.
Призывает к дальнейшему изучению программирования на RISC-V.

Дополнительные сведения:

Автор предоставляет ссылки на ресурсы, упомянутые в видео, в описании.
Видео содержит много полезных советов и рекомендаций для начинающих программистов на RISC-V.

Важно отметить:

Это лишь краткое содержание видео.
Для полного понимания темы рекомендуется просмотреть видео целиком.

Надеюсь, эта информация была вам полезна!

https://gemini.google.com

Расшифровка видео


0:01
сердечно Приветствую всех кто заглянул на огонёк сегодняшнее видео будет
0:06
посвящено новой теме а именно программированию на языке ассемблера для
0:12
процессоров С архитектурой К 5 спешу успокоить тех моих зрителей которые
0:20
ожидают продолжения уроков по программированию на а для Intel 88 и
0:28
процессоров продолжение темам обязательно будет но будет чуть позже я
0:34
к сожалению ограничен во времени и возможностях и стараюсь делать видео по
0:43
мере возникновения интереса и энтузиазма в настоящий
0:48
момент у меня возникло желание поделиться с вами интересной На мой
0:54
взгляд Темой программированием на ассемблере Почему же остановил свой
1:01
выбор на архитектуре risk 5 ведь существует целая куча всяких архитектур
1:08
достаточно интересных под час но наверное для того чтобы понять Чем
1:13
вызван мой интерес нужно немножко остановиться на risk 5 в целом как вы
1:21
знаете сейчас на коне У нас процессоры с архитектурой а они стоят и в смартфонах
1:28
и в новых макбуках и в планшетах и система Арм используется в
1:35
микроконтроллерах во всяких телевизорах Ну то есть везде везде везде достаточно популярная
1:42
архитектура Но к сожалению это архитектура коммерческая не может
1:49
производитель микрочипов взять Вот так вот и просто выпустить свой процессор
1:55
совместимый по будете как производитель сделать
2:02
отчисление купить лицензию компании головной которая и является разработчиком этих ядер в отличие от
2:10
амов архитектура risk 5 является открытой то есть процессоры с
2:16
архитектурой risk 5 это Ну примерно тоже самое что система Linux среди
2:24
операционных систем любой желающий производитель микрочипов [музыка]
2:30
специфика и сделать свой собственный процессор с архитектурой То есть все все
2:38
все производители будь у них возможности могут использовать эту архитектуру и
2:45
выпустить свои процессоры Как вы знаете сейчас Китай находится под жёстким
2:51
давлением Со стороны Запада их ограничивают в
2:58
технологиях На эту архитектуру и активно сейчас доливают её делая такие
3:06
достаточно мощные процессоры многоядерные энергоэффективные быстрые
3:12
Ну к сожалению к 5 всё ещё уступает по своей скорости процессором а Но близо к
3:20
тот день и час когда они догонят и перегонять их Именно поэтому данная
3:27
архитектура мне показалась очень привлекательный более того когда я начал
3:33
плотнее знакомиться с ассемблера мне понравились ряд моментов которые я
3:38
встретил при изучении например система команд там достаточно
3:44
сокращённая Как вы знаете риск это аббревиатура означает что процессор с
3:49
сокращённой системой команд впрочем как и Ар Вот Но когда я изучал Арм там
3:56
команд просто немерено их очень много их много разновидностей целая Куча и каждый
4:03
раз всё новые и новые встречаются все команды держать в голове Просто нереально в отличие от Арма у риска там
4:11
по-моему не более со команд всего есть в стандартном наборе там есть
4:17
конечно тоже и расширение типа для плавающей точки и прочие другие Но вот
4:24
основной набор – это не более 4 команд которые достаточно легко выучить держать
4:30
в голове помимо сокращённого и понятного набора Мне понравилось ряд моментов
4:35
которые используются допустим там достаточно просто можно загрузить длинное число и адрес Ну это всё конечно
4:43
выполняется псевдо командами но тем не менее понравилась Такая фишка которую я правда потом увидел и в какой-то другой
4:49
архитектуре уже не помню что например один из регистров именно x0 всегда
4:55
содержит Ноль это очень удобно в плане вычисления потому что достаточно часто
5:01
приходится обнулять какие-то регистры сравнивать с нулём и так далее И вот
5:07
всегда приходит на помощь регистр x0 который также имеет псевдоним Zero
5:13
например ещё такой любопытный момент есть команда AD I которая служит для
5:20
сложения с каким-то конкретным числом AD immediat то есть мы складываем какое-то
5:28
вот число которое задаётся пользователям но отсутствует
5:34
команда Sub то есть мы прибавить какой-то число можем а отнять не можем
5:39
Но в амре к 5 это достигается тем что мы
5:45
складываем регистр наш с отрицательным числом тем самым добиваемся команды Sub
5:51
тоже самое с командой арифметического сдвига влево такой команды нет в наборе команд
6:00
Зато есть арифметический сдвиг вправо так вот арифметический сдвиг влево
6:05
достигается дополнительным сдвигом вправо то есть когда мы переходим в границу и в итоге мы получаем сдвинутые
6:13
биты именно в таком виде В каком надо также много псевдо инструкций например
6:20
есть псевдо инструкция Operation она достигается
6:26
просто ну фейковым сложением регистра x0 который я уже упомянул Z с
6:35
нум также ряд других команд то есть ну мне показалось всё это интересным и я
6:42
начал изучать в процессе изучения я столкнулся с тем что достаточно сложно
6:48
сделать первый шаг потому как нигде эта тема не освещается нет никаких шаблонов
6:54
ничего нету информация очень разрозненная и так далее огромным трудом
7:00
мне удалось собрать этого едино и сделать готовый шаблон для того чтобы
7:07
можно было проводить какие-то первые свои эксперименты Ну и собственно говоря
7:13
этой информацие я и хочу поделиться с вами сегодня в этом ролике Надеюсь я смог вас
7:21
как-то заинтересовать данной Темой а возможно Вы являетесь как раз Тем самым
7:27
человеком который в поисках информации о том как же начать и набрели
7:34
на мой ролик поэтому Надеюсь что информация из него окажется вам полезной
7:42
Итак предлагаю приступить как обычно для того чтобы нам программировать нам нужно
7:48
прежде всего набирать Наш текст Для этого используется самый обычный
7:54
текстовый редактор любой абсолютно ВС чем вы пользуетесь для набора
7:59
может быть применено расскажу про свой опыт Я как вы знаете из моих других
8:06
роликов использую в качестве текстового редактора notepad п+ он доступен на
8:12
сайте ссылка будет в описании к этому ролику и всё что вам требуется это
8:18
просто его скачать и начать использовать дополнительно я также использую плагин
8:24
для подсветки синтаксиса Ну я практически его сам сделал у меня все
8:29
мои синтаксис на разные ассемблере подсвеченные единообразно цветовую тему
8:35
я взял из пайчарм на питоне Вот точно также
8:42
раскрасил и в принципе Где бы я сейчас не писал у меня всё раскрашено одинаково
8:49
Вы можете использовать подсветку можете не использовать это дело каждого либо
8:55
использовать какой-то свой редактор с редактором разобрались Далее
9:01
для того чтобы скомпилировать наш код для процессора risk 5 нам не обязательно
9:09
программировать на устройстве risk 5 для этого мы можем использовать Крос компилятор я использую в качестве
9:16
операционной системы Windows Поэтому мне нужен Крос компилятор для Windows но вы если
9:24
используете Linux macos и так далее То есть всё это доступно Пожалуйста можете
9:30
скачивать Я буду рассказывать про Windows значит Проходите на сайт ссылка
9:36
на который также будет в описании и скачиваете toolchain я использую последнюю версию
9:44
Вот она занимает всего лишь 22 МБ И устанавливаю всё это дело в каталог по
9:52
умолчанию а именно в корневую папку диска c там
9:58
создаётся И никакие галочки я не трогаю Ну
10:04
естественно чтобы продолжить нужно принять условия и дальше установить установка не занимает
10:11
длительного времени и не имеет каких-то особенностей Ну и третья программа
10:16
которая вам понадобится это собственно эмулятор который
10:21
способен эмулировать архитектуру процессора rk 5 я по
10:27
традиции использую му в принципе я даже не знаю каких-то альтернатив Хотя наверняка они существуют но эмулятор em
10:35
самый известный самый популярный открытый бесплатный и так
10:41
далее и тому подобное поэтому проходим на сайт ссылка также будет в описании
10:46
Заходим в папку Download выбираем Windows если вы используете Windows
10:52
выбираем архитектуру для готовых бинарник тридцати двух битную или че бит
11:00
у меня используется Windows 64 Бита поэтому я выбираю версию на 64 Бита оказываемся на
11:09
сайте со скачиванием и вот здесь прямо в корне находится последняя версия которую
11:16
мы будем скачивать щёлкай скачиваете и устанавливаете установка также не имеет
11:23
каких-то особенностей язык есть только английский из известных мне нажимаем
11:29
Окей ну и далее Всё по накатанной Next Next Next соглашаемся со всем
11:36
устанавливаем в каталог по умолчанию диск C куму Ну и на этом можно
11:44
сказать Всё теперь можно приступить непосредственно к написанию нашего
11:50
ассемблер текста для этого создаём в любом удобном месте папку желательно
11:56
только чтобы там не было кириллицы в именах Ну и пробелы тоже нежелательные
12:02
Хотя они у ня и есть Ну вот от кириллицы точно ч отказаться и там создам пустой
12:11
фай в Мом случае это Hello Def World с расширением S далее открыва этот фай в
12:19
шем текстовом редакторе повторюсь Что в моём случа это + и копируем туда тек
12:28
программы но мне Для начала ещё нужно выбрать подсветку синтаксиса вот подсветка
12:34
выбрана перед нами наша первая программа это тот самый минимум который можно
12:42
благополучно скомпилировать и запустить под эмулятором после чего получить
12:47
результат данная программа выведет надпись Hello world в нашу консоль в консоль элиго
12:56
устройства Давайте разм каждую строчку этой небольшой программы начинается ВС с
13:05
со строки section T э строка необходима для компилятора чтобы он понимал что
13:12
именно мы будем компилировать и к какому адресу всё это дело прикладывать на
13:19
какой адрес мы будем опираться То есть это обязательно это поменять нельзя
13:25
далее строка GL и тельным подчеркиванием
13:30
эта вещь тоже необходима но в целом вот эту конструкцию можно удалить оно и так
13:36
с компилируется Однако оно поругает в процессе компиляции что обязательная
13:42
метка Старт не найдена и присвоят ей тот адрес который мы потом в параметрах
13:50
компиляции укажем то есть вот вот эта конструкция из трёх строк она в целом
13:55
обязательна Давайте не будем её игнорировать Значит эта строка говорит о
14:01
том что мы объявляем глобальную переменную с названием Старт компилятор будет знать и
14:08
передавать эту метку Везде где нужно Ну а дальше начинается наша программа как я
14:13
уже сказал регистры у процессора risk 5 достаточно интересны там есть 32
14:21
регистра которые называются x0 и до x31
14:27
32 регистра общего назначения если это можно так сказать к ним можно обращаться
14:32
X5 X6 и так далее Однако существует такое понятие как Application binary
14:39
Interface или сокращённо AB так пишется
14:47
abi и Согласно соглашению abi программисты должны следовать
14:52
определённым правилам с тем чтобы их программа оказалась совместима с
14:57
какими-то Библио операционно систе и так далее и тому подобное и вот для этого существуют
15:04
псевдонимы для наших регистров в частности вот здесь вот Я использовал X5
15:11
X6 X7 но Согласно соглашению abi эти
15:17
регистры называются 0 1 и так далее и тому
15:23
подобное то есть процессор X5 у называется X6 Т1 X7 Т2 на самом деле Вот
15:34
вот это всё естественно скомпилировать работать но когда вы всё это дело деза
15:39
сабли вы увидите что эти процессоры будут
15:48
обозвать назван как zer ну до этого мы дойдём Давайте двигаться дальше значит
15:54
здесь у нас начинается Старт После этого мы переходим к
15:59
наше первой строки она загружает в регистр F5 вот такое вот длинное число
16:06
которая представляет из себя адрес порта консоли куда мы будем выводить по одному
16:14
символу Это команда imate на самом деле это Мета
16:20
команда псевдо команда такой команда не существует и в процесе
16:25
компиляции команда последовательностью команд
16:31
результатом которых и является загрузка вот этого числа в регистр X5 следующая
16:39
команда адре эта команда загружает в регистр
16:45
S6 адрес нашего текстового сообщения вот мы видим метку текст признаком метки
16:53
является двоеточие после е названия То есть когда мы задам метку мы обозначаем
16:59
двоеточием что это метка А в самом тексте обращение к метке уже идёт без
17:07
двоеточия Если вы напишете двоеточие то компилятор будет ругаться поэтому метка
17:13
задаётся двоеточием а обращение к ней идёт без двое точек и далее Значит мы
17:20
загрузили в наш регистр X6 адрес нашей метки текст а в метке текст мы имеем
17:29
по буквам зашифрованную последовательность байт каждый символ имеет своё восьмибитное обозначение и
17:37
вот таким оператором string фраза взятая в кавычки нам зашифрует
17:43
посимвольно нашу фразу также стринг можно
17:48
заменить вот на такое значение можно так можно так без разницы результат будет
17:56
один и в конце мы задаём байт нулевой он
18:03
будет у нас служить маркером конца сообщения значит Как вы уже обратили
18:08
внимание после знака решётки хэша у нас идут комментарии всё что после хэша
18:16
компилятор будет игнорировать мы можем быстро таким образом какие-то строчки
18:21
комментировать если поставим А знак хэша в начале то эта строчка уже не будет
18:27
компилировать можем выделить там целую блок его
18:34
закомментировать Он тоже не будет компилировать комментарии требуются
18:40
для более точного понимания что происходит Ну это записки
18:47
на полях для программиста они помогают понимать работу кода но они не влияют на как-то
18:55
на его компиляцию или выполнение сугубо для удобства программиста значит следующая строка
19:04
LB lad by Мы загружаем один байт в
19:11
регистр X7 и загружаем мы его с
19:16
адреса X6 то есть есть у нас некий адрес который хранится в регистре X6 и мы из
19:25
этого адреса забираем первый байт а в регистре X6 у нас напоминаю загружен
19:35
адрес текста то есть таким образом вот эта вот команда она
19:41
загружает букву H вернее её код в наш регистр X7 И вообще правильно
19:49
вот так вот записать со смещением ноль потому что
19:55
вот эти команды Они здесь используют ещё смещение но так как у нас нулевое
20:01
смещение мы могли бы написать Ну и тогда бы это сколько было бы 0 1 2 3 4 5 6 7 8
20:08
тогда бы загрузилась вот эта буква Ну у нас нулевое смещение и в принципе нолик
20:14
можно опустить Ну вот принято записывать всё-таки даже нулевое значение перед
20:19
скобками Значит мы загрузили теперь у нас в регистре X7
20:25
находится код буквы H следующая
20:30
строка определяет условия и переход По условию Что она делает как я уже сказал
20:38
в регистре x0 у нас всегда находится Ноль это непреложная истина и это никак
20:46
не меняется Таким образом мы сравниваем наш регистр X7 с нум А в регистре X7 у
20:56
нас находится код буквы сравниваем с нум код буквы H естественно
21:02
не но и эта команда говорит о следующем
21:07
переход If equ если они равны тогда мы
21:12
переходим на метку фиш Вот Но так как у нас H не равно нулю
21:18
мы Не переходим на финиш а двигаемся дальше переходим к
21:25
следующей кома
21:33
SB то есть сохранить записать байт мы записываем байт который у нас находится
21:41
в регистре X7 в ячейку по адресу хранящегося в регистре
21:49
X5 напомню что в регистре X5 у нас хранится адрес порта консоли таким
21:55
образом в порт консоли символа
22:02
H сделали следующая команда делает
22:08
инкремент нашего регистра X6 значит что она делает она к регистру X6 добавляет
22:16
единицу и помещает значение вот этой суммы в
22:22
регистр X6 Ну таким образом действие е Понятно к регистру X6
22:29
есть делает инкремент Напоминаю что эта команда расшифровывается Как добавить и
22:37
добавить Ну значение какого-то
22:42
конкретного аргумента в данном случае это единица добавили и дальше идёт
22:57
Jum Таким образом мы сделали первую итерацию цикла и этот цикл будет
23:03
крутиться до тех пор пока у нас вот это условие не сыграет а сыграет оно когда у
23:11
нас в регистре X7 окажется ноль То есть когда мы последовательно переберёмся
23:23
до нуля как только мы доберёмся до нуля у нас в регистре X7 окажется ноль мы
23:31
сравним это с нулём и перейдём на финиш А на финише у нас бесконечный
23:38
цикл программа замкнута сама на себя безусловный переход на финиш то есть вот
23:44
эта строка будет крутиться бесконечно Пока мы не выключим или не
23:51
перезапустить Наш компьютер а так как мы будем заниматься разработкой и не раз
23:57
компилировать можно было это сделать конечно из командной строки но нам
24:02
всё-таки удобнее сделать некий Файлик пакетный Бат файл который будет
24:09
компилировать нашу программу Давайте разберём Что находится внутри этого
24:16
файла откроем его в нашем текстовом редакторе и строку за строку посмотрим
24:23
значит в первых двух строках мы задаём наши переменные а именно файл
24:29
и Tool Chain здесь мы указываем имя нашего файла на тот случай
24:36
Если мы будем использовать этот шаблон для каких-то других наших проектов с другими названиями удобнее конечно в
24:43
одном месте поменять название нашего проекта и везде где мы встретим файл Вот
24:49
вы видите много мест у нас везде будет подставляться
24:55
наше имя это удобно равно и как значение Tool Chain мы здесь прописываем
25:03
название нашего основного инструмента до тех пор пока его название
25:10
совпадает то есть вот всё что здесь to chin оно будет заменено Вот этим
25:16
участком нашей переменной значит с этими двумя разобрались дальше идёт три строки
25:23
непосредственной компиляции Значит на первой строке мы вызываем непосредственно наш аем с тем чтобы
25:31
получить объектный код после того как отработает вот эта
25:36
команда у нас появится в нашем списке файл с названием
25:42
Hello Word и с расширением О
25:48
object это будет санси блинный код но он не будет привязан ни к какому
25:55
адресу то есть это по сути такая вещь полуфабрикат которому требуется
26:02
дополнительная обработка линковка Вот и на втором шаге Мы в общем-то и делаем
26:10
линков Командо LD А что делает линковка она объединяет
26:18
между собой несколько объектных файлов если у нас их несколько а также их привязывает к
26:24
какому-то адресу исполнения то есть в данном случае у нас один-единственный
26:30
файл object файл и мы его привязываем к
26:36
адресу вот такому вот вос и много нулей Это адрес поменять нельзя то есть мы
26:43
вернее его поменять Можно но скомпилировать это такой вот известный
26:50
адрес для нашей виртуальной машины под которой мы будем запускать Он нигде не
26:57
прописан и нигде неизвестен Ну вот своими методами я его выяснил благодаря
27:03
чему Вот появилась возможность запускать эти бинарки в виртуальной машине просто вот
27:10
примите это как данность то есть это вот этот вот текст помните мы вот здесь вот
27:17
записали текст Да вот собственно говоря вот эта команда Линку ет вот эту секцию
27:23
с названием текст вот к этому адресу после получим файл с
27:30
расширением H World в принципе вот этот файл уже можно
27:37
запускать под нашим эмулятором файл но он будет раздут там будут все наши пути
27:43
там будут названия наших подпрограмм если они есть
27:50
названия переменных какой-то куча мусора про но зато это будет такой исполняемый
27:55
фай в принципе исполняемый можно вот здесь другую любую задать адрес и эмулятор это всё
28:03
дело
28:17
прожужжала ELF с помощью команды Ob Copy
28:22
получаем наш имидж в итоге мы получим файл крохотный
28:28
крохотуля там ничего лишнего не будет там только будет исполняемый код Hello
28:34
world с окончанием с расширением emg Ну и следующие две строки мы
28:44
почищу ет Hello world O мы его удаляем и
28:49
тоже самое делаем с файлом ELF в итоге после всей этой манипуляции у нас
28:55
Останется только Hello world и последняя строка – это па с тем чтобы
29:03
окно быстро не закрывалось это команда позволяет ожидать нажатия любой клавиши
29:09
Потому что если там у нас не что-то пойдёт не так будут какие-то ошибки то
29:15
Ну просто окно тут же исчезнет мы не посмотрим Было ли произведено ассембли и
29:21
последующей операции без ошибок или нет то есть это позволит нам задержать окно
29:28
на экране Ну и как вы обратили внимание в начале каждой строки я добавил собачки
29:34
Это говорит о том чтобы в консоль не выводилась сама команда то есть чтобы мы
29:41
не видели лишней информации Мы увидим всё что будет нас нам писать и ассемблер
29:47
и линков и копировщик объектных файлов Если будут ошибки все
29:53
сообщения от них мы увидим номы не увидим сами вот эти Роки удобно Таким
29:59
образом мы подготовили наш файл для компиляции и Давайте его запустим После
30:05
того как мы запустили наш исполняемый файл мы получили в консоли в общем-то
30:12
такое вот сообщение что для продолжения нажмите любую клавишу и после того как
30:17
мы нажмём на клавишу у нас это окно закроется то есть мы не получили никаких ошибок процесс компиляции линков и
30:26
объектного копи у нас произошел без особенностей и если сейчас мы
30:32
переместимся в нашу папку с нашими файлами мы увидим что у нас появился
30:38
новый файл Hello world emg как мы ожидали длина которого составляет
30:43
всего-навсего 52 байта несмотря на свои крохотные размеры Это программа которая
30:51
способна выполняться и конкретно Эта программа выведет нам Hello world в нашу
30:56
консоль консоль нашего эмулировать
31:03
содержимое этого файла то мы увидим в начале э исполняемый
31:09
код вот он и далее собственно наша фраза Hello Word которая заканчивается нулём
31:16
теперь Давайте попробуем всё это дело запустить опять же чтобы нам удобно
31:22
запускать нам потребуется ещё один пакетный файл под
31:27
файл Хотя опять же мы можем Всё это дело запускать из командной строки но просто
31:32
неудобно каждый раз набирать эту последовательность гораздо проще один
31:38
раз запустить тфайл который выполнит все наши команды Давайте посмотрим
31:44
содержимое этого Бат файла он состоит из двух значащих строк Прежде всего это
31:50
установка нашего файла имени файла как и в предыдущем батнике то есть
31:58
присваивает переменный файл некое значение Hello world которое потом когда
32:06
встречается название переменной окружённое знаками процентов будет подставляться Вот это значение в данном
32:14
случае может быть это и не так актуально потому что у нас слово файл встречается всего лишь один раз и в принципе ничто
32:22
нам не мешает поменять что здесь что здесь Но мы не знаем как поведёт себя наш Бат файл
32:29
дальше будем ли мы туда какие-то строки добавлять или нет Поэтому Ну я для себя
32:34
делаю Вот так вы можете на самом деле использовать вот так вот А эту
32:42
строку удалить будет тогда только одна строка запуска дело ваше то есть всё
32:48
делаете Как Вам удобно мне удобно так ну и собачкой я скрываю эту строку чтобы
32:53
она не писалась во время запуска а во второй Роке идёт непосредственный запуск
32:59
нашего эмулятора ну прежде всего мы вызываем наш исполняемый файл
33:05
эмулятора напомню что му – это эмулятор который может эмулировать всякие разные
33:12
архитектуры и и risk 5 и mips и ещё всякие другие Ну в данном случае нам
33:20
интересен и нужен именно эмулятор архитектуры risk 5 64 бит
33:30
вызываем но если мы не будем использовать никакие ключи вот так
33:35
вызовем то ничего полезного мы не увидим эмулятор скорее всего запустится и
33:41
схлопнется тут же потому что для запуска он требует вводные данные и мы их ему
33:48
предоставляем в виде ключей первый ключ Ma можно написать это строчными буквами
33:55
а можно заменить одной заглавной буквы мы указываем что в качестве
34:07
эмулировать
34:19
работоспособны есть и другие мули емы машины Вот в этой архитектуре
34:24
но нас интересует именно виртуальная машина с названием vird с
34:31
этим разобрались следующий ключ No graphic этот ключ погасит нам окно
34:38
эмулятора Когда вы запускаете куму Первое у нас появляется окно консоли и
34:47
далее открывается окно эмулятора если мы там загружаем какую-то Linux или ещё
34:53
что-то мы увидим там рабочий стол консоль и прочее прочее этой операционной системы Но в нашем
34:58
конкретном примере мы графику использовать не будем поэтому мы можем
35:04
скрыть это окно чтобы оно нас не отвлекало это делается с помощью ключа
35:11
graphic следующий ключ BIOS мы говорим нашему эмулятору чтобы он выключил BIOS
35:19
по умолчанию там идт BIOS открытый он выведет ряд параметров
35:25
информацию лишнюю можете кстати попробовать вот этот параметр исключить и посмотреть что
35:32
будет как запустится наш эмулятор но чтобы опять же всё это дело лишить
35:40
лишней информации мы воспользуемся ключам BIOS Non Ну и последний самый
35:45
важный ключ – это загрузка нашего файла который мы скомпилировать сделали
35:52
написали скомпилировать И теперь мы загружаем это делается с помощью ключа ке
35:58
и указываем Что является келом в данном случае это файл Hello Word MG в принципе
36:05
это всё Теперь мы готовы запустить наш скомпилированный файл Ну и после запуска
36:12
у нас откроется консоль и мы увидим нашу строку запуска которую мы только что
36:17
разобрали и тот результат которого мы хотели достичь а именно наша надпись
36:24
Hello world выполненная в кодах процессора risk 5 и написанная на
36:32
ассемблере под голое железо мы не использовали ни bu ни какие-то там
36:37
системные прерывания всё только на Амбре только под голое железо наша программа
36:44
заняла всего лишь 52 байта А теперь я предлагаю вам заглянуть
36:50
в мле нашей программы после того как
36:56
ском компилировать и посмотреть что же у нас получилось на выходе это бывает
37:02
иногда достаточно любопытно А как вы помните я вам сказал что процессоры
37:08
вернее регистры процессора risk 5 имеют названия
37:14
общепринятые от x0 до x31 а также названия принятые по системе
37:23
abi Вот и мы использовали названия которые начинаются на X а
37:32
компилятор тем не менее декомпилировать
37:47
внимание что здесь хоть мы и написали адрес и здесь декомпилировать
37:53
же Мета команда Обратите внимание что она занимает не 4 байта как все
37:59
остальные команды а занимает целых 8 байт то есть Это говорит о том что вот
38:07
эта команда у нас заменена двумя командами это в принципе можно
38:14
посмотреть тоже какими двумя командами она заменена Ну и здесь мы
38:21
использовали команду branch If equ здесь
38:28
код Z куда-то ушёл здесь вот он переместился вот сюда Ну а в целом всё
38:34
остальное так же как и есть в конце были добавлены два байта нулей вот наш рин
38:43
Hell Word заканчивающийся нулём и потом то ли компилятор то ли ещё
38:49
кто-то добавил ещё два файла нулей возможно Для того чтобы выровнять честно
38:54
говоря не знаю откуда взялись эти два нуля Ну в целом вот так выглядит наша
39:00
программа Поэтому я предлагаю переименовать все наши регистры всё-таки по таким
39:07
общепринятым нормам хотя на самом деле если мы будем писать под голое железо
39:12
нам особого смысла придерживаться стандартов abbi Нет мы сами себе хозяева
39:19
мы ни на кого не смотрим Ну тем не менее Давайте будем писать так как пишут люди
39:25
То есть я переименовал все регистры наши с иксов на значение T там есть ещё и A и
39:33
S и всякое другое Ну вот сейчас мы используем Temp регистры их всего семь
39:39
от т0 по-моему до т7 Вот и Ну также регистр x0 у нас
39:48
принято обозначать словом zer Точно также мы его используем Ну и здесь я
39:53
вернул на значение string в декомпиляция Вы видели тоже значение string и на
40:01
этом мы работу с файлом завершаем именно в таком виде Я всё это сохраню на github
40:09
вы сможете оттуда всё это скачать батники и ассемблерные текст поиз учать
40:16
поэкспериментировать если вам будет интересно вот и на этом я буду Наверное
40:24
закругляться Надеюсь что если вы до этого никогда не сталкивались с
40:29
процессором ris 5 вам стало чуточку интереснее И вы
40:35
найдёте время почитать про него побольше узнать Если же вы искали именно эту
40:43
информацию как начать писать на К 5 Надеюсь я на большинство ваших вопросов
40:50
ответил и после просмотра этого видео вы сможете экспериментировать дальше Ну а
40:58
если будет достаточно откликов то я продолжу этот
41:03
цикл как минимум очень долго я не мог получить указатель на фрейм вуфер
41:09
инициализировать графический экран чтобы на нём что-то рисовать а Мой основной интерес – это как раз именно получать
41:16
какую-то графическую информацию то есть отрисовывать какие-то картинки выводить
41:21
буквы в графическом виде и если вам будет интересно то я
41:28
могу продолжить этот цикл как минимум я сейчас научился этот буфер
41:34
инициализировать и рисовать на нём как минимум я смогу научить вас вывести в
41:39
графическом виде надпись Hello world как я и делал в уроках для процессора Intel
41:46
8080 и процессора Как вы
41:53
види что э же программа
41:59
затем выводит эту же самую надпись уже в окне эмулятора она в графическом виде Да
42:06
ещё и в цвете ну плюс Я заполнил такой сеточкой вернее не сеточкой а
42:11
вертикальными линиями чередующимися тоже в цвете То есть тут ещё мы сдаём и
42:17
цветовую палитру и загружаем шрифт и потом этот шрифт рисуем и так далее и
42:23
тому подобное вот если получу отклики будет интерес у зрителей то Ну конечно
42:29
продолжу а если нет ну будем двигаться дальше по части Ар и Intel
42:38
8080 А на этом У меня на сегодня всё
42:43
спасибо большое что досмотрели это видео до конца Спасибо за ваши подписки
42:49
комментарии и лайки Я желаю всем счастья
42:55
здоровья имир не над головой На сегодня у меня всё и до новых встреч в следующих
43:05
роликах

Поделиться: