- •Введение
- •1. Архитектура ЭВМ
- •1.1. Структура МПС
- •1.2. Основные понятия в архитектуре МПС
- •1.3. Архитектура фон Неймана
- •1.4. Гарвардская архитектура
- •1.5. Параллельная архитектура
- •1.6. Конвейерная архитектура
- •1.7. Суперскалярная архитектура
- •1.8. Архитектура VLIW
- •1.9. Архитектуры CISC, RISC
- •1.10.2. Язык Ассемблер
- •1.10.4. API функции
- •1.11. Сообщения Windows
- •1.12. Версии ассемблеров
- •1.12.1. Microsoft Macro Assembler (MASM)
- •1.12.2. Flat assembler (FASM)
- •1.12.3. NASM (Netwide Assembler)
- •1.12.4. Turbo Assembler (TASM)
- •1.12.5. GoAsm
- •1.13. Среды разработки
- •1.13.1. RadASM
- •1.13.2. WinAsm Studio
- •1.13.3. Easy Code
- •2. Представление данных в ЭВМ
- •2.1. Системы счисления и преобразования между ними
- •2.2. Форматы представления чисел
- •2.2.1. Форматы представления двоичных чисел
- •2.2.2. Формат с плавающей точкой
- •2.3. Типы адресаций операндов
- •2.4. Интерфейсы
- •2.4.1. Последовательный интерфейс RS-232C
- •2.4.2. Интерфейс параллельного порта
- •2.4.3. Инфракрасный интерфейс
- •2.4.4. Интерфейс Bluetooth
- •2.4.5. Интерфейс USB
- •2.4.6. Интерфейс IEEE 1394 - FireWire
- •2.4.7. Сопроцессоры
- •2.4.8. Система прерываний и исключений
- •2.4.9. Интерфейс JTAG
- •3. Архитектура CISC от Intel
- •3.1. Введение
- •3.2. Микроархитектура Intel
- •3.2.1. Микроархитектура Р6
- •3.2.2. Микроархитектура NetBurst
- •3.2.3. Микроархитектура Pentium 4
- •3.2.4. Микроархитектура Intel Core
- •3.2.5. Микроархитектура Intel Core Duo
- •3.2.6. Микроархитектура Intel Nehalem
- •3.2.7. Микроархитектура Intel Sandy Bridge
- •3.2.8. Архитектура Haswell
- •3.2.9. Микроархитектура Intel Itanium
- •3.2.10. Микроархитектура Intel IA-64
- •3.3. Программная модель IA-32
- •3.3.1. Адресация памяти в IA_32
- •3.3.2. Наборы регистров
- •3.4. Целочисленный процессор
- •3.4.1. Регистры общего назначения (РОН)
- •3.4.2. Регистры флагов EFLAGS
- •3.4.3. Регистр указателя команд
- •3.4.4. Сегментные регистры
- •3.4.5. Управляющие регистры
- •3.4.6. Системные адресные регистры
- •3.4.7. Прямой и обратный порядок следования байтов
- •3.4.8. Виды адресации операндов в памяти
- •3.4.9. Цикл выполнения команды
- •3.4.10. Распределение адресного простраства
- •3.4.11. Образ программы в памяти.
- •3.4.12. Стек
- •3.5. Математический сопроцессор
- •3.6. MMX-технология
- •3.7. XMM технология
- •3.8.2. Классификация команд
- •3.8.3. Целочисленный процессор
- •3.8.4. Сопроцессор с плавающей точкой
- •3.8.5. Целочисленное MMX расширение
- •3.8.6. XMM расширение с плавающей точкой
- •3.9. Цикл трансляции, компоновки и выполнения
- •3.10. Ассемблер CISC
- •3.10.1. Введение
- •3.10.2. Средства программирования и отладки
- •3.11. Описание MASM
- •3.12. Структура программы на ассемблере
- •3.13. Типы данных
- •3.14. Макросредства
- •3.15. Директивы
- •4. Архитектура RISC
- •5. Архитектура VLIW
- •5.1. Архитектура вычислительных систем со сверхдлинными командами
- •5.2. Архитектура IA-64
- •5.3. Itanium
- •6. Многоядерные архитектуры
- •7.1.1. Основные параметры
- •7.1.2. Семейства
- •7.1.3. Описание выводов
- •7.1.4. Обзор архитектуры
- •7.1.5. Структура памяти
- •7.1.6. Режимы адресации
- •7.2. Ассемблер
- •7.2.1. Команды ассемблера
- •7.2.2. Директивы ассемблера
- •7.2.3. Выражения
- •7.3. ИСР AVR Studio
- •8.2. Архитектура F28x
- •8.3. Инструментальные средства разработки ПО
- •8.4. Ассемблер
- •8.5. Команды ассемблера
- •8.5.1. Операции с регистрами XAR0-XAR7
- •8.5.2. Операции загрузки регистра DP
- •8.5.3. Операции с регистром SP
- •8.5.4. Операции с регистрами AX (AH, AL)
- •8.5.5. Операции с регистрами ACC
- •8.5.6. Операции с регистрами P или XT
- •8.5.7. Операции прямого доступа к памяти
- •8.5.8. Операции ввода вывода
- •8.5.9. Операции с памятью программ
- •8.5.10. Операции ветвления, вызова, возврата
- •8.5.11. Математические
- •8.5.12. Ветвления
- •8.5.13. Основные инструкции для работы с регистрами
- •8.5.14. Основные команды для работы с вещественными числами
- •8.6. Листинги программ
- •8.7. Формат объектного файла
- •8.8. Директивы ассемблера
- •8.8.1. Разделы
- •8.8.2. Константы
- •8.8.3. Выравнивания
- •8.8.4. Листинг
- •8.8.5. Файлы
- •8.8.6. Условная трансляция
- •8.8.7. Структуры
- •8.8.8. Символы во время трансляции
- •8.8.9. Разные директивы
- •8.9. Макроязык и макрокоманды
- •8.10. Компоновщик
- •8.11. Архиватор
- •8.12. Абсолютный листер
- •8.13. Листер перекрестных ссылок
- •8.14. Утилита 16-ричного преобразования
- •8.15. Согласование заголовочных C/C++ файлов с ассемблером
- •8.16. ИСР Code Composer Studio (CCS)
- •9.1. Архитектура VelociTI
- •9.2. Структура и состав ЦСП С6x
- •9.3. Средства разработки ЦСП С6x
- •9.4. Ассемблер ЦСП С6x
- •9.5. Команды ассемблера
- •9.5.1. Основные команды для работы с целыми числами
- •9.5.2. Основные команды для работы с вещественными числами
- •9.6. Константы
- •9.7.2. Условные выражения
- •9.7.3. Законные выражения
- •9.8. Листинги
- •9.9. Листинги программ
- •9.9.1. Листинг перекрестных ссылок
- •9.10. Директивы ассемблера
- •9.10.1. Директивы, которые определяют разделы
- •9.10.2. Директивы, которые инициализируют константы (данные и память)
- •9.10.3. Директивы, которые выравнивают счетчик команд раздела (SPC)
- •9.10.4. Директивы, которые форматируют выходной листинг
- •9.10.5. Директивы, которые ссылаются на другие файлы
- •9.10.6. Директивы, которые допускают условную трансляцию
- •9.10.7. Директивы, которые определяют символы во время трансляции
- •9.11. Макроязык и макрокоманды
- •9.12. Компоновщик
- •9.13. Утилиты
- •9.13.1. Архиватор
- •9.13.2. Утилита 16-ричного преобразования
- •10.2. Встроенные платы для ЦСП ‘C6x
директиву с операндом X. Ассемблер добавляет перекрестную ссылку в конец листинга программы.
Пример. Листинг перекрестных ссылок ассемблера
LABEL |
VALUE |
DEFN |
REF |
|
.BIG_ENDIAN |
00000000 |
0 |
|
|
.LITTLE_ENDIAN |
00000001 |
0 |
|
|
.TMS320C6200 |
00000001 |
0 |
|
|
.TMS320C6700 |
00000000 |
0 |
|
|
.TMS320C6X |
00000001 |
0 |
|
|
_func |
00000000’ |
18 |
|
|
var1 |
00000000– |
4 |
17 |
|
var2 |
00000004– |
5 |
18 |
|
Заголовки столбцов:
LABEL (Метка) содержит каждый символ, который был определен или упомянут во время трансляции.
VALUE (Значение) содержит шестнадцатеричное число с 8 цифрами (которое является значением, назначенным символу) или имя, которое описывает атрибуты символа. Значению может также предваряться знаком, который описывает атрибуты символа.
DEFN (Определение) содержит номер инструкции, которая определяет этот символ. Этот столбец пустой для неопределенных символов.
REF (Ссылка) перечисляет номера строк инструкций, которые обращаются к этому символу. Пробел в этом столбце указывает, что символ никогда не использовался.
9.10. Директивы ассемблера
Директивы ассемблера поставляют данные программе и управляют процессом трансляции. Директивы ассемблера дают возможность Вам делать следующее:
Транслировать код и данные в указанные разделы.
Резервировать пространство в памяти для неинициализированных переменных.
Управлять видом листинга.
Инициализировать память.
Транслировать условные блоки.
471
Определять глобальные переменные.
Определять библиотеки, из которых ассемблер может получить макрокоманды.
Исследовать информацию о символьной отладке.
Таблица дает сводку директив ассемблера. Помимо директив ассемблера, указанных здесь, программные средства ’C6x поддерживают следующие директивы:
Ассемблер использует несколько директив для макрокоманд. Макродирективы обсуждаются в главе 5, Макроязык; они не обсуждаются в этой главе.
Оптимизатор ассемблера использует несколько директив, которые поставляют данные и управляют процессом оптимизации. Директивы оптимизатора Ассемблера обсуждены в Руководстве «Оптимизирующий компилятор C TMS320C6x»; они не обсуждаются в этой книге.
Компилятор C использует директивы для символьной отладки. В отличие от других директив, директивы символьной отладки не используются в большинстве программ на языке ассемблера. Приложение B, Директивы символьной отладки, обсуждает эти директивы; они не обсуждаются в этой главе.
Внимание: Метки и комментарии не показаны в синтаксисе.
Любая исходная инструкция, которая содержит директиву, может также содержать метку и комментарий. Метки начинаются в первом столбце (они - единственные элементы, кроме комментариев, которые могут появляться в первом столбце), а комментарии должны начинаться с точки с запятой или звездочки, если комментарий - единственный элемент в строке. Чтобы улучшать разборчивость, метки и комментарии не показываются, как часть синтаксиса директив. В описании части, заключенные в квадратные скобки, могут пропускаться, ассемблер будет их задавать по умолчанию.
9.10.1. Директивы, которые определяют разделы
Мнемоника и синтаксис |
Описание |
bss символ, |
Резервирует пространство в разделе .bss |
размер в байтах |
(неинициализированные данные) |
[, выравнивание |
|
[, сдвиг банка]] |
|
.data |
Транслирует в раздел .data |
472
|
(инициализированные данные) |
.sect ”имя раздела” |
Транслирует в названный (инициализиро- |
|
ванный) раздел |
.text |
Транслирует в раздел .text (выполняемый |
|
код) |
символ .usect ”имя раздела”, раз- |
Резервирует пространство в названном |
мер в байтах [,выравнивание] |
разделе (неинициализированном) |
|
|
9.10.2. Директивы, которые инициализируют константы (данные и память)
Мнемоника |
и |
Описание |
синтаксис |
|
|
.bss размер в байтах |
Резервирует пространство в текущем разделе; |
|
|
|
метка указывает на конец зарезервированного про- |
|
|
странства |
.byte значение1 |
Инициализирует один или более байт в текущем раз- |
|
[,..., значениеN] |
деле |
|
.char значение1 |
Инициализирует один или более байт в текущем раз- |
|
[,..., значениеN] |
деле |
|
.double значение1 |
Инициализирует 64-битнуые константы с плавающей |
|
[,...,значениеN] |
точкой, IEEE с двойной точностью |
|
|
|
|
.field значение |
Инициализирует поле размером в битах (1-32) со зна- |
|
[, размер] |
|
чением |
.float значение1 |
Инициализирует 32-битные константы с плавающей |
|
[,...,значениеN] |
точкой, IEEE с однократной точностью |
|
.half |
значение1 |
Инициализирует 16-разрядные целые числа |
[,...,значениеN] |
|
|
.int значение1 |
Инициализирует 32-разрядные целые числа |
|
[,...,значениеN] |
|
|
.long |
значение1 |
Инициализирует 32-разрядные дробные числа |
[,...,значениеN] |
|
|
.short |
значение1 |
Инициализирует 16-разрядные дробные числа |
[,...,значениеN] |
|
|
.space размер |
Резервирует пространство в текущем разделе; |
|
|
|
метка указывает на начало зарезервированного про- |
|
|
странства |
|
|
473 |
.string |
{выраж.1 |
Инициализирует одну или более текстовых строк |
”строка1”} |
|
|
.word |
значение1 |
Инициализирует 32-разрядные целые числа |
[,...,значениеN] |
|
9.10.3. Директивы, которые выравнивают счетчик команд раздела (SPC)
Мнемоника |
и |
Описание |
|
синтаксис |
|
|
|
.align |
[размер |
в |
Выравнивает SPC на границе, указанной размером в |
байтах] |
|
|
байтах, который должен быть степенью 2; по |
|
|
|
умолчанию - 1 байт |
9.10.4. Директивы, которые форматируют выходной листинг
Мнемоника |
и |
Описание |
синтаксис |
|
|
.drlist |
|
Допускает распечатку всех строк директив (по умолча- |
|
|
нию) |
.drnolist |
|
Подавляет распечатку определенных строк директив |
.fclist |
|
Позволяет распечатку ложного условного блока (по |
|
|
умолчанию) |
.fcnolist |
|
Подавляет распечатку ложного условного блока кода |
.length |
|
Устанавливает длину страницы листинга программы |
[длина страницы] |
|
|
.list |
|
Повторный запуск распечатки программы |
.mlist |
|
Позволяет распечатку макрокоманд и блоков циклов(по |
|
|
умолчанию) |
.mnolist |
|
Подавляет распечатку макрокоманд и блоков циклов |
.nolist |
|
Останавливает распечатку программы |
.option опция1 |
|
Выбирает опции листинга; доступны опции - |
[, опция2,...] |
|
A,B,D,H,L,М,N,O,R,T,W и X |
.page |
|
Пропускает страницу в распечатке программы |
.sslist |
|
Позволяет расширенный листинг символов замены |
.ssnolist |
(по |
Подавляет расширенный листинг символов замены |
умолчанию) |
|
|
.tab размер |
|
Устанавливает размер знаков табуляции (в символах) |
474