Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Построение простой программы
В качестве "простой" рассмотрим вариант построения программы без использования механизма сегментов и соответствующих директив. Ниже приведен с пояснениями пример подобной программы. Основная программа test.asm extern x1,two %include lib1.asm; включение библиотеки макрорасширений z equ 5 t equ x1+3 k equ +7 i equ - 7 include init.asm; включение команд инициализации процессора Begin MVI A,x1 UMN3 MVI B,z MVI C,k+i ADI t SUI two M1 T1 z,t,k,i MOV D,A PUSH B MVI B,1 POP B include stack.asm; резервирование памяти для стека end Программа не имеет какого либо содержательного смысла и носит чисто учебный характер для отражения различных возможностей ее построения. В программе используются объявленные директивой extern символы x1,two, значение которых будет определено при компоновке. В программе используются макрокоманды UMN3 и T1 z,t,k,i. Макроопределения этих команд записаны в библиотеке lib1.asm и включаются в основную программу командой препроцессора %include. Использованные макрокоманды описаны в подразделе “Средства макроассемблера”. Файл lib1.asm * тексты макроопределений UMN3 %macro MOV C,A RLC ADD C %endm T1 %macro p1,p2,p3,p4 %local s s equ p1 MVI A,p2+s MVI B,p3+s MVI C,p4+s %endm В начале программы обычно записываются команды инициализации процессора; они могут задавать различные режимы, а также в первую очередь они должны определять таблицу векторов прерываний, организацию стека и разрешение прерываний (если прерывания и стек используются в программе). Соответствующие команды можно писать прямо в тексте программы. Поскольку эти действия носят типовой характер и могут повторяться в других программах, они могут быть вынесены в отдельный файл и включены в основную программу директивой include. В приводимом примере команды инициализации процессора записаны в файле init.asm. Таблица векторов прерывания обычно занимает 64 ячейки, и основная программа начинается с 64 (40h). Для выполнения этого условия в приводимом файле с помощью директив ds пропускаются пустые ячейки. Файл init.asm JMP INIT; таблица векторов прерывания ds 5 JMP M1 ds 53 INIT LXI SP,stack; начало программы, организация стека - ; запись в указатель символического адреса ; вершины стека EI; разрешение прерываний JMP BEGIN; переход к основным действиям Стек размещается в основной памяти процессора. Его обычно размещают в памяти после основной программы. Так как заполнение стека идет вниз (в сторону уменьшения адресов), после конца программы директивой ds резервируется 20 ячеек для стека. Символический адрес вершины стека stack будет соответствовать концу зарезервированной области памяти.
Файл stack.asm ds 20 stack;вершина стека Трансляция программы Трансляция производится программой - транслятором avmac85.exe. Формат команды вызова транслятора: avmac85 <имя транслируемого файла> [xref] [sm] [si] где <имя транслируемого файла> -обязательный элемент; [xref] - необязательная опция, задающая формирование таблицы перекрестных ссылок на символы, используемые в программе, в таблице указываются номера строк, в которых используются символы; [sm] - необязательная опция, которая определяет наличие в листинге трансляции макрорасширений, подставляемых вместо макровызовов; [si] - необязательная опция, которая определяет наличие в листинге трансляции команд из файла, включаемого директивой include. В результате трансляции формируется объектный файл с расширением obj, листинг трансляции - файл с раcширением prn, и файл с перекрестными ссылками (при использовании опции xref) - файл с расширением xrf. Имена всех этих файлов соответствуют имени транслируемого файла. Сообщения об ошибках, обнаруженных при трансляции, выводятся на монитор и включаются в листинг. Некоторые ошибки не позволяют сформировать листинг трансляции. Форма листинга Ниже приведен текст листинга трансляции программы, рассмотренной в качестве примера в подразделе “Построение простой программы”. Листинг получен при трансляции с использованием опций si, sm. В первой колонке листинга приводится: · для команд ее относительный (относительно начала программы) перемещаемый адрес, · для символов, определяемых директивой equ, их значение. Если символ является внешне-определенным (определенным директивой extern), он обозначается как X. Во второй колонке записывается код команды. Если в команде присутствует перемещаемый адрес (например, в команде перехода), то код сопровождается знаком ' (C3 0040'). Если в команду входит неопределенное значение символа, то код сопровождается знаком *.
1 2 3 4 5 6 номера колонок листинга 1 extern x1,two 2 $SETLN(LIB1.ASM);%include lib1. asm 1 * тексты макроопределений 2;UMN3 %macro 3; MOV C,A 4; RLC 5; ADD C 6; %endm 8;T1 %macro p1,p2,p3,p4 9; %local s 10;S equ P1 11; MVI A,P2+S 12; MVI B,P3+S 13; MVI C,P4+S 14; %endm 17; RESETLN =0005 3 z equ 5 =…X 4 t equ Z+3 =0007 5 k equ +7 =FFF9 6 equ -7 7 include init.asm 0000' C3 0040' 1 JMP INIT 0003' (0005) 2 ds 5 0008' C3 0054' 3 JMP M1 000B' (0035) 4 ds 53 0040' 31 006F' 5 INIT LXI SP?Stack 0043' FB 6 EI 0044' C3 0047' 7 JMP BEGIN 0047' 3E 00* 8 Begin MVI A,x1 9;UMN3 0049' 4F 9 MOV C,A 004A' 07 9 RLC 004B' 81 9 ADD C 004C' 06 05 10 MVI B,z 004E' 0E 00 11 MVI C,k+i 0050' C6..X 12 ADI t 0052' D6 00* 13 SUI two 14 M1;T1 z,t,k,i =0005 14??0000 equ Z 0054' 3E //X 14 MVI A,T+??0000 0056' 06 0C 14 MVI B,k+??0000 0058' 0E FE 14 MVI C,i+??0000 005A' 57 15 MOV D,A 005B' C5 16 PUSH B 005C' 06 01 17 MVI B,1 005E' C1 18 POP B 19 include stack.asm 005B' (0014) 1 ds 20 2 stack; вершина стека 20 end В третьей колонке помещается номер строки соответствующего исходного или вставляемого файла. Для вставляемых файлов используется своя нумерация строк. В четвертой колонке и далее помещаются поля метки, мнемоники, операнда и комментария, причем для макрорасширений локальные значения сопровождаются знаком “??”. Компоновка программы Компоновку программы можно производить разными способами. Наиболее простым представляется использование командного файла компоновки. При этом команда вызова компоновщика имеет вид Avlink @<имя командного файла компоновки> например, Avlink @1.lnk Для компоновки программы test.asm можно использовать следующий командный файл:
Приведенный пример командного файла содержит все необходимые опции при компоновке простой программы (без использования сегментов). В этом случае программа представляет собой одну общую последовательность кодов, для которой задается начальный адрес размещения ее в памяти. При необходимости опциями DS задаются значения символов. Следует отметить следующее: в приведенном примере записанные после знака (;) комментарии даны для пояснения. В выполняемом командном файле никакие комментарии недопустимы (все, что записано после (;), будет игнорироваться, в том числе продолжение текста на других строках), все опции могут быть записаны подряд (в одну строку); в качестве разделителя можно использовать пробел, запятую или перевод строки. Можно соединить последовательно две (или больше) простые программы при компоновке. В этом случае коды программ будут последовательно объединятся. Порядок объединения кодов определяется порядком записи имен объектных модулей. Например, при записи test=test.OBJ,vstavka.obj коды файла vstavka.obj будут в выходном файле следовать за кодами файла test.OBJ. Результатом компоновки являются выходные файлы со следующими расширениями: *.hex, *.sym и *.map. Файл *.hex содержит исполняемые коды в 16-ричной системе, файл *.sym содержит символьную информацию, необходимую для отладки. Весьма важным файлом, который обязательно необходимо проверить после компоновки, является файл *.map (карта компоновки), который содержит информацию о выполненном размещении программы в памяти. Полученное размещение может отличаться от "заказанного" без вывода каких-либо сообщений об ошибках.
Для программы test был получен следующий файл test.map AVLINK --- LOAD MAP For: Avocet 8085/Z80 Assembler v2.02, #01235 RELOCATED SEGMENTS - CLASS 'M'
ZERO LENGTH SEGMENTS SEGMENT START DATA 0000 IOSPACE 0000 No Transfer Address. В этом файле следует обратить внимание на величины START=000 STOP=0072 LENGTH=0073, которые в 16-ричной системе дают начальный, конечный адрес и длину программы. Если в командном файле не определить символы x1 и two, появится следующее предупреждение:
|
|||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 164; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.135.30 (0.024 с.) |