Розробка мовою високого рівня асемблюючої програми, яка формує протокол (файл лістингу) асемблювання вихідного тексту асемблерної програми, поміщеному у вхідному файлі

Страницы работы

Содержание работы

Міністерство освіти та науки України

Національний технічний університет “Х П І”

Кафедра ОТП

 Лабораторна робота№1

з системного програмування

на тему:

“Процес асемблювання”

Виконав:

       студент групи АП – 30б

                 Чумаков М. М.

Перевірив:

                      Межерицький С.Г.

Харків 2002 р.


Тема: "АСЕМБЛЕРИ"

Мета:

    Освоїти принципи побудови і функціонування асемблеров і одержати практичні навички розробки програми асемблювання вихідного модуля (файлу), написаного мовою асемблера.

Постановка задачі для лабораторної роботи.

    Розробити мовою високого рівня асемблюючу програму, яка формує протокол (файл лістингу) асемблювання  вихідного тексту асемблерної програми, поміщеному у вхідному файлі.

Хід виконання роботи.

За допомогою  текстового  редактора  (ncedit.exe,    vcedit.exe, qedit.exe) створюємо вихідний файл, що  містить фрагмент програми мовою ассмблера відповідно до індивідуального завдання.

Одержуємо розширений лістинг цього фрагмента шляхом  набору  в командному рядку рядка "tasm /la <ім'я  вихідного  файлу>".У  результаті в поточному каталозі отримали файл із цим же  ім’ям,  але розширенням ".lst", що містить розширений лістинг нашого вихідного фрагмента.

Розробляємо схему алгоритму рішення задачі.

Складаємо текст програми і налагоджуємо програму так, щоб вона виконувала поставлену задачу.

Вибір перемінних.

     Тут розглядаються тільки основні перемінні, котрі являются найбільш основними для даної програми.

Імена перемінних, їхній тип і функціональне призначення приведені  в таблиці 7.

Таблиця 7.

________________________________________________________________________

      ім'я                  тип               призначення              

________________________________________________________________________ 

*mnemonics[]     char        Покажчик на елемент масиву    

                                            mnemonics.Цей масив містить  

                                            найменування команд мови асем-

                                            блера, що зустрічаються у вихідному 

                                            тексті.                         

 *directives[]        char           - -//- -                     

 *registers[]          char          - -//- -                      

  opcode                 int          індекс для масиву mnemonics   

  op1num               int          -і//-і directives і registers  

  op2num               int          -і//-і registers               

  *mnem[]             char        Покажчик на елемент масиву,   

                                             утримуючого об'єктні коду команд

  cop1[]                 char        -і//-і першого операнду

                                             команди                     

  cop2[]                 char        -і//-і другого операнду 

                                             команди                     

  *F,*F1                 file          Покажчики на вихідний файл і   

                                             файл розширеного лістингу     

________________________________________________________________________

Опис структури програми.

    Імена функцій, їхній тип і призначення приведені  в таблиці 8.

Таблиця 8.

________________________________________________________________________

ім'я           тип           призначення                

________________________________________________________________________      

     strtoi            int          Порівняння виділеної лексеми    

                                        з десятковим числом.У випадку    

                                        позитивного результату повертає

                                        значення 0.                

    strupcase       void       Перетворення рядкових символів

                                        у прописні.                   

    strcomp        char        Порівняння двох рядків.           

    *parse           char       Виділення лексеми з рядка.    

    findstr           int          Пошук рядка у масиві рядків.    

                                        У випадку присутності повертає  

                                        її індекс у масиві,у противному 

                                        випадку:-1.                      

    findsym         int          -і- у таблиці символів -і-      

    main             void        Головна програма.              

________________________________________________________________________

Результатом виконання програми є файл "test.lst"

                 1   0000                          DATA SEGMENT PARA

                 2   0000   0022               AS  DW 34

                 3   0002     38                 K   DB 56

                 4   0003   11B8              W   DW 4536

                 5   0005     00                 M   DB 0

                 6   0006   0057               DFGHA DW 87

                 7   0008                          DATA ENDS

                 8   0000                          CODE SEGMENT;

                 9   0000 42                     INC DX

                10   0001 8B 16 0003r    MOV AX,W

                11   0003 3D CF              CMP CX,DI

                12   0005     00                A DB 0

                13   0006 8B 16 0000r    MOV BX,AS

                14                           LAB:

                15   0008 3D D8             CMP BX,AX

                16   000A 8B 4C             MOV DX,76

                17                             ZN:

                18   000C 4A                   DEC DX

                19   000D 8B D9             MOV BX,CX

                20   000F 8B 10               MOV AX,16

                21   0011 3D C3              CMP AX,BX

                22   0013                         CODE ENDS

                23                                    END

===================table of segment=========================

                     DATA  0008

                     CODE  0013

====================symbol table=============================

                    AS             WORD        DS:0000

                    K                BYTE         DS:0002

                    W               WORD       DS:0003

                    M                BYTE        DS:0005

                    DFGHA      WORD      DS:0006

                    A                 BYTE        CS:0005

                    LAB            NEAR       CS:0008

                    ZN               NEAR       CS:000C

Висновки з проробленої роботи.

У процесі лабораторної роботи були вивчені принципи асемблювання програм, а також методи розробки асемблерів. Був розглянен двохпроходовий асемблер та основні дії кожнго проходу.

Похожие материалы

Информация о работе