Программирование, Введение в профессию, том 2, Низкоуровневое программирование, Столяров А.В., 2016

Программирование, Введение в профессию, Том 2, Низкоуровневое программирование, Столяров А.В., 2016.

   Второй том учебника А. В. Столярова посвящён языку ассемблера и языку Си, с которыми традиционно связывают термин «низкоуровневое программирование».
Кроме того, в книге даются сведения об инструментах программиста, включая средства отладки, утилиту автоматизированной сборки и системы контроля версий.

Программирование, Введение в профессию, Том 2, Низкоуровневое программирование, Столяров А.В., 2016


Возможности процессора и язык ассемблера.
Эта часть нашей книги будет посвящена программированию на языке ассемблера NASM — как обычно, в среде ОС Unix. Между тем подавляющее большинство профессиональных программистов, услышав о таком, лишь усмехнётся и задаст риторический вопрос: «Да кто же пишет под Unix на ассемблере? На дворе ведь XXI век!» Самое интересное, что они будут совершенно правы. В современном мире программирование на языке ассемблера оказалось вытеснено даже из такой традиционно «ассемблерной» области, как программирование микроконтроллеров — маленьких однокристальных ЭВМ, предназначенных для встраивания во всевозможную технику, от стиральных машин и сотовых телефонов до самолётов и турбин на электростанциях. В большинстве случаев прошивки микроконтроллеров сейчас пишут на языке Си, и лишь небольшие вставки выполняют на языке ассемблера; то же самое верно и для ядер операционных систем, и для других задач, в которых необходима привязка к возможностям конкретного процессора.

Конечно, совсем обойтись без фрагментов на языке ассемблера пока не получается. Отдельные ассемблерные модули, а равно и ассемблерные вставки в текст на других языках присутствуют и в ядрах операционных систем, и в системных библиотеках того же языка Си (и других языков высокого уровня); в особых случаях программисты микроконтроллеров тоже вынуждены отказываться от Си и писать «на ассемблере», чтобы, например, сэкономить дефицитную память. Так, достаточно популярный микроконтроллер ATtiny4 имеет всего 16 байт оперативной памяти и 512 байт псевдопостоянной памяти для хранения кода программы; в таких условиях языку ассемблера практически нет альтернативы.

ОГЛАВЛЕНИЕ.
Предисловие ко второму тому.
3. Возможности процессора и язык ассемблера.
3.1. Вводная информация.
3.1.1. Классические принципы выполнения программ.
3.1.2. Особенности программирования под управлением мультизадачных операционных систем.
3.1.3. История платформы i386.
3.1.4. Знакомимся с инструментом.
3.1.5. Макросы из файла stud_io.inc.
3.1.6. Правила оформления ассемблерных программ.
3.2. Основы системы команд i386.
3.2.1. Система регистров.
3.2.2. Память пользовательской задачи. Секции.
3.2.3. Директивы для отведения памяти.
3.2.4. Команда mov и виды операндов.
3.2.5. Косвенная адресация; исполнительный адрес.
3.2.6. Размеры операндов и их допустимые комбинации.
3.2.7. Целочисленное сложение и вычитание.
3.2.8. Целочисленное умножение и деление.
3.2.9. Условные и безусловные переходы.
3.2.10. Переходы по результатам сравнений.
3.2.11. О построении ветвлений и циклов.
3.2.12. Условные переходы и регистр ЕСХ; циклы.
3.2.13. Побитовые операции.
3.2.14. Строковые операции.
3.2.15. Ещё несколько интересных команд.
3.3. Стек, подпрограммы, рекурсия.
3.3.1. Понятие стека и его предназначение.
3.3.2. Организация стека в процессоре i386.
3.3.3. Дополнительные команды работы со стеком.
3.3.4. Подпрограммы: общие принципы.
3.3.5. Вызов подпрограмм и возврат из них.
3.3.6. Организация стековых фреймов.
3.3.7. Основные конвенции вызовов подпрограмм.
3.3.8. Локальные метки.
3.3.9. Пример.
3.4. Основные особенности ассемблера NASM.
3.4.1. Ключи и опции командной строки.
3.4.2. Основы синтаксиса.
3.4.3. Псевдокоманды.
3.4.4. Константы.
3.4.5. Вычисление выражений во время ассемблирования.
3.4.6. Критические выражения.
3.4.7. Выражения в составе исполнительного адреса.
3.5. Макросредства и макропроцессор.
3.5.1. Основные понятия.
3.5.2. Простейшие примеры макросов.
3.5.3. Однострочные макросы; макропеременные.
3.5.4. Условная компиляция.
3.5.5. Макроповторения.
3.5.6. Многострочные макросы и локальные метки.
3.5.7. Макросы с переменным числом параметров.
3.5.8. Макродирективы для работы со строками.
3.6. Взаимодействие с операционной системой.
3.6.1. Мультизадачность и её основные виды.
3.6.2. Аппаратная поддержка мультизадачности.
3.6.3. Прерывания и исключения.
3.6.4. Системные вызовы и «программные прерывания».
3.6.5. Конвенция системных вызовов ОС Linux.
3.6.6. Конвенция системных вызовов ОС FreeBSD.
3.6.7. Примеры системных вызовов.
3.6.8. Доступ к параметрам командной строки.
3.6.9. Пример: копирование файла.
3.7. Раздельная трансляция.
3.7.1. Поддержка модулей в NASM.
3.7.2. Пример.
3.7.3. Объектный код и машинный код.
3.7.4. Библиотеки.
3.7.5. Алгоритм работы редактора связей.
3.8. Арифметика с плавающей точкой.
3.8.1. Форматы чисел с плавающей точкой.
3.8.2. Устройство арифметического сопроцессора.
3.8.3. Обмен данными с сопроцессором.
3.8.4. Команды арифметических действий.
3.8.5. Команды вычисления математических функций.
3.8.6. Сравнение и обработка его результатов.
3.8.7. Исключительные ситуации и их обработка.
3.8.8. Исключения и команда wait.
3.8.9. Регистры управления сопроцессором.
3.8.10. Инициализация, сохранение и восстановление.
Заключительные замечания.
4. Программирование на языке Си.
4.1. Феномен языка Си (вместо предисловия).
4.2. Примеры программ на Си.
4.2.1. Программа «Hello, world».
4.2.2. О завершении программы.
4.2.3. Квадратное уравнение.
4.2.4. Как узнать имя нужного заголовочного файла.
4.3. Базовые средства языка Си.
4.3.1. Структура программы; объявления и описания функций.
4.3.2. Переменные и их описание.
4.3.3. Встроенные типы.
4.3.4. Литералы (константы) разных типов.
4.3.5. Операции и выражения.
4.3.6. Операторы языка Си.
4.3.7. Локальные «статические» переменные.
4.4. Указатели, массивы, строки.
4.4.1. Указатели и операции над ними.
4.4.2. Массивы.
4.4.3. Динамическая память.
4.4.4. Модификатор const.
4.4.5. Инициализаторы для массивов.
4.4.6. Строки.
4.4.7. Строковые литералы.
4.5. Обработка аргументов командной строки.
4.6. Стандартные функции ввода-вывода.
4.6.1. Посимвольный ввод-вывод.
4.6.2. Форматированный ввод-вывод.
4.6.3. Работа с текстовыми файлами.
4.6.4. Ввод-вывод отдельных строк.
4.6.5. О буферизации ввода-вывода.
4.6.6. «Вывод» в строку и «ввод» из строки.
4.6.7. Блочный ввод-вывод.
4.6.8. Ввод-вывод низкого уровня.
4.7. Избранные примеры программ.
4.7.1. Ханойские башни.
4.7.2. Сопоставление строки с образцом.
4.8. Перечислимый тип.
4.8.1. Правила описания и основные возможности.
4.8.2. Перечислимый тип как средство описания констант.
4.8.3. Перечислимый тип и оператор выбора.
4.9. Составной тип данных и динамические структуры.
4.9.1. Структуры.
4.9.2. Односвязные списки.
4.9.3. Двусвязные списки.
4.9.4. Простое бинарное дерево поиска.
4.9.5. Объединения и вариантные структуры.
4.9.6. Битовые поля.
4.9.7. Директива typedef.
4.10. Макропроцессор.
4.10.1. Предварительные сведения.
4.10.2. Макроопределения и макровызовы.
4.10.3. Соглашения об именовании.
4.10.4. Более сложные возможности макросов.
4.10.5. (*) Макросы и конструкция do { } while(0).
4.10.6. Директивы условной компиляции.
4.10.7. Ещё несколько полезных директив.
4.10.8. Директива #include.
4.10.9. Особенности оформления макродиректив.
4.11. Раздельная трансляция.
4.11.1. Общая схема раздельной трансляции в Си.
4.11.2. Видимость объектов из других модулей.
4.11.3. Заголовочные файлы к модулям.
4.11.4. Описания типов и макросов в заголовочных файлах; защита от повторного включения.
4.11.5. Объявления типов; неполные типы.
4.12. И снова об оформлении кода.
4.12.1. Фирменные особенности Си.
4.12.2. Последовательности взаимоисключающих if ’ов.
4.12.3. О роли ASCII-набора и английского языка.
4.12.4. (*) Программы, говорящие по-русски.
4.13. Ещё об указателях.
4.13.1. Многомерные массивы и указатели на массивы.
4.13.2. Указатели на функции.
4.13.3. Сложные описания и общие правила их прочтения.
4.14. Ещё о возможностях стандартной библиотеки.
4.14.1. Дополнительные функции работы с динамической памятью.
4.14.2. Функции обработки строк.
4.14.3. Генерация псевдослучайных чисел.
4.14.4. (*) Средства создания вариадических функций.
4.15. (*) Полноэкранные программы на Си.
4.15.1. Простой пример.
4.15.2. Обработка клавиатурных и других событий.
4.15.3. Управление цветом и атрибутами символов.
4.15.4. Клавиатурный ввод с тайм-аутами.
4.15.5. Обзор остальных возможностей ncurses.
4.16. (*) Программа на Си без стандартной библиотеки.
4.17. Инструментарий программиста.
4.17.1. Компилятор gcc.
4.17.2. Отладчик gdb.
4.17.3. Программа valgrind.
4.17.4. Система автоматической сборки (утилита make).
4.17.5. Сравнение файлов и наложение изменений.
4.17.6. Системы контроля версий.
Список литературы.
Предметный указатель.



Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Программирование, Введение в профессию, том 2, Низкоуровневое программирование, Столяров А.В., 2016 - fileskachat.com, быстрое и бесплатное скачивание.

Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.Купить эту книгу



Скачать - pdf - Яндекс.Диск.
Дата публикации:





Теги: :: :: ::


 


 

Книги, учебники, обучение по разделам




Не нашёл? Найди:





2024-11-20 20:01:33