Солонина А., Улахович Д. Алгоритмы и процессоры цифровой обработки сигналов (2002) (1095891), страница 64
Текст из файла (страница 64)
9./, согласно принципам структурного программирования прикладная программа обычно представляет совокупность нескольких единиц — модулей. Физической единицей программы является программный модуль (файл/. Логической единицей программы на ассемблере является секция или сегмент. Функциональный модуль программы (подпрограмма, процедура и т. д.) может совпадать с секцией или объединять несколько секций. Использование нескольких программных модулей лля получения общей программы обусловлено существованием больших и сложных программ, совместной работой нескольких программистов, удобством разработки программы. Наличие нескольких функциональных модулей обусловлено, прежпе всего, принципами структурного протралтмирования. присутствующими даже в неявном виде в любой "хорошей" программе.
Механизм секций поддерживается современными языками ассемблера в связи с использованием в процессорах памяти с достаточно разветвленной (и иногда сложной) структурой, памяти, состоящей из блоков различного назначения и с различными характеристиками. Программу, содержащую несколько секций, можно загружать в разные блоки памяти, распределяя различные секции програмл1ы в зависимости от назначения в разные блоки памяти. Например, часть программы, представляющую команды инициализации процессора, которые выполняются один раз при включении системы и время выполнения которых не критично, можно разместить в медленной внешней памяти, а критичные с точки зрения времени выполнения фрагменты — в быстрой внутренней памяти процессора.
Отдельный программный модуль не связан с определенным количеством секций — модуль может содержать и одну и несколько секций, в евою очередь секция способна располагаться в нескольких программных модулях. Каждая секция может являться отдельным функциональным элементом программы. При этом секция может быть независимо настроена на разл1ещение в определенном месте (в соответствии с требуемыми типом и адресам памяти) испальзуемага пространства памяти. Этв настройка на конкретные адреса так же, как и размещение секций в строгом порядке, осуществляется компоновщиком или непосредственно ассемблером (если он позволяет получить абсолютную програлену, т.
е. программу с абсолютнымн адресами), Секции программы, прежде всего, разделяются по назначению. Как правило, во всех языках используются (иногда этим и ограничиваются) секции трех видов: секции кодов программы, секции инициализируемых данных программы (то есть ланных. которые загружаются в память) и секции неиницнализируемых данных (то есть данных, появляющихся в процессе выполнения програмлты).
Секции могут иметь имя, звлаваелюе программистам (пользователем). Допустимое количество секций в праграмлте различается в разных версиях ассемблера и в некоторых вариантах может быть создано да б5 535 различных секций. Предложения (строки) ассемблера Исходная программа на языке ассемблера состоит из послеловательности утвержлений. которые называют также ассемблерными строками или предложениллти, Прелложение ассемблера может располагаться в нескольких строка на экране лисплея или в файле прн использовании для продолжения ' строки специальных символов.
В ассемблерной строке могут быть записаны команды или инструкции процессора, директивы ассемблера, макрокоманды, команды препрацессора и комментарии. Еше раз следует отметить, что здесь рассматриваются общие принципы построения различных ассемблеров и в конкретных вариантах каких-либо из перечисленных выше конструкций может не быть. Например, в ассемблере Т! нет команд препроцессора, которые используются, в частности, а ассемблерах фирм АВ) и (мсепь Команды препроцессора применяются лля изменения ассемблерного кала. Онн начинаются с символа л.
Примеры команд: ' П лзпс1аае — включает в текст программы содержимое указанного файла; П Ваегъпе — определяет макрокоманды; П кьг ле1ве ... 1епаьг — дает возможность ассемблеру выбора в зависимости ат выполнения некоторого условия одной из двух последовательностей предложений ассемблера. Следует отметить, что действия, выполняемые этими и некоторыми другими командами препрацессара, в ассемблерах иных фирм выполняются чирективами ассемблера.
Директивы ассемблера не порождают машинные команды и какие-либо действия в процессоре; они задают структуру программы, сообщают транслятору и компоновщику информацию а том, чта им надо делать с команлами и данными. Прилтеры директив: П . весеъоп — определяет начало новой секции; и . -кесл — определяет начало секции (ассемблер (мсеш); П,ввкстэтон — опрелеляет число знаков при представлении числа с плавающей точкой (ассемблер АЫ); П лщови, — определяет глобальные символы (общие в различных программных молулях); дпгсрнтмы и процессоры цифровой об боткн сигналов Збг Глава и [годготовка программ пользователя Языки программирования П .ьаа — резервирует место в памяти для нсинициализируемых данных; П . с]ага — определяет начало секции данных; П . апс! — определяет конец программы на ассемблере; П .ачн — присваивает значение некоторому символу (варианты в различных версивс . аас, .
нссп и др.); П . осу — задает абсолютный начальный адрес для секции; П . сан, .цае — директивы, связывающие и определяющие общие символы в различных программных модулях. Команды или инструкции процессора порождают машинные команды н выполняются н заданной последовательности во время работы процессора. Различные команды рассмотрены в глене б, а макрокоманды представлены ниже. Комментарии не влияют на результат трансляции и служат лля пояснения и описания программы. Комментарии без изменений переносятся в файл, получаемый после трансляции, — листинг трансляции. Вся строка ассемблера может являться комментарием. В этом случае она начинается каким-либо специальным символом, например * (звездочка) или; (точка с запятой). Иногда используется стиль языка С, и комментарием считается все, заключенное н символы г *А В ассемблере фирмы АП! комментарии, записанные на одной строке. могут начинаться симвочами lг (стиль С++); комментарии, расположенные в нескольких строках, заключаются в фигурные скобки [ !.
Строка (предложение) программы на ассемблере обычно делится на несколько полей, разделенных одним или более пробелами. В строке могут быть следующие поля: П поле метки; П поле мнемоники; П поле операнда; П поля операции 2 и операнда 2; П поля перемещения данных (поля параллельных пересылок); П поле комментария. В некоторых вариантах могут добавляться дополнительные поля, например поле условия.
Чаще всего строка имеет следующий формат: [матка [с ] ] сннатсоннка> [операнд! [т ксммантарня! Здесь, как и обычно, при описании системы команл н синтаксиса языка, для обозначения необязательного элемента конструкции использованы квад- ратные скобки [ ]. Таким образом, метка, операнд и комментарий янляютсн необязательными элементами и могут отсутствовать. Примеры ассемблерных строк: й ХН Е00 0 й Рнс Е00 3100 а ра: Е00 3200 а хас Е00 $300 ИС2 асЫ х ксасанда сложения, мн2 — матка асЫ х, а; ксманда сложения, тачз — метка Попо метки Меткп в общем случае является необязательным элементом ассемблерной строки.
Для некоторых директив наличие метки обязательно. Метка начинается в первой позиции строки и может содержать (как и любой идентификатор) алфанитно-цифроные знаки (А — У., а — г, 0 — 9, и а), первым из которых должна являться буква. Если в первой позиции строки стоит пробел или символ: (точка с запятой), то считается, сто метка отсутствует.
Однако, если метка заканчинается двоеточием, то она может начинаться с любой позиции. Двоеточие пе входит в состав метки. Разрешено размещать метку отдельной строкой, но оставшиеся части прелложения ассемблера могут располагаться на следуюцшх строках без знака продолжения строки. Попе мнемоники Поле диемолитси начинается после первого прсбела н строке и заканчивается одним или более пробелами. Поле мнемоники содержит одно из следующих утверждений: П мнемоническое обозначение команды процессора, например, ас]п, кота (описание команд процессора си. в главе б); П мнемоническое обозначение макрокоманды (см.
ниже); П директиву ассемблера. Директивы ассемблера не порождают машинные команды и какие-либо действия в процессоре: они залают структуру программы, сообщают транслятору и компоновщику информацию о том. что им необходимо делать с командами и данными. Ассемблер проверяет допустимость кодов мнемоник по своей внутренней таблице кодов команд и директив, а затем по таблице макрокоманд. В с~учае отсутствия используемых мнсхюник выдастся сообщение об ошибке.
Алгоритмы и процессоры цифровой обработки сигналов Поле операнда Поле онерпндо начинается сразу за пробелом (нли пробелами), заканчивающим поле мнемоники, и, в свою очередь, завершается однил( или более пробелами. В поле операнда могут быть записаны константы, символы и выражения, состоящие из символов и констант. Эти конструкции языка описаны ниже. Если команда или директива требуют нескольких операндов. то отдельные операнды разделяются запятыми, но не пробелами. Интерпретация поля операнда зависит от мнемоники соответствующей команды или директивы.
В алгебраических ассемблерах (см. Разд. 9.23) для записи команды вместо отдельных полей мнемоники и операндов используется общее поле команды. Изменение формата записи команлы порождает в некоторых случаях и другие отличия в записи строки ассемблера. Так, в ассемблере процессоров платформы С6000 (см. Раэд. 2 4) фирмы Т! строка ассемблера имеет вид [метке[: ] ) [знвк лврзхлельной операции] [условие! <ынеттохика> [ислалнительттьзт элемент] [операнд] [ т ксьментарий] Такая структура строки ассемблера вызвана сложной конструкцией команды данных процессоров, в которой указываются параллельно производимые операции, может выполняться проверка некоторого условия и должен указываться один из 8 исполнительных функциональных элементов, который будет производить операцию.
9.2.3. Мнемонические и алгебраические ассемблеры В языках ассемблера используются два способа (вида) записи команд процессора: алгебрничеатий и мнеттоничегкий, и, соответственно, существуют ачгебраический и мнемонический ассемблеры. Например, трехоперандная команда сложения может быть записана следующим образом: Алгебраическая ферме Мнемоническая фсрьте й00 Хкевт, аспект, йсх АСх = Хтпетп + Ъпетз При мнемонической форме лля записи команды применяются два поля— поле мнемоники команды (А00) и поле операндов (х ек, г к, Асх).