
- •Введение
- •Понятие вычислительной системы (ВС)
- •Терминология
- •Структурная декомпозиция вычислительной системы
- •Единицы измерения
- •Порядок следования байтов
- •Цикл выполнения команды
- •Расположение программ и данных
- •Память
- •Регистры
- •Цифровой логический уровень
- •Микроархитектурный уровень
- •Уровень архитектуры команд
- •Уровень операционной системы
- •Уровень ассемблера
- •Языки высокого уровня
- •Развитие вычислительной техники
- •Операционные системы
- •Контрольные вопросы
- •Представление данных
- •Качественные и количественные данные
- •История чисел
- •Позиционные системы счисления
- •Перевод натуральных чисел между позиционными системами счисления
- •Нецифровые символы в представлении чисел
- •Позиционное представление вещественных чисел
- •Двоичное представление беззнаковых целых чисел
- •Восьмеричное и шестнадцатеричное представление
- •Беззнаковая арифметика в вычислительных системах
- •Представление отрицательных чисел
- •Величина со знаком
- •Код с избытком
- •Дополнительный код
- •Знаковая арифметика в вычислительных системах
- •Альтернативная арифметика
- •Модулярная арифметика
- •Арифметика с насыщением
- •Битовые операции
- •Поразрядные операции
- •Расширение целых чисел
- •Битовые сдвиги
- •Представление вещественных чисел
- •Представление вещественных чисел с фиксированной запятой
- •Представление вещественных чисел с плавающей запятой
- •Контрольные вопросы
- •Архитектура команд семейства x86
- •Развитие линейки x86 и режимы работы
- •Режимы работы процессора
- •Сегменты памяти
- •Код и статические данные
- •Куча
- •Стек
- •Регистры
- •Регистры общего назначения, доступные в тридцатидвухбитном режиме
- •Регистры общего назначения, доступные в шестидесятичетырёхбитном режиме
- •Специальные регистры и регистры расширений
- •Математический сопроцессор (FPU x87)
- •Регистры FPU
- •Исключения FPU
- •Флаги основного процессора
- •Флаги FPU
- •Методы адресации
- •Структура команды
- •Общие для тридцатидвухбитного и шестидесятичетырёхбитного режимов сведения об адресации
- •Расширение регистров в шестидесятичетырёхбитном режиме
- •Операнды и адресация в шестидесятичетырёхбитном режиме
- •Адресация относительно указателя команды
- •Контрольные вопросы
- •Связь уровней абстракции
- •Компиляция
- •Этапы компиляции
- •Особенности GCC
- •Препроцессор
- •Включение файла
- •Условная компиляция
- •Макросы
- •Синтаксис ассемблерных вставок в GCC
- •Расширенная форма
- •Ограничения на расположение параметра
- •Модификаторы параметров
- •Практическое использование вставок
- •Контрольные вопросы
- •Синтаксис и команды GNU Assembler x86
- •Особенности GNU Assembler
- •Общие правила
- •Основные директивы
- •Порядок операндов
- •Адресация операндов
- •Размер операндов команды
- •Мнемоники
- •Префиксы
- •Основные команды
- •Общие команды
- •Команды целочисленной арифметики
- •Битовые операции
- •Флаги
- •Общие команды
- •Загрузка, выгрузка и пересылка данных
- •Сравнение вещественных чисел
- •Контрольные вопросы
- •Программирование на языке Ассемблера
- •Структура программы на ассемблере
- •Программирование без libc
- •Требования к вызовам функций
- •Локальные переменные
- •Соглашения о вызовах
- •Описание функций на ассемблере
- •Условие с операторами в одной ветви
- •Цикл
- •Взаимодействие со структурами данных
- •Массивы
- •Контрольные вопросы
- •Программирование на языке высокого уровня: С++
- •Целые типы
- •Вещественные типы
- •Специальные типы
- •Указатели
- •Приведение типов
- •Литералы C++
- •Целые
- •Вещественные
- •Строки
- •Средства автоматизации C++
- •Шаблоны C++
- •Макросы препроцессора C/C++
- •Ввод-вывод
- •Ввод-вывод в поток
- •Отладочная печать
- •Средства исследования переменных
- •Автоматизация отладочной печати
- •Контрольные вопросы
- •Заключение
- •Требования к выполнению лабораторных работ
- •Компилятор, IDE, отладчик
- •Язык программирования
- •Отчёт и оформление
- •Командная работа
- •Оценивание
- •Необязательные (бонусные) задания
- •Курсовая работа
- •Замечания и дополнения
- •Литература
- •Предметный указатель
- •Список таблиц
Министерство образования и науки Российской Федерации федеральное государственное автономное образовательное учреждение высшего
образования «Национальный исследовательский университет «Московский институт электронной техники»
Архитектура вычислительных систем и Ассемблер
с приложением методических указаний к лабораторным работам
Гагарина Л. Г., Кононова А. И.
Актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
2021
Аннотация
«Архитектура вычислительных систем и Ассемблер» (учебное пособие).
В пособии представлен систематизированный курс одной из основных дисциплин специализированной подготовки бакалавров по направлениям 09.03.04 «Программная инженерия» и 01.03.04 «Прикладная математика» с точки зрения прикладного программирования и парадигмы кроссплатформенности.
Рассмотрены основы архитектуры вычислительных систем как системной дисциплины. Представлен обзор архитектуры популярных процессоров семейства x86, в том числе шестидесятичетырёхбитных, представление основных типов данных в памяти компьютера, основные команды набора x86 и синтаксис AT&T. Обозначена проблематика прикладного кроссплатформенного программирования, объединяющего язык высокого уровня и язык Ассемблера.
Строгий стиль изложения сопровождается доступными для понимания пояснениями и многочисленными примерами, а также контрольными вопросами к каждой главе, необходимыми для глубокого усвоения материала. Книга адресована студентам технических специальностей, соискателям степени бакалавра по указанным направлениям, слушателям институтов повышения квалификации, может быть использована для самообразования.
Приложение А содержит методические указания к лабораторным работам.
Введение
Красота — это страшная сила И нет слов, чтобы это сказать.
Красота — это страшная сила, Но мне больше не страшно, я хочу знать.
Б. Б. Гребенщиков. Красота (это страшная сила)
Программирование на языке Ассемблера в этой книге описано на примере наиболее известной и доступной для экспериментов архитектуры — линейки x86. Исторически сложилось так, что разработчик данной архитектуры — компания Intel — использует один синтаксис языка Ассемблера (он так и называется — синтаксис Intel), а большая часть операционных систем, происходя от больших Unix’ов, предпочитает другой, так называемый синтаксис AT&T.
Синтаксис AT&T по умолчанию использует GNU Assembler (GAS) — неотъемлемая часть коллекции компиляторов GCC, используемая в процессе компиляции с различных языков высокого уровня, в частности, C, C++ и Фортран. GAS вместе с коллекцией GCC портирован более чем на 45 платформ, в том числе — на операционную систему Microsoft Windows для x86-совместимых процессоров (исторически этот порт носит название MinGW), так что распространённое мнение «AT&T— это только под Linux» в корне неверно. Напротив, использование GCC и AT&T позволяет сделать программу с ассемблерными вставками в код C++ столь же переносимой между операционными системами, как и чистый C++, а также облегчает переход на неинтеловские архитектуры.
Существующая на сегодняшний день литература по Ассемблеру x86 на русском языке в основном описывает синтаксис Intel, при этом практически отсутствует русскоязычная литература по синтаксису AT&T. Данное пособие призвано заполнить этот пробел.
В результате изучения курса «Архитектура вычислительных систем» студент будет:
–знать и понимать особенности архитектуры и принципы построения вычислительных систем;
–уметь применять язык низкого уровня Assembler, а также ассемблировать и отлаживать готовые программы на языке ассемблера IBM PC;
–владеть разработкой процедур и ассемблерных модулей в программах на языках высокого уровня.
Учебное пособие адресовано студентам бакалавриата по направлениям подготовки 09.03.04 «Программная инженерия» и 01.03.04 «Прикладная математика».
Особая благодарность группам «Аквариум» (Б. Б. Гребенщиков)
и«Оргия праведников» (С. А. Калугин),
атакже писателям А. В. Жвалевскому и И. Е. Мытько
за разрешение использовать цитаты из их произведений в эпиграфах. Вы делаете этот мир ещё прекраснее!