Ассемблер для Raspberry Pi. Практическое руководство

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Рассмотрены основы программирования на языке ассемблера для процессоров ARM на примере Raspberry Pi с операционной системой Raspberry Pi OS. Приведены подробные сведения об архитектуре и особенностях ARM, вызовах операционной системы. Подробно описан синтаксис ассемблера для ARM. Рассмотрены компоновщик GCC, отладка с GDB, использование функций языка С в ассемблере с помощью библиотеки libc. Описаны функции GPIO, система команд ARM Neon и команды Thumb. Все разделы снабжены практическими примерами. Книга ориентирована на начинающих разработчиков, желающих освоить программирование на языке ассемблера для устройств с архитектурой ARM. Электронный архив на сайте издательства содержит исходный код программ из книги.

Author(s): Брюс Смит
Edition: 4
Publisher: БХВ-Петербург
Year: 2022

Language: Russian
Pages: 320
City: СПб.
Tags: Assembly Language; Raspberry Pi; C; Raspbian OS; GPIO; GCC; AVR Processors

Оглавление
Об авторе
1. Введение
Безграничные возможности
Начинаем экспериментировать
Компилятор GNU С
Учимся на примерах
Что вы узнаете?
Совместимость четвертого издания книги
ОС Raspberry Pi
А что насчет 64-разрядной системы?
Клавиатурные вычисления
Значимость ARM
Raspberry Pi сквозь века
Вычислительные модули
Используемые обозначения
Центр истории вычислительной техники
Веб-сайт и бесплатные книги
Благодарности
2. Начало
Числа со смыслом
Команды ARM
Процесс преобразования
А зачем вообще машинный код?
Языковые уровни
На орбиту!
RISC и наборы команд
Структура ассемблера
Ошибки на пути
Кросс-компиляторы
Чипы Raspberry Pi ARM
3. Проба пера
Командная строкаЗ. Проба пера
Создание исходного файла
Написанное — исполнить!
Ошибки ассемблера
Компоненты
А если нет метки start?
Связывание файлов
Прибираемся
Пара слов о комментариях
Редактор Geany Programmer’s Editor
4. О битах в RISC-машинах
Преобразование двоичных чисел в десятичные
Преобразование десятичных чисел в двоичные
Преобразование двоичного числа в шестнадцатеричное
Преобразуем шестнадцатеричные числа в десятичные и обратно
Двоичное сложение
Вычитание
Дополнительный код
Когда двоичные числа не складываются
Стандартный калькулятор
5. Соглашения ARM
Длина слов
Доступ к памяти по байтам и словам
Регистры
Регистр R15: программный счетчик
Регистр состояния текущей программы
Биты и флаги
Установка флагов
Суффикс 5
R14: регистр ссылок
R13: указатель стека
6. Обработка данных
Команды сложения
Вычитание
Умножение
Теперь о делении
Команды перемещения
Команды сравнения
Сортировка чисел
7. Входы и выходы
Команды SWI и SKC
Вывод на экран
Чтение с клавиатуры
Регистр eax и прочие
Программа Маке
8. Логические операции
Логическое И (AND)
Логическое ИЛИ (OR)
Исключающее ИЛИ (EOR)
Команды логических операций
Команда ORR для преобразования регистра символов
Очистка бита командой BIC
Проверка флагов
Регистры системных вызовов
9. Условное выполнение
Коды состояния с одним флагом
EQ: равно
NE: не равно
VS: переполнение
VC: нет переполнения
MI: знак «минус»
PL: знак «плюс»
CS: имеется перенос (HS: беззнаковое больше или равно)
СС: нет переноса (LO: беззнаковое меньше)
AL: безусловное исполнение
NV: безусловное неисполнение
Коды, проверяющие несколько флагов
HI: беззнаковое больше
LS: беззнаковое меньше или равно
GE: знаковое больше или равно
LT: знаковое меньше
GT: знаковое больше
LE: знаковое меньше или равно
Добавление суффикса S'
10. Ветви и сравнения
Команды ветвления
Регистр ссылок
Использование команд сравнения
Применяем дальновидное мышление
Эффективное использование условных операторов
Обмен ветвей
11. Сдвиги и вращения
Логические сдвиги
Логический сдвиг вправо
Арифметический сдвиг вправо
Вращение
Расширенное вращение
Использование сдвигов и вращений
Прямой постоянный диапазон
Движение вверх
12. Умные числа
Длинное умножение
Умножение с накоплением
Деление и остаток
Умное умножение
Это только начало
13. Программный счетчик R15
Конвейерная обработка
Расчет ветвей
14. Отладка с использованием GDB
Когда все зависло
Сборка с GDB
Дизассемблер
Точки останова
Дамп памяти
Сокращения
Параметры сборки GDB
15. Передача данных
Директива ADR
Косвенная адресация
Команды ADR и LDR
Предварительно индексированная адресация
Доступ к байтам памяти
Обратная запись адреса
Постиндексированная адресация
Байтовые условия
Относительная адресация через регистр PC
16. Передача блока
Обратная запись
Процедура копирования блока
17. Стеки
Тянитолкай;-)
Рост стека
Применение стеков
Работа в фрейме
Указатель фрейма
18. Директивы и макросы
Директивы хранения данных
Выравнивание данных
Макросы
Включение макросов
19. Работа с файлами
Права доступа к файлам
20. Использование библиотеки libc
Использование функций языка С в ассемблере
Структура файла исходного кода
Исследование исполняемого файла
Ввод чисел с помощью функции scanf
Вывод информации
21. Пишем функции
Стандарты функций
Использование регистров
Больше трех
Сохранение ссылок и флагов
Надежные процедуры вывода
Пузырьковая сортировка
22. Дизассемблирование программ на С
GCC — он как швейцарский нож
Простой фреймворк С
Создание файла ассемблера
Строительные блоки
Пример функции print/
Переменные указателя фрейма
Дизассемблирование системных вызовов
23. Функции GPIO
Отображение памяти
Контроллер GPIO
Вводы и выводы GPIO
Сборка кода
Другие функции GPIO
Описание контактов GPIO
24. Числа с плавающей точкой
Архитектура VFP
Регистровый файл
Управление и вывод на экран
Сборка и отладка на VFP с помощью GDB
Загрузка, хранение и перемещение
Преобразование точности
Векторная арифметика
25. Регистр управления VFP
Условное исполнение
Скалярные и векторные операции
Какой тип оператора?
Параметры LEN и STRIDE
26. Сопроцессор Neon
Ассемблер Neon
Команды и типы данных Neon
Режимы адресации
Параметр Stride команд VLD и VST
Загрузка в прочих форматах
Neon Intrinsic
Массивы Neon
Правильный порядок
Матричная математика
Матричное умножение
Пример использования макроса
27. Код Thumb
Различия
Пишем на Thumb
Доступ к старшим регистрам
Операторы стека
Одно- и многорегистровые команды
Функции в Thumb
Команды ARMv7 Thumb
28. Единый язык
Изменения Thumb
Новые команды А32
Сравнение по нулю
Сборка UAL
29. Обработка исключений
Режимы работы
Векторы
Настройка регистров
Обработка исключений
Команды MRS и MSR
Что происходит при возникновении прерывания?
Решения о прерываниях
Возврат из прерываний
Пишем процедуры прерывания
30. System-on-Chip
Микросхема и набор команд ARM
Сопроцессоры
Конвейер
Память и кэши
GPU
Обзор ARMv8
64-разрядная ОС Raspberry Pi
А что в итоге?
Принцип Архимеда
Приложение 1. Коды символов ASCII
Приложение 2. Набор команд ARM
Команды сравнения и проверки
Команды ветвления
Арифметические команды
Логические команды
Команды перемещения данных
Приложение 3. Системные вызовы ROS
Приложение 4. Описание электронного архива
Предметный указатель