Дж.Хиллбурн, П.Джулич Микро-ЭВМ и микропроцессоры (1979) (1092080), страница 23
Текст из файла (страница 23)
Для хранения программы требуются девятнадцать слов, Программное обеспечение 147 Таблица 5.2 Программа примера 5А на машинном языке Ащмо (аестеадцатернчвма1 Операция Команда (деоечная1 Е» — О 0 е — 1 Е» — 08 Н» — 01 С» — 08 0001 0010 0010 0011 0001 0011 0000 1101 1100 0010 0000 1001 0000 0101 50С 5011 50Е 50Е 510 511 512 и программисту необходимо каждую команду записать в двоичном коде. Кроме того, требуется определить конкретные адреса всех команд в самой программе, чтобы можно было использовать команду перехода Л)МР. Например, второй и третий байты этой команды, расположенной по адресу 510, должны задавать адрес условного перехода на опчу из предыдущих команд.
В случае добавления новой команды до адреса 500 происходит смещение всех команд данной программы на один адрес. Поэтому, чтобы учесть новое положение команды 1ОА[) АСС[.)М[Л.АТОГч (ЗАГРУЗИТЬ В АККУМУЛЯТОР), следует скорректировать второй байт команды,[()МР. Таким образом, при написании программы на машинном языке программист должен постоянно помнить адреса всех команд и данных программы. Это очень утомительное занятие, при котором легко допустить ошибку. Однако поскольку микропроцессоры стоят недорого и часто используются для выполнения очень коротких !О* 500 501 502 503 504 505 506 507 508 509 50А 50В 0001 0001 оооо оооо ((В,)) 0000 0001 ( ( Ва ) ) 001'0 0001 0000 1000 0000 0001 0000 1110 0000 1000 1010 1111 0001 1010 1000 1110 0010 0111 Флажок перенос໠— 0 А» — [(0)(Щ А» — А+ [(Н) (Ц) + Перенос Произвести десятичную коррек- цию аккумулятора [((У) (ЕЦ вЂ” А Н,Ь вЂ” Н,Е+! !1, Е» — ат, Е+1 С» — С вЂ” 1 Если (НУЛЬ) СК» — 0509 148 Глава Б программ, то в ряде случаев можно программировать на машинном языке.
При этом программист должен представлять ожидающие его трудности. А вообще, как правило, рекомендуется программировать на символическом языке, за исключением, может быть, случаев простейших применений микропроцессоров. 5.5. СИМВОЛИЧЕСКИИ ЯЗЫК В символическом языке все операции и адреса обычно имеют символические обозначения. Это освобождает программиста от необходимости запоминать машинные коды команд и следить за абсолютной адресацией команд и данных. Символическое обозначение,может содержать любую комбинацию символов длиной до шести знаков (в зависимости от конкретного ассемблера), первым символом которой должна быть буква. В качестве примера в табл.
5.1 приведена мнемоника команд микропроцессора 1п1е! 8080. Символические обозначения команд отражают сущность выполняемых операций. Представление адресов при помощи их символических обозначений является важным свойством символического программирования, позволяющим производить обращения к командам и данным на уровне символических адресов. Типичный оператор на языке ассемблера записывается в виде строки, содержащей четыре поля: названия, операции, операнда и комментария. Эти поля отделяются разделителями, такими, как пробел, запятая, двоеточие, точка с запятой, косая черта, тире.
В поле названия записывается символический адрес (метка) команды. После трансляции программы метка заменяется конкретным адресом памяти, по которому хранится данная команда. Метка команды позволяет обращаться к ней из любой точки программы. Вполне понятно, что команды, к которым нет обращения, не требуют меток. В рассмотренном выше примере 5.1 необходима лишь одна метка для реализации оператора условного перехода. Если эту метку обозначить сокращенно как МООР, то на символическом языке 1п!е1 8080 соответствующая команда запишется следующим образом: 1.00Р : 1Л)АХ Р ; 8(аг! о1 !оор (начало цикла) Поле Поле Поле Поле названия операции операнда комментария В программе табл.
5.2 метке 1.00Р соответствует адрес 509. Поле операции содержит символическое обозначение команды, а поле операнда — символический адрес операнда. Содержимое Программное обеспечение 149 Таблица 5.3 Программа примера б.! ма символическом языке [51 0 М 0 Н 0 С 1.00Р поля комментария используется лишь для документирования символической программы и на программу в машинных кодах не влияет. В рассмотренном примере числа й!А и А!В могут быть символически адресованы как ЖА и А!В без указания их истинного адреса. В этом случае й!А примет значение 100га (адрес первого байта ЖА), а А! — значение 108,е, С использованием символического языка программа, приведенная в табл.
5.2, может быть записана так, как это показано в табл. 5.3. ПСЕВДОКОМАНДЫо Поскольку после трансляции командам и данным должны быть . присвоены истинные адреса, ассемблер должен располагать их начальным адресом. Эта информация, а также другие данные, необходимые для работы ассемблера, задаются при помощи псевдо- команд, Последние записываются так же, как и машинные команды, но используются лишь в процессе трансляции программы как команды ассемблера; Основные псевдокоманды относятся к одному из следующих типов: 1.
ОИЙ1[ч[ (АР[утсЕЯВ). Этот оператор всегда помещается в начале программы на языке ассемблера и определяет адрес, начиная с которого размещаются последующие команды. Ассемблер осуществляет последовательную адресацию команд до тех пор, пока не встретится другой оператор Отс1О[Ы. Наиболее часто ис- о В отечественной литературе более употребительным является термин: «команды ассвмблераж — Прим. перев. 1.Х1 1.Х! М"ч'! ХКА ЕООР: 10АХ АРС РАА БТАХ 1[ЧХ ПЧХ РСй г!чс Р, !ЧА ; Загрузить адрес АгА в регистры 0 и Е.
Н, [ЧВ; Загрузить адрес А!В в регистры Н и Е. С, В ; Очистить разряд переноса. ; Загрузить байт УА в аккумулятор. ; Прибавить байт !УВ к содержимому аккумуля-- тора. 159 Глава б пользуемые для данного оператора обозначения — ОКО, ВЕО, ' и др. 2. ЕЯ1)АТЕ. Данный оператор присваивает числовое значение символу. Например, оператор Х=40 или Х ЕЯ 40 означает, что в транслированной программе по адресу, соответствующему метке Х, будет помещено число 40. При помощи этого оператора двум различным меткам может быть назначен один и тот же физический адрес, например равенство Х=КО определяет взаимозамеияемость Х и КО. Подобная операция используется при составлении программ с целью экономии памяти.
3. В1ОСК. Определяет последовательность чисел — массив, таблица и т. п. Например, в результате выполнения оператора Е!ЗТ: ВЕК 26, 3, 76, 44 в последовательных ячейках памяти, начиная с адреса, определяемого меткой ПЯТ, будут записаны четыре числа — 26, 3, 76, 44. При обращении по метке ЫЗТ получаем доступ к первому слову данных блока. Для большинства ассемблеров допускается относительная адресация при работе с другими словами блока. В этом случае, например, символический адрес ЫЯТ+2 относится к числу 76 — третьему слову блока.
Для обозначения рассматриваемого оператора используются символы В1К, ВВ и др. Таблица 5.4 Псевдокоманды учебной программы (1п)е1 8980) ОйО РВ РВ ОйО !ООНО 73, 01, 01, 90, 38, 00, 01, 60 02, 00, 34, 10, 32, 96, 00, 00 300Н Снмволнческан программа табл. 3.3 )р 1т, )тВ: Е!ЧР Ч Н обозначает меотнадаатеричное числе. 4. ЕИО. Определяет конец исходной программы. Трансляция прекращается, как только ассемблер встречает эту команду. Предположим, мы хотим написагь на языке ассемблера программу примера 5.1 для микро-ЭВМ МСЗ-80 на базе процессора !п1е! 8080. Команды этой программы приведены в табл.
5.3. Для того чтобы числа АгА и А!В разместились, начиная с адреса 100ы, необходимо .выполнить ряд операторов, которые представлены в табл. 5.4. Программное обеоаееенае 153. ЛИТЕРАЛЫ Предположим, что в некоторой точке программы к содержимо му аккумулятора добавляется число 3. Тогда оператор ТНКЕЕ ЕЯ 3 назначит некоторый адрес, метке ТНКЕЕ и по этому адресу запишет число 3.
А по команде АР ТНКЕЕ содержимое памяти по адресу ТНКЕЕ добавляется к содержимому аккумулятора. При подобном подходе программист должен, помнить символические обозначения всех констант. Этот же результат можно получить, если использовать команду сложения с непосредственными данными, например АР1 3. В данном случае число 3 будет храниться в памяти непосредственно после команды. При необходимости повторного использования этой константы ее необходимо снова занести в память, если программист ие помнит абсолютный адрес числа 3. Литералом называют псевдокоманду, непосредственно определяющую значение числа, над которым производится операция.
Если ассемблер допускает работу с литералами, то сложение можно выполнить при помощи только одной команды: АР=3 Для того чтобы показать ассемблеру, что используется литерал, обычно применяют знак равенства. В этом случае символическому обозначению числа 3 присваивается адрес, по которому в. памяти хранится это число. Если тот же литерал встречается в программе опять, ассемблер распознает его и использует ранее. определенный адрес числа 3.
Применение литералов сокращает количество необходимых определений символических обозначений и является более эффективным с точки зрения экономии памяти,. чем использование команд с непосредственными данными. МАКРОКОМАНДЫ Трансляция операторов символического языка на машинный язык обычно выполняется по принципу один-в-один. Однако в ряде случаев удобно один символ использовать для обозначения целой группы команд. Такая возможность реализуется при помощи псевдокоманды, называемой макрокомандой.