Основы программирования микропроцессоров Intel для встраиваемых систем
Покупка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
Южный федеральный университет
Авторы:
Скороход Сергей Васильевич, Селянкин Владимир Васильевич, Дроздов Сергей Николаевич, Калачев Дмитрий Петрович, Хусаинов Наиль Шавкятович
Год издания: 2016
Кол-во страниц: 82
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-9275-2223-1
Артикул: 698317.01.99
Рассматриваются вопросы программирования процессоров Intel на языке ассемблера для встраиваемых систем. Учебное пособие состоит из семи разделов. В первом разделе рассматривается последовательность разработки простейшей арифметической программы. Второй раздел посвящен разработке циклических программ. В третьем разделе обсуждаются вопросы использования логических команд. В четвертом разделе излагаются технология обработки символьной информации. Пятый раздел предназначен для изучения операций с двоично-десятичной арифметикой. Шестой раздел посвящен применению подпрограмм. В седьмом разделе обсуждаются вопросы программирования арифметического сопроцессора для реализации вычислений с вещественными числами. Пособие предназначено для студентов, обучающихся по направлениям 02.03.03, 09.04.04.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.03: Механика и математическое моделирование
- ВО - Магистратура
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Южный федеральный университет» Инженерно-технологическая академия С. В. Скороход, В. В. Селянкин, С. Н. Дроздов, Д. П. Калачев, Н. Ш. Хусаинов Основы программирования микропроцессоров Intel для встраиваемых систем Учебное пособие Для студентов бакалаврской подготовки по направлениям 02.03.03, 09.03.04 Таганрог Издательство Южного федерального университета 2016
УДК 004.4 (075, 8) ББК 32.973.26-04я73 С753 Печатается по решению редакционно-издательского совета Южного федерального университета Рецензенты: профессор кафедры ПМиИТ Таганрогского института управления и экономики, доктор технических наук В. П. Карелин; доцент кафедры САиТ Института компьютерных технологий и информационной безопасности Южного федерального университета, кандидат технических наук А. С. Свиридов. Скороход, С. В. С753 Основы программирования микропроцессоров Intel для встраиваемых систем : учебное пособие / Скороход С. В., Селянкин В. В., Дроздов С. Н., Калачев Д. П., Хусаинов Н. Ш.. : Южный федеральный университет. – Таганрог: Издательство Южного федерального университета, 2016. – 82 с. ISBN 978-5-9275-2223-1 Рассматриваются вопросы программирования процессоров Intel на языке ассемблера для встраиваемых систем. Учебное пособие состоит из семи разделов. В первом разделе рассматривается последовательность разработки простейшей арифметической программы. Второй раздел посвящен разработке циклических программ. В третьем разделе обсуждаются вопросы использования логических команд. В четвертом разделе излагаются технология обработки символьной информации. Пятый раздел предназначен для изучения операций с двоично-десятичной арифметикой. Шестой раздел посвящен применению подпрограмм. В седьмом разделе обсуждаются вопросы программирования арифметического сопроцессора для реализации вычислений с вещественными числами. Пособие предназначено для студентов, обучающихся по направлениям 02.03.03, 09.04.04. ISBN 978-5-9275-2223-1 УДК 004.4 (075, 8) ББК 32.973.26-04я73 © Южный федеральный университет, 2016 © Скороход С. В., Селянкин В. В., Дроздов С. Н., Калачев Д. П., Хусаинов Н. Ш., 2016
Введение Встраиваемая вычислительная система – это специализированная вычис лительная система, непосредственно взаимодействующая с объектом контроля или управления и объединенная с ним единой конструкцией. Взаимодействие с обслуживаемым объектом выполняется посредством специализированных датчиков и исполнительных устройств. Особенностями встраиваемых систем являются: непосредственное подключение к объекту; работа в режиме реального времени; поддержка алгоритмов автоматического регулирования; повышенные требования к надежности и безопасности функционирования; жесткие условия эксплуатации (широкий диапазон температур, помехи и т.п.); использование в малогабаритных, автономных и переносных системах (предъявляет требования невысокого энергопотребления, малых габаритов, минимального числа вспомогательных элементов). Как правило, встроенная система является частью более крупной системы или встраивается непосредственно в объект управления. Встроенные системы – это системы «глубоко интегрированные» с объектами физического мира. Их элементы практически всегда ограничены по ресурсам. Это системы длительного жизненного цикла, часто автономные. Масштаб этих систем по размерам и сложности меняется в очень широких пределах. Эти системы рассчитаны на непрофессиональных пользователей и вместе с тем часто выполняют критически важные функции. Встраиваемые вычислительные системы можно классифицировать: по области применения и назначению; по различному соотношению информационных и управляющих функций, т.е. система преимущественно информационная (система сбора данных) или управляющая система автоматического управления); по пространственной локализации аппаратных блоков: а) пространственно локализованные, б) пространственно рассредоточенные; по различному соотношению вычислительной (обработка данных) и коммуникационной (функция ввода/вывода данных) составляющих; по степени участия человека: а) автоматические системы – системы, в которых оператор выполняет только функции начальной настройки и оперативной корректировки параметров и режимов работы системы. Функции сбора данных,
передачи и исполнения команд управления, оперативной выработки команд управления происходят без участия человека; б) автоматизированные системы – системы, в которых оператор частично или в полном объеме обеспечивает оперативную обработку данных и формирование команд управления исполнительными устройствами (например, телеуправление); по организации обработки данных и вычислений (централизованные или децентрализованные); по распараллеливанию на уровне задач и/или функций между физическими/логическими модулями системы. Диапазон применения встроенных вычислительных систем очень велик. В него попадают и простейшие устройства уровня домашнего таймера, и сложнейшие распределенные иерархические системы, управляющие критически важными объектами на огромных территориях. Телекоммуникационные системы, сетевое оборудование (коммутаторы, маршрутизаторы, ADSL-модемы и т.п.). Бытовая электроника (сотовые телефоны, КПК, игровые консоли, цифровые фотоаппараты, электрочайники, микроволновые печи, посудомоечные машины и пр.). Современное медицинское и спортивное оборудование. Транспортная автоматика (от автомобильных до авиационных систем), авионика, системы управления городским дорожным движением. Системы телемеханики (системы управления наружным освещением, контроля и учета электроэнергии и других энергоресурсов, управления и мониторинга энергообъектов). Системы мониторинга, навигации, слежения, бортовые системы для военных и космических применений. «Умный дом» («интеллектуальное здание») на основе технологий сенсорных сетей. Проектируя встроенную вычислительную систему, разработчик всегда создает специализированную вычислительную систему независимо от степени соотношения готовых и заново создаваемых решений. В сферу его анализа попадают все уровни организации системы. Он имеет дело не с созданием приложения в готовой операционной среде при наличии мощных и удобных инструментальных средств, а с созданием новой специализированной ВС в условиях жестких ограничений самого разного плана. Это обуславливает необходимость наиболее полного использования возможностей имеющихся аппаратных ресурсов и особенностей их архитектуры, что возможно только при применении языка ассемблера специализированного процессора, на базе которого создается встроенная система.
Компания Intel предлагает к использованию во встраиваемых решениях процессоры семейства Atom, Core 2 Duo, Core i3/i5/i7, а также одноядерные и двухъядерные процессоры семейства Intel Atom с частотами 1.1 и 1.6 ГГц для решения задач начального и среднего уровня. Настоящее пособие посвящено изучению основ программирования на языке ассемблера семейства процессоров Intel в реальном режиме, применяемом при создании и программировании встроенных систем. Пособие разработано в рамках выполнения базовой части государственного задания в сфере научной деятельности (проект № 3442 "Информационно-алгоритмическое обеспечение систем цифрового управления, автономной высокоточной навигации и технического зрения для перспективных летательных аппаратов: разработка теоретических основ проектирования, алгоритмов, способов эффективной и надежной программной реализации, использование высокопроизводительной вычислительной инфраструктуры для экспериментального моделирования").
1. Разработка линейных арифметических программ Регистры процессора Регистры процессора разделяются на следующие группы [1]: регистры общего назначения; индексные регистры и указатели; сегментные регистры; регистр флагов; указатель команд. Регистры общего назначения (РОН) включают 4 универсальных регистра, оптимизированных для выполнения каких-либо операций: AX (EAX, RAX) – регистр-аккумулятор. Предназначен для хранения операнда и записи результата выполнения команды; BX (EBX, RBX) – базовый регистр. Может использоваться для формирования базового адреса данных в памяти; CX (ECX, RCX) – регистр-счетчик. Используется как счетчик при организации циклов и сдвигов. DX (EDX, RDX) – дополнительный регистр. Используется для хранения промежуточных данных. Соответствие разрядности и обозначений регистров изображено в табл. 1.1. Таблица 1.1 63 31 15 7 0 RAX EAX AX AH AL RBX EBX BX BH BL RCX ECX CX CH CL RDX EDX DX DH DL В процессорах архитектуры x64 имеются дополнительные 64-разрядные РОН R8 – R15 и их младшие байты [2]: R8D – R15D – 32-разрядные; R8W – R15W – 16-разрядные; R8B – R15B – 8-разрядные. Индексные регистры и указатели предназначены для формирования адреса в памяти и включают четыре регистра [3]:
BP (EBP, RBP) – указатель базы. Используется для хранения некоторого начального (базового) адреса; SP (ESP, RSP) – указатель стека. Указывает на вершину стека; DI (EDI, RDI), SI (ESI, RSI) – индексные регистры. Содержат смещение относительного базового адреса. Соответствие разрядности и обозначений индексных регистров изображено в табл. 1.2. Таблица 1.2 63 31 15 0 RBP EBP BP RSP ESP SP RSI ESI SI RDI EDI DI Регистр флагов содержит биты условий, называемых флагами, сигнализирующих о состоянии процессора после последней выполненной команды [4]. Перечень наиболее важных флагов приведен в табл. 1.3. Таблица 1.3 Бит № Имя флага Назначение 0 CF Флаг переноса. Устанавливает, был ли перенос из старшего разряда или заем в старший разряд при выполнении арифметических операций 1 PF Флаг четности. Устанавливается в 1, если результат операции содержит четное количество единиц 4 AF Флаг вспомогательного переноса. Используется в операциях над упакованными двоично-десятичными числами 6 ZF Флаг нуля. Устанавливается 1, если результат операции равен 0 7 SF Флаг знака. Показывает знак результата операции (1– отрицательный, 0 – положительный) 8 TF Флаг трассировки. Обеспечивает возможность работы процессора в пошаговом режиме 9 IF Флаг внешних прерываний. Если IF=1, прерывание разрешается, IF=0 – блокируется 10 DF Флаг направления. Используется командами обработки строк. DF=1 – прямое направление (от меньших адресов к большим). DF=0 – обратное направление 12 OF Флаг переполнения. Устанавливается в 1, если произошел выход результата операции за пределы допустимого диапазона значений
Сегментные регистры являются 16-разрядными. Адресуемый сегментным регистром участок памяти называется текущим сегментом. Сегмент всегда выровнен по границе параграфа (т.е. находится по адресу, кратному 16). Поэтому содержимое сегментного регистра всегда предполагает наличие четырех нулевых битов в младших разрядах, которые в регистре не хранятся [5]. Список сегментных регистров приведен в табл. 1.4. Таблица 1.4 Сегментный регистр Назначение CS Регистр сегмента кода. Содержит начальный адрес сегмента кода DS Регистр сегмента данных SS Регистр сегмента стека ES, FS, GS Дополнительные сегментные регистры Указатель команд IP (EIP, RIP) содержит смещение команды, которая должна быть выполнена. Пара регистров CS+IP содержит адрес следующей команды [6]. Режимы адресации Режимы адресации операндов команд процессора приведены в табл. 1.5. Здесь использованы следующие сокращения: R – регистр, V – переменная, C – константа [14]. Таблица 1.5 Название Обозначение Содержание Пример Регистровая прямая R Операнд находится в регистре mov AX, SI переслать содержимое регистра SI в регистр AX Непосредственная C Непосредственный операнд (константа) присутствует в команде mov AX, 093Ah занести константу 093Ah в регистр AX Прямая V + C или V - C Исполнительный адрес операнда присутствует в команде mov BX, WW+2 переслать в BX слово памяти, отстоящее от переменной с именем WW на 2 байта
Окончание табл. 1.5 Название Обозначение Содержание Пример Косвенная регистровая [R] где R – BP, BX, SI, DI Регистр содержит адрес операнда mov [BX], CL переслать содержимое регистра CL по адресу, находящемуся в регистре BX Косвенная регистровая относительная V[R] , C[R] , [R+V] , [R+C] , где R – SI,DI (индексная) BX,BP (базовая) Адрес операнда вычисляется как сумма содержимого регистра и смещения mov M[BX], CL переслать содержимое регистра CL по адресу,отстоящему от переменной M на BX байт Индекснобазовая [BR][IR] , V[BR][IR] , [BR][IR]C ,где IR – SI, DI, BR – BX, BP Адрес операнда вычисляется как сумма содержимого базового и индексного регистров и возможного смещения mov [BX][SI]3, AL переслать содержимое регистра AL по адресу, сумме регистров BX, SI и константы 3 Структура простейшей программы Ниже приведена схема простейшей программы на языке ассемблера с использованием модели памяти small, в которой допускается наличие единственного сегмента кода и единственного сегмента данных [14]. model small stack 100h dataseg . . . ; описание данных codeseg Start: startupcode . . . ; код программы Quit: exitcode 0 end Start Для выделения памяти в сегменте данных под константы, переменные, массивы используются директивы определения данных [7]: