Данная книга продолжает серию «Книжная полка Истового инженера», которая издается при поддержке компании YADRO. Издание подготовлено к публикации Московским институтом электроники и математики им. А. И. Тихонова НИУ ВШЭ совместно с издательством «ДМК Пресс».
Перед вами переведенная и адаптированная для русскоязычного читателя книга С. Смита «RISC-V Assembly Language Programming», вышедшая в издательстве Apress в серии Maker Innovations в 2024 г. и уже получившая положительные отзывы и популярность в комьюнити разработчиков.
В ней изложены основы архитектуры набора инструкций RISC-V, описаны все группы инструкций языка ассемблера RISC-V, даны основные приемы разработки/оптимизации кода, а также способы взаимодействия с кодом на языках С и Python. Изучив основы программирования на языке ассемблера RISC-V с помощью этой книги, вы получите достаточно знаний, чтобы на ее основе создавать собственные проекты.
Книга предназначена для программистов, инженеров и студентов, которые уже умеют программировать на языках высокого уровня, таких как Python, lava, C# или даже С, и хотят изучить программирование на языке ассемблера на основе новой процессорной архитектуры RISC-V.

Чему вы научитесь.
Вы научитесь программировать на языке ассемблера для процессоров RISC-V, работающих в 32-битном либо 64-битном режиме. Все, что вы узнаете, непосредственно применимо ко всем устройствам RISC-V - от самых маленьких микроконтроллеров до самых больших суперскалярных суперкомпьютеров. Изучив язык ассемблера для одного процессора, вы получите инструменты для изучения языков программирования для других процессоров, например процессоров ARM, обычно используемых в мобильных устройствах.
Во всех устройствах RISC-V процессор является не просто центральным процессором, а целой системой на кристалле. Это означает, что большая часть функционала вычислительной системы может быть реализована на одном чипе. Когда компания разрабатывает устройство, она может выбирать различные модули, чтобы включать их в свой чип. Как правило, это процессор RISC-V с несколькими ядрами, то есть он может обрабатывать инструкции для нескольких программ, выполняемых одновременно. Скорее всего, он содержит несколько сопроцессоров для вычислений с плавающей точкой, графический процессор (GPU) и модули, реализующие различные коммуникационные протоколы.
ОГЛАВЛЕНИЕ.
От издательства.
Об авторе.
Научный редактор русского перевода.
Технический рецензент.
Благодарности.
Введение.
Предисловие от научного редактора русского перевода.
Глава 1. Начало работы.
История и эволюция процессора RISC-V.
Чему вы научитесь.
Десять причин изучать программирование на языке ассемблера.
Выполнение программ на RISC-V процессорах.
Программирование простой программы «Hello World».
Программа Hello World на Starfive Visionfive 2.
Программирование Hello World в эмуляторе QEMU.
Запуск программы Hello World на микроконтроллере ESP32-C3.
Итоги главы.
Упражнения.
Глава 2. Загрузка и сложение.
Компьютеры и числа.
Отрицательные числа.
Дополнительный код.
Инструкции ассемблера RISC-V.
Регистры процессора.
Формат инструкций RISC-V.
Ассемблер GCC.
Сложение регистров.
32 бита в 64-битном мире.
Перемещение регистров.
Непосредственный операнд.
Инструкция загрузки значения старших битов регистра.
Сдвиг битов.
Загрузка чисел в регистры большего размера.
Другие инструкции сдвига.
Вычитание.
Итоги главы.
Упражнения.
Глава 3. Инструменты разработчика.
GNU Make.
Перекомпоновка проекта.
Правило компоновки файлов.S.
Определение переменных.
Компоновка с помощью CMake.
Отладка с помощью gdb.
Подготовка к отладке.
Настройка под Linux.
Запуск отладчика gdb.
Настройка командной строки gdb под ESP32-C3.
Отладка с помощью gdb.
Итоги главы.
Упражнения.
Глава 4. Управление потоком программ.
Создание безусловных переходов.
Условные ветвления.
Использование псевдоинструкций ветвления.
Циклы.
Конструкция if/then/else.
Логические операции.
Конструктивные шаблоны.
Преобразование целых чисел в ASCII.
Производительность инструкций ветвления.
Инструкции сравнения.
Итоги главы.
Упражнения.
Глава 5. Работа с памятью.
Задание содержимого памяти.
Секции программы.
Прямой и обратный форматы следования байтов.
Адресация памяти.
Загрузка адреса памяти в регистр.
Загрузка данных из памяти.
Комбинирование загрузки адресов и памяти.
Сохранение регистра.
Смягчение адреса.
Конвертация в верхний регистр.
Итоги главы.
Упражнения.
Глава 6. Функции и стек.
Стек.
Переход и связывание.
Вложенные вызовы функций.
Параметры функций и возвращаемые значения.
Управление регистрами.
Краткое описание алгоритма вызова функции.
Еще раз о конвертации в верхний регистр.
Стековые кадры.
Макрофункции.
Метки.
Итоги главы.
Упражнения.
Глава 7. Службы операционной системы Linux.
Службы Linux.
Соглашение о вызовах.
Обертки вызовов функций.
Конвертация текста файла в верхний регистр.
Итоги главы.
Упражнения.
Глава 8. Программирование контактов GPIO.
GPIO.
В Linux все является файлом.
Мигание светодиодами.
Ближе к «железу».
Виртуальная память.
В устройствах все является памятью.
Регистры в битах.
Больше мигающих светодиодов.
Доступ с полномочиями суперпользователя.
Итоги главы.
Упражнения.
Глава 9. Взаимодействие с языками C и Python.
Вызов подпрограмм, разработанных на языке С.
Вызов подпрограмм на языке ассемблера из С.
Упаковка исходного кода.
Встраивание исходного кода на языке ассемблера в исходный код на языке С.
Вызов ассемблерных команд из Python.
Итоги главы.
Упражнения.
Глава 10. Умножение и деление.
Умножение.
Деление.
Пример: умножение матриц.
Итоги главы.
Упражнения.
Глава 11. Операции с числами с плавающей точкой.
Числа с плавающей точкой.
Определение чисел с плавающей точкой.
Регистры для чисел с плавающей точкой.
Протокол вызова функций.
Загрузка и сохранение регистров для операций с плавающей точкой.
Выполнение базовой арифметики.
Вычисление расстояния между точками.
Конвертация чисел с плавающей точкой.
Сравнение чисел с плавающей точкой.
Итоги главы.
Упражнения.
Глава 12. Оптимизация исходного кода.
Оптимизация подпрограммы конвертации текстовой строки в верхний регистр.
Советы по оптимизации исходного кода.
Итоги главы.
Упражнения.
Глава 13. Чтение и понимание исходного кода.
Просмотр исходного кода Linux и GCC.
Исходный код, генерируемый GCC.
Реконструкция программного кода и Ghidra.
Итоги главы.
Упражнения.
Глава 14. Взлом исходного кода.
Взлом с помощью переполнения буфера.
Причины переполнения буфера.
Кража номеров кредитных карт.
Смягчение уязвимостей, связанных с переполнением буфера.
Компромиссы методов предупреждения переполнения буфера.
Итоги главы.
Упражнения.
Приложение A. Набор инструкций RISC-V.
Приложение B. Двоичные форматы.
Приложение C. Директивы ассемблера.
Приложение D. ASCII.
Приложение E. Ответы к упражнениям.
Предметный указатель.
Ниже можно купить эту книгу, если она есть в продаже, и похожие книги по лучшей цене со скидкой с доставкой по всей России.Купить книги
Купить .
По кнопкам выше и ниже «Купить бумажную книгу» и по ссылке «Купить» можно купить эту книгу с доставкой по всей России и похожие книги по самой лучшей цене в бумажном виде на сайтах официальных интернет магазинов Лабиринт, Озон, Буквоед, Читай-город, Литрес, My-shop, Book24, Books.ru.
По кнопке «Купить и скачать электронную книгу» можно купить эту книгу в электронном виде в официальном интернет магазине «Литрес», и потом ее скачать на сайте Литреса.
По кнопке «Найти похожие материалы на других сайтах» можно найти похожие материалы на других сайтах.
On the buttons above and below you can buy the book in official online stores Labirint, Ozon and others. Also you can search related and similar materials on other sites.
Хештеги: #учебник по программированию :: #программирование :: #Стивен :: #ассемблер












