Язык ассамблера

Автор работы: Пользователь скрыл имя, 20 Октября 2011 в 18:01, реферат

Описание

Основные общие особенности языка ассемблера (чаще не совсем точно называемого просто ассемблером; строго ассемблером называется программа, которая является транслятором. Эта программа переводит последовательность команд с языка ассемблера на язык машинных кодов процессора) микропроцессоров совпадают с особенностями всех языков подобного типа. Отметим их основные особенности

Работа состоит из  1 файл

ЯЗЫК АССЕМБЛЕРА.docx

— 85.75 Кб (Скачать документ)

Программа не имеет какого либо содержательного смысла и носит чисто учебный характер для отражения различных возможностей ее построения. В программе используются объявленные директивой 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  
        7      
        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  
        15      
        16      
        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       I NIT
    0003' (0005) 2   ds 5
    0008' C3 0054' 3   MP 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 можно использовать следующий командный файл:

test=test.OBJ ; имя выходного  файла (test) и имена компонуемых
  ; объектных модулей  (*.obj)
  ; опции:
– SYMBOLS ; сохранение в выходном  файле символов  программы
  ; для удобства отладки
– START(M,0H) ; задание начального  адреса размещения  программы
  ; в памяти
– DS(x1,5) ; задание значений  символов, не определенных  в
– DS(two,6) ; исходном файле

Приведенный пример командного файла содержит все необходимые  опции при компоновке простой  программы (без использования сегментов). В этом случае программа представляет собой одну общую последовательность кодов, для которой задается начальный  адрес размещения ее в памяти. При  необходимости опциями 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'

SEGMENT NAME START STOP LENGTH ovl/cat def/undef
CODE 0000 0072 0073 Concat Defined

ZERO LENGTH SEGMENTS

    SEGMENT     START

    DATA         0000

    IOSPACE     0000

No Transfer Address.

В этом файле  следует обратить внимание на величины START=000 STOP=0072 LENGTH=0073, которые в 16-ричной системе дают начальный, конечный адрес  и длину программы.

Если в командном  файле не определить символы x1 и two, появится следующее предупреждение:

WARNING: Symbol TWO undefined

WARNING: Symbol X1 undefined

Использование программы, 
состоящей из отдельных сегментов

Обычно мало-мальски  сложная прикладная программа представляет совокупность нескольких единиц –  модулей. Это следует также из принципов структурного программирования. Физической единицей программы является программный модуль (файл). Логической единицей программы на ассемблере является секция или сегмент. Функциональный модуль программы (подпрограмма, процедура  и т.д.) может совпадать с секцией  или объединять несколько секций.

Использование нескольких программных модулей  для получения общей программы  обусловлено существованием больших  и сложных программ, совместной работой  нескольких программистов, удобством  разработки программы.

Информация о работе Язык ассамблера