- •Архитектура эвм
- •Введение
- •Структура мпс
- •Основные понятия в архитектуре мпс
- •Архитектура фон Неймана
- •Гарвардская архитектура
- •Параллельная архитектура
- •Конвейерная архитектура
- •Суперскалярная архитектура
- •АрхитектурыCisc
- •Архитектуры risc
- •Архитектуры misc
- •Ассемблеры
- •Программа Ассемблер
- •Язык Ассемблер
- •Основы 32-битного программирования в Windows
- •Api функции
- •Сообщения Windows
- •Версии ассемблеров
- •Среды разработки
- •Представление данных в эвм
- •Системы счисления и преобразования между ними
- •Форматы представления чисел
- •Форматы представления двоичных чисел
- •Формат с плавающей точкой
- •Типы адресаций операндов
- •Интерфейсы
- •Последовательный интерфейс rs-232c
- •Интерфейс параллельного порта
- •Инфракрасный интерфейс
- •Интерфейс Bluetooth
- •Интерфейс usb
- •Интерфейс ieee 1394 - FireWire
- •Сопроцессоры
- •Система прерываний и исключений
- •Интерфейс jtag
- •Символы и строки
- •Архитектура cisc от Intel
- •Введение
- •Микроархитектура Intel
- •Микроархитектура р6
- •Микроархитектура NetBurst
- •Микроархитектура Pentium 4
- •Микроархитектура Intel Pentium Mobile
- •Микроархитектура Intel Core
- •Микроархитектура Intel Core Duo
- •Микроархитектура Intel Nehalem
- •Адресация памяти в ia_32
- •Наборырегистров
- •Целочисленныйпроцессор
- •Регистры общего назначения (рон)
- •Регистры флагов eflags
- •Регистр указателя команд
- •Сегментные регистры
- •Управляющие регистры
- •Системные адресные регистры
- •Прямой и обратный порядок следования байтов
- •Виды адресации операндов в памяти
- •Цикл выполнения команды
- •Распределение адресного простраства
- •Образ программы в памяти.
- •Математический сопроцессор
- •Xmm технология
- •Система команд
- •Формат команды
- •Классификация команд
- •Целочисленный процессор
- •Команды общего назначения
- •Команды ввода-вывода
- •Инструкции работы со стеком
- •Арифметико-логические инструкции
- •Цепочечные операции
- •Команды управления
- •Команды поддержки языков высокого уровня
- •Команды прерываний
- •Команды синхронизации процессора
- •Команды обработки цепочки бит
- •Команды управления защитой
- •Команды обмена с управляющими регистрами
- •Команды идентификации и управления архитектурой
- •Управление кэшированием
- •Команды управления кэшированием
- •Сопроцессор с плавающей точкой
- •Классификация команд
- •Команды управления сопроцессором
- •Команды передачи данных
- •Команды сравнения данных
- •Арифметические команды
- •Трансцендентные функции
- •Целочисленное mmx расширение
- •Синтаксис ммх-команд
- •Классификация команд
- •Инициализация
- •Передача данных
- •Упаковка данных
- •Распаковка данных
- •Арифметика
- •Сравнения
- •Дополнительные команды
- •XmMрасширение с плавающей точкой
- •Типы данных
- •Передача данных
- •Арифметика
- •Сравнения
- •Преобразования
- •Управление состоянием
- •Распаковка данных
- •Управление кэшированием
- •Дополнительные команды
- •Цикл трансляции, компоновки и выполнения
- •Ассемблер cisc
- •Введение
- •Средства программирования и отладки
- •Описание masm
- •Структура программы на ассемблере
- •Типы данных
- •Макросредства
- •Директивы
- •Архитектура risc
- •Система команд
- •Архитектура misc
- •Архитектура vliw
- •Архитектура вычислительных систем со сверхдлинными командами
- •Архитектура ia-64
- •Многоядерные архитектуры
- •Микроконтроллер avr от Atmel
- •Архитектура avr от Atmel
- •Ассемблер
- •Команды ассемблера
- •Директивы ассемблера
- •Выражения
- •Микроконтроллеры c28x
- •Архитектура c28x
- •Архитектура f28x
- •Инструментальные средства разработки по
- •Ассемблер
- •Команды ассемблера
- •Формат объектного файла
- •Директивы ассемблера
- •Макроязык и макрокоманды
- •Компоновщик
- •Архиватор
- •Абсолютный листер
- •Листер перекрестных ссылок
- •Утилита 16-ричного преобразования
- •Архитектура VelociTi
- •Структура и состав цсп с6x
- •Средства разработки цсп с6x
- •Ассемблер цсп с6x
- •Команды ассемблера
- •Выражения
- •Листинги
- •Листинги программ
- •Директивы ассемблера
- •Макроязык и макрокоманды
- •Компоновщик
- •Утилиты
- •Поддержка в matlab
- •Введение
- •Встроенные платы для цсп ‘c6x
Формат объектного файла
Ассемблер и компоновщик создают объектные файлы, которые могут выполняться устройством. Формат для этих объектных файлов назван общим объектным файловым форматом (COFF – ООФФ).
ООФФ упрощает модульное программирование при написании программы на языке ассемблера, поскольку он позволяет представлять программу и данные в виде блоков. Эти блоки известны как разделы. Как ассемблер, так и компоновщик обеспечены директивами, которые позволяют создавать и манипулировать разделами.
Разделы. Наименьший модуль объектного файла называется разделом. Раздел - блок программы или данных, который занимает непрерывное пространство на карте памяти с другими разделами. Каждый раздел объектного файла является самостоятельным и отличным от других. По умолчанию ООФФ объектных файлов всегда содержит три раздела:
Раздел текста - .text обычно содержит выполняемый код.
Раздел данных - .data обычно содержит инициализированные данные.
Раздел .bss обычно резервируется для неинициализированных переменных.
Кроме того, ассемблер и компоновщик позволяют Вам создавать, называть и связывать поименованные разделы, которые используются подобно разделам .data, .text и .bss. Есть два основных типа разделов:
Инициализированные разделы содержат данные или код. Разделы .text и .data проинициализированы. Именуемые разделы, создаваемые с помощью директивы ассемблера .sect, также проинициализированы;
Неинициализированные разделы резервируют пространство на карте памяти для неинициализированных данных. Раздел .bss неинициализированный. Именуемые разделы, создаваемые с помощью директивы ассемблера .usect, также неинициализированные.
Различные директивы ассемблера позволяют связывать различные части программного кода и данных с соответствующими разделами. Ассемблер формирует эти разделы в течение процесса ассемблирования, создавая объектный файл, организованный так.
В системе имеется целевая платформа (Устройство), это плата с конкретным процессором. Там имеется целевая память, содержащая разделы: ПЗУ (ROM), перепрограммируемое ПЗУ (EEPROM), ОЗУ (RAM). Этим разделам назначается область адресов в карте распределения целевой памяти. Компоновщик должен перемещать в целевую память разделы объектного кода. Поскольку большинство систем содержат различные типы памяти, то применение разделов может помочь использовать целевую память более эффективно. Все разделы независимо переместимые, любой раздел можно разместить в любом блоке целевой памяти. Если у вас нет целевой платформы, то отладчик имитирует ее.
Ассемблер идентифицирует части программы на языке ассемблера, которые принадлежат данному разделу. Ассемблер имеет 5 директив поддержки этой функции:
.bss
.usect
.text
.data
.sect
Директивы .bssи .usectсоздают неинициализированные разделы; директивы .text, .data, и .sectсоздают инициализированные разделы.
Вы можете создавать подразделы любого раздела, чтобы дать Вам более жесткое управление картой памяти. Подразделы создаются, используя .sectи .usectдирективы. Подразделы идентифицируются основным именем раздела и именем подраздела, отделенным двоеточием.
Неинициализированные разделырезервируют пространство в памяти C28x; они обычно распределены в ОЗУ. Эти разделы не имеют никакого фактического содержания в объектном файле, они просто резервируют память. Программа может использовать это пространство во время выполнения для создания и сохранения переменных. Неинициализированные области данных формируются, используя директивы ассемблера .bssи .usect:
Директива .bss резервирует пространство в .bss разделе. Директива .bss резервирует данное число байтов в .bss разделе. Вы должны определить размер, нет никакого значения по умолчанию.
Директива .usect резервирует пространство в определенном неинициализированном названном разделе. Директива .usect резервирует данное число байтов в разделе с указанным именем. Вы должны определить размер, нет никакого значения по умолчанию.
Каждый раз, когда Вы вызываете .bssили .usectдирективу, ассемблер резервирует дополнительное пространство в .bssили названном разделе. Синтаксис директивы .bss:
.bss символ, размер в словах [, флаг блокировки[, флаг выравнивания [, тип]]
Синтаксис директивы .usect:
символ .usect ”имя раздела”, размер в словах [, флаг блокировки[, флаг выравнивания]
Символ указывает на первый байт, зарезервированный этим обращением директивы .bss или .usect. Символ соответствует имени переменной, для которой Вы резервируете пространство. На него может ссылаться любой другой раздел, а также он может быть объявлен, как глобальный символ (директивой ассемблера .global).
Размер в словах – абсолютное выражение.
Флаг блокировки.
Флаг выравнивание – необязательный параметр. Он определяет минимальное выравнивание в байтах, требуемое распределяемым пространством. Значение по умолчанию – 1 байт. Значение должно быть степенью числа 2.
Необязательный тип.
Директивы инициализированных разделов (.text, .data, и .sect) указывают ассемблеру прекратить трансляцию в текущий раздел и начать транслировать в обозначенный раздел. Директивы .bssи .usect, однако, не заканчивают данный раздел и не начинают новый, они просто выходят от текущего раздела временно. Директивы .bssи .usectмогут появляться где-нибудь в инициализированном разделе, не воздействуя на его содержание.
Ассемблер обрабатывает неинициализированные подразделы (созданные .usectдирективой) тем же самым способом, как неинициализированные разделы.
Инициализированные разделысодержат выполняемый код или инициализированные данные. Содержание этих разделов записывается в объектный файл и помещается в память C28x, когда программа загружается. Каждый инициализированный раздел – независимо перемещаемый и может ссылаться на символы, которые определены в других разделах. Компоновщик автоматически решает эти ссылки к другим разделам. Три директивы предписывают ассемблеру размещать код или данные в раздел. Синтаксис этих директив:
.text
.data
.sect «имя раздела»
Когда ассемблер сталкивается с одной из этих директив, он останавливает трансляцию в текущий раздел (действует как команда конца текущего раздела). Затем он транслирует последующий код в обозначенный раздел, пока не обнаружит другую .text, .data, или .sectдирективу.
Разделы формируются через итеративный процесс. Например, когда ассемблер первый раз сталкивается с директивой .data, раздел .data- пуст. Инструкции, следующие за первой директивой .data, собираются в .dataраздел (пока ассемблер не сталкивается с .textили .sectдирективой). Если ассемблер сталкивается с последующими .dataдирективами, то он прибавляет инструкции после этих директив .dataк инструкциям, уже находящимся в разделе .data. Это создает единый раздел .data, который может быть распределен непрерывно в памяти.
Инициализированные подразделы создаются .sectдирективой. Ассемблер обрабатывает инициализированные подразделы тем же самым способом, как инициализированные разделы.
Названные разделы- разделы, которые Вы создаете. Вы можете использовать их подобно заданным по умолчанию .text, .data, и .bssразделам, но они транслируются отдельно. Например, повторное использование .textдирективы создает единый .textраздел в объектном файле. Во время компоновки этот .textраздел распределяется в памяти как одиночный модуль. Предположим, что имеется часть выполняемого кода (возможно подпрограмма инициализации), которую Вы не хотите размещать вместе с .text. Если Вы размещаете этот сегмент кода в названном разделе, он транслируется отдельно от .text, и Вы можете распределять его в памяти отдельно. Вы можете также транслировать инициализированные данные, который отличны от .dataраздела, и Вы можете резервировать пространство для неинициализированных переменных, которые отличны от .bssраздела.