Препроцесор у мові ассемблера. Принципи написання програм, що обробляють вихідний текст програми мовою ассемблера, що містить директиви препроцесора і макрокоманди

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

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

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

Національний технічний університет

“Харківський політехнічний інститут”

Кафедра обчислювальної техніки та програмування

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

“Препроцесор у мові ассемблера”

                                                                                Виконав:

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

                                                                                Шпіка П. М.

                                                                                Перевірив:

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

Харків 2002

1. Тема роботи.

   Препроцесор у мові ассемблера.

2. Мета роботи.

   Освоїти принципи написання програм, що  обробляють вихідний текст програми  мовою  ассемблера, що містить

директиви препроцесора і макрокоманди.

3. Постановка задачі.

   Необхідно розробити програму, що формує  розширений  лістинг фрагмента програми  мовою ассемблера з використанням препроцесора.

4. Розробка рішення задачі.

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

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

   Таблиця 4.1.

Ім’я

тип

призначення

*mnemonics[]

*directives[]

*registers[]

opcode

op1num

op2num

*mnem[]

cop1[]

cop2[]

*F, *F1

char

char

char

int

int

int

char

char

char

file

Покажчик на елемент масиву : mnemonics. Цей масив містить найменування команд мови ассемблера, що зустрічаються у вихідному тексті.

--//--

--//--

Індекс для масиву mnemonics

-і//-і directives і registers

-і//-і registers

Покажчик на елемент масиву, утримуючого об'єктні коду команд

-і//-і першого операнда команди                     

-і//-і другого операнда команди 

Покажчики на вихідний файл і файл розширеного листинга

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

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

 Таблиця 4.2.

ім’я

тип

призначення

strtoi

strupcase

strcomp

*parse

findstr

find_macro

find_parameter

findsym

macro_def

main

int

void

char

char

int

int

int

int

void

void

Порівняння виділеної лексеми з десятковим числом. У випадку позитивного результату повер-   тає значення 0. 

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

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

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

Пошук рядка в масиві рядків. У випадку присутності повертає її індекс у масиві, у противному випадку - 1.                       :

-і- у таблиці форм парам макросу

-і -і в таблиці макросів -і-

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

Обробка включа в ісходник

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

4.3.Опис алгоритму рішення.

 Поки не кінець вихідного файлу робимо след. дії

     1. Вважати рядок з вихідного файлу.

     2. Якщо цей рядок містить директиву INCLUDE,  перевірити їсти файл, що  чи включається цією директивою.

     3. Якщо є, то викликати процедуру обробки, якщо немає - вихід з

програми з видачею повідомлення про це.

     4. Якщо цей рядок містить директиву умовної компіляції,  установити прапор умовної компіляції.

     5. Якщо цей рядок містить виклик макровизначення,  то якщо макрос викликаний вірно - сформувати макророзширення й  у  залежності від прапора умовної компіляції проробити нижче викладені дії.

     6. Зробити синтаксичний аналіз рядка й у залежності від прапора умовної компіляції занести до  протоколу  роботи  препроцесора рядок і вивести в рез. файл  або  розширений  лістинг  цього рядка або рядок.

     7. Якщо кінець вихідного файлу,  то виводимо у файл уміст  таблиць сегментів, символів і макросів.

5. Текст програми PREPROC.C не наводиться.

6. Результат роботи.

Результатом роботи даної програми є файл "$text2.asm",

               DATA SEGMENT PARA

                  AS  DW 34

                  W   DW 4536

                  M   DB 0

                  DFGHA DW 87

               DATA ENDS

               CODE SEGMENT;

                 INC DX

                 MOV AX,AX

                 MOV DX,AX

                 MOV AX,CX

           DDD: CMP CX,DI

                 A DB 0

                 MOV BX,5

                 MOV AX,AX

                 MOV CX,AX

                 DEC AX

                 CMP CX,DX

                 MOV DX,W

                 DEC AX

                 MOV AX,10

                 MOV CX,20

                 MOV BX,CX

                 DEC BX

                 INC CX

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

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