В пособии представлен систематизированный курс одной из основной дисциплин специализированной подготовки бакалавров по направлениям 09.03.04 «Программная инженерия» и 01.03.04 «Прикладная математика» с точки зрения прикладного программирования и парадигмы кроссплатформенности.
Рассмотрены основы архитектуры вычислительных систем как системной дисциплины. Представлен обзор архитектуры популярных процессоров семейства х86, в том числе шестидесятичетырёхбитных, представление основных типов данных в памяти компьютера, основные команды набора х86 и синтаксис AT&T. Обозначена проблематика прикладного кроссплатформенного программирования, объединяющего язык высокого уровня и язык Ассемблера.
Строгий стиль изложения сопровождается доступными для понимания пояснениями и многочисленными примерами, а также контрольными вопросами к каждой главе, необходимыми для глубокого усвоения материала. Книга адресована студентам технических специальностей, соискателям степени бакалавра по указанным направлениям, слушателям институтов повышения квалификации, может быть использована для самообразования.
Приложение А содержит методические указания к лабораторным работам.
Расположение программ и данных.
Данные и команды поступают в процессор по системной шине из памяти. Соответственно, память может быть общей для команд и данных — в этом случае для связи с процессором достаточно одной общей шины (рис. 1.6, а). Такая архитектура требует меньшего количества элементов и дорожек, поэтому она дешевле и компактнее.
Идея общей памяти и общей шины для программ и данных впервые была реализована Конрадом Цузе в Германии. В США подобная архитектура разрабатывалась в школе Мура при Пенсильванском университете научным коллективом, куда входили, в частности, Джон Мокли и Джон Преспер Экерт. Незадолго до окончания работ результаты были описаны одним из участников проекта, Джоном фон Нейманом, без указания соавторов, а затем и опубликованы в таком виде куратором со стороны армии, Германом Голдштейном [22]. Так как фон Нейман к тому времени уже был известным математиком, архитектуру с общей шиной обычно называют фон-неймановской (или принстонской, по основному месту работы фон Неймана).
Общая шина для памяти программ и данных — узкое место фон-неймановской архитектуры.
Ускорить обмен с памятью можно, введя раздельные шины и, соответственно, физически раздельные запоминающие устройства для программ и для данных (рис. 1.6, б). Это дороже и сложнее в реализации, поэтому, хотя сама идея раздельных шин использовалась в позднем проекте Бэббиджа, а практический проект подобной архитектуры разрабатывался в Гарвардском университете США одновременно с проектом школы Мура, широко использоваться на практике этот подход стал относительно недавно. Архитектура с раздельными шинами программ и данных обычно называется гарвардской.
ОГЛАВЛЕНИЕ.
Введение.
Глава 1. Понятие вычислительной системы (ВС).
1.1. Терминология.
1.2. Структурная декомпозиция вычислительной системы.
1.2.1. Единицы измерения.
1.2.2. Порядок следования байтов.
1.2.3. Цикл выполнения команды.
1.2.4. Расположение программ и данных.
1.2.5. Память.
1.2.6. Регистры.
1.3. Иерархическая декомпозиция ВС.
1.3.1. Цифровой логический уровень.
1.3.2. Микроархитектурный уровень.
1.3.3. Уровень архитектуры команд.
1.3.4. Уровень операционной системы.
1.3.5. Уровень ассемблера.
1.3.6. Языки высокого уровня.
1.4. История.
1.4.1. Развитие вычислительной техники.
1.4.2. Операционные системы.
Контрольные вопросы.
Глава 2. Представление данных.
2.1. Качественные и количественные данные.
2.2. История чисел.
2.3. Позиционные системы счисления.
2.3.1. Перевод натуральных чисел между позиционными системами счисления.
2.3.2. Экономичность системы счисления.
2.3.3. Нецифровые символы в представлении чисел.
2.3.4. Позиционное представление вещественных чисел.
2.4. Двоичное представление беззнаковых целых чисел.
2.4.1. Восьмеричное и шестнадцатеричное представление.
2.4.2. Беззнаковая арифметика в вычислительных системах.
2.5. Представление отрицательных чисел.
2.5.1. Величина со знаком.
2.5.2. Код с избытком.
2.5.3. Дополнительный код.
2.5.4. Знаковая арифметика в вычислительных системах.
2.6. Альтернативная арифметика.
2.6.1. Двоично-десятичная арифметика.
2.6.2. Модулярная арифметика.
2.6.3. Арифметика с насыщением.
2.7. Битовые операции.
2.7.1. Поразрядные операции.
2.7.2. Расширение целых чисел.
2.7.3. Битовые сдвиги.
2.8. Представление вещественных чисел.
2.8.1. Представление вещественных чисел с фиксированной запятой.
2.8.2. Представление вещественных чисел с плавающей запятой.
Контрольные вопросы.
Глава 3. Архитектура команд семейства х86.
3.1. Развитие линейки х86 и режимы работы.
3.1.1. История семейства х86.
3.1.2. Режимы работы процессора.
3.2. Сегменты памяти.
3.2.1. Код и статические данные.
3.2.2. Куча.
3.2.3. Стек.
3.3. Регистры.
3.3.1. Регистры общего назначения, доступные в тридцатидвухбитном режиме.
3.3.2. Регистры общего назначения, доступные в шестидесятичетырёхбитном режиме.
3.3.3. Специальные регистры и регистры расширений.
3.4. Математический сопроцессор (FPU х87).
3.4.1. Регистры FPU.
3.4.2. Исключения FPU.
3.5. Флаги.
3.5.1. Флаги основного процессора.
3.5.2. Флаги FPU.
3.6. Структура команды и методы адресации.
3.6.1. Методы адресации.
3.6.2. Структура команды.
3.6.3. Общие для тридцатидвухбитного и шсстидссятичстырёхбитного режимов сведения об адресации.
3.6.4. Адресация в тридцатидвухбитном режиме.
3.6.5. Расширение регистров в шестидесятичетырёхбитном режиме.
3.6.6. Операнды и адресация в шестидесятичетырёхбитном режиме.
3.6.7. Адресация относительно указателя команды.
Контрольные вопросы.
Глава 4. Связь уровней абстракции.
4.1. Компиляция.
4.1.1. Инструменты разработки.
4.1.2. Этапы компиляции.
4.1.3. Особенности GCC.
4.2. Препроцессор.
4.2.1. Включение файла.
4.2.2. Условная компиляция.
4.2.3. Макросы.
4.3. Ассемблерные вставки в код C++.
4.3.1. Синтаксис ассемблерных вставок в GCC.
4.3.2. Расширенная форма.
4.3.3. Практическое использование параметров.
4.3.4. Ограничения на расположение операнда.
4.3.5. Модификаторы параметров.
Контрольные вопросы.
Глава 5. Синтаксис и команды GNU Assembler х86.
5.1. Особенности GNU Assembler.
5.1.1. Общие правила.
5.1.2. Основные директивы.
5.1.3. Порядок операндов.
5.1.4. Адресация операндов.
5.1.5. Размер операндов команды.
5.1.6. Мнемоники.
5.1.7. Префиксы.
5.2. Основные команды.
5.2.1. Общие команды.
5.2.2. Передача управления, вызов и возврат.
5.2.3. Обнуление регистра.
5.2.4. Команды целочисленной арифметики.
5.2.5. Битовые операции.
5.2.6. Флаги.
5.2.7. Условные команды.
5.3. Команды FPU.
5.3.1. Внутреннее представление чисел.
5.3.2. Возможные форматы экспорта-импорта.
5.3.3. Общие команды.
5.3.4. Загрузка, выгрузка и пересылка данных.
5.3.5. Основные арифметические команды.
5.3.6. Дополнительные арифметические и трансценденгные команды.
5.3.7. Сравнение вещественных чисел.
Контрольные вопросы.
Глава 6. Программирование на языке Ассемблера.
6.1. Структура программы на ассемблере.
6.1.1. Программирование с использованием libc.
6.1.2. Программирование без libc.
6.2. Подпрограммы и функции.
6.2.1. Требования к вызовам функций.
6.2.2. Механизм вызова подпрограммы.
6.2.3. Соглашения о вызовах.
6.2.4. Описание функций на ассемблере.
6.2.5. Импорт функций из модулей на ассемблере в код на C++.
6.2.6. Импорт функций из модулей на C++ в код на ассемблере.
6.2.7. Искажение имён при компиляции.
6.2.8. Системные вызовы.
6.3. Программирование нелинейных алгоритмов.
6.3.1. Условие с операторами в одной ветви.
6.3.2. Условие с операторами в двух ветвях.
6.3.3. Цикл.
6.4. Взаимодействие со структурами данных.
6.4.1. Массивы.
6.4.2. Структуры и объекты.
Контрольные вопросы.
Глава 7. Программирование на языке высокого уровня: C++.
7.1. Структура программы.
7.2. Типы данных.
7.2.1. Целые типы.
7.2.2. Вещественные типы.
7.2.3. Специальные типы.
7.2.4. Указатели.
7.3. Приведение типов.
7.4. Литералы C++.
7.4.1. Целые.
7.4.2. Вещественные.
7.4.3. Строки.
7.5. Средства автоматизации C++.
7.5.1. Шаблоны C++.
7.5.2. Макросы препроцессора C/C++.
7.6. Ввод-вывод.
7.6.1. Ввод-вывод в поток.
7.6.2. Ввод-вывод с помощью libc.
7.7. Отладочная печать.
7.7.1. Средства исследования переменных.
7.7.2. Автоматизация отладочной печати.
Контрольные вопросы.
Заключение.
Приложение А. Лабораторный практикум GNU Assembler.
Требования к выполнению лабораторных работ.
Л1. Представление данных в ЭВМ.
Л2. Отладка кода.
Л3. Модули и функции на ассемблере.
Л4. Использование ассемблерных вставок в программах на C++.
Л5. Программирование FPU.
Л6. Программирование ветвящихся и циклических алгоритмов.
Л7. Использование массивов.
Приложение Б. Коды ASCH.
Литература.
Предметный указатель.
Список таблиц.
Список иллюстраций.
Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Архитектура вычислительных систем и Ассемблер с приложением методических указаний к лабораторным работам, Гагарина Л.Г., Кононова А.И., 2019 - fileskachat.com, быстрое и бесплатное скачивание.
Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.Купить эту книгу
Скачать - pdf - Яндекс.Диск.
Дата публикации:
Хештеги: #учебник по информатике :: #информатика :: #компьютеры :: #Гагарина :: #Кононова
Смотрите также учебники, книги и учебные материалы:
Следующие учебники и книги:
- Дистанционное зондирование Земли из космоса, Цифровая обработка изображений, учебное пособие, Кашкин В.Б., Сухинин А.И., 2001
- Аппаратное обеспечение ЭВМ, Сидоров В.Д., Струмпэ Н.В., 2011
- Автономный искусственный интеллект, Жданов А.А., 2015
- AutoCAD 2015, Орлов А., 2015
Предыдущие статьи:
- Applied Artificial Intelligence, An Engineering Approach, Humm B.G.
- Big Data and Visual Analytics, Suh S.C., Anthony T., 2017
- 8-разрядные микроконтроллеры семейства МС68НС11 фирмы Motorola, лабораторный практикум, Логин В.М., Цырельчук И.Н., 2007
- Основы работы в MathCAD 15, учебное пособие, Берман Н.Д., 2015