Разработка программы, формирующей протокол работы препроцессора при обработки исходного текста программы на языке ассемблера

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

Тема :”Препроцессоры”

Цель работы: освоить принципы написания программ, обрабатывают исходный текст программы написанный на языке асемблера, содержащий  директивы препроцессора и макрокоманды.

1.  Постановка задачи для лабораторной работы.

Необходимо разработать программу, формирующую протакол работы препроцессора при обработки исходного текста программы на языке ассемблера. который содержит директивы препроцессора и макроко-манды.Протокол должен содержать файл такого же формата как и исход-ный, но не содержащий директивы препроцессора.

2.  Постановка задачи.

Необходимо разработать программу, формирующую расширенный листенг фрагмента

Программы нп языке ассемблера с использыванием препроцессора.

3.  Разроботка решения задачи.

3.1.  Выбор переменных.

Именна переменных их тип  и функциональное назначение приведены в табл.1

                                  Таблица 1

Ім'я

Тип

Призначення

mnemonics[]

directives[]

registers[]

opcode

op1num

op2num

*mnem[]

cop1[]

cop2[]

*F, *F1

char

char

char

int

int

int

char

char

char

file

Покажчик на елемент масиву mnemonics.Цей мас-

сив містить найменування команд мови асемб-

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

Покажчик на елемент масиву directives.Цей мас-

сивий містить найменування команд мови асемб-

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

-//-

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

-//- directives і registers.

-//- registers.

Покажчик на елемент масиву, що мiстить об'ект-

ний код команд.

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

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

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

листенга.

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

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

Табл.1.2.2

Ім'я

Тип

Призначення

Strtoi

Strupcase

Strcomp

*parse

findstr

findsym

find_macro

find_parametr

macro_def

main

int

void

char

char

int

int

int

int

void

void

Порівняння виділеної лексеми з десятковим числом

У випадку позитивного результату повертаеться зна-

 Чення 0.

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

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

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

Пошук рядка в мисiвi рядкiв. У випадку присутностi

повертаеться індекс у масиві , у противному випадку –1

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

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

-//- в таблице формю параметров макроса -//-

обработка включаемого в исходник файла

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

.

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

Пока не конец файла произврдим следующие действия:

Блок 1: Считываем строку из исходного файла.

Блок 2: Если эта строка содержит директиву INCLUDE, проверяем есть ли включаемый этой директивой файл.

Блок 3: Если есть,то вызываем процедуру обработки, если нет,то выход из программы с выдачей сообщения об этом.

Блок 4: Если эта строка содержит директиву условной компиляции, установить флаг условной  компиляции.

Блок 5: Если эта сторока содержит вызов макроопределения, то если макрос вызван  верно – формируем макрорасширение и в зависимости от флага условной компиляции выполняем ниже изложенные дествия.

Блок 6: Производим синтаксический анализ строки и в зависимости от флага условной компиляции заносим в протакол работы препроцессора строку и выводим в результирующй файл либо расширенный листенг этой строки либо строку.

Блок 7: Если конец исходного файла,то выводим а файл содержимое таблиц сегментов, символов и макросов.

5. Текст программы Preproc.cpp

char *macrodir[]={"MACRO","ENDM"}; /*

if (1==(opcode=findstr(prepr_dir,lexbuf))) //Проверка на лексему rept

  {

 int i=0;

 char *mas[10];

 int* povtor;                         // колличество повторов

          parsep=parse(lexbuf,parsep); // выделение следующей лексемы

          strtoi(lexbuf,povtor);   // povtor – оператор мнемоники rept

                     do

          {

hert:

          fgets(cmdbuf,MAXSTR,F);

          strupcase(cmdbuf);

          if(strconsist("\n",cmdbuf[0])) // если строка - \n

          goto hert;

          parsep=parse(lexbuf,cmdbuf);   // выделение лексемы

          mas[i]=cmdbuf;

          i++;

          }

          while (strstr(lexbuf,"ENDM")==0);

                    int kol=i;

 // вывод в файл

          for(int j=0;j<*povtor;j++)

                    {

                    for (i=0;i<kol;i++)

           {

           fprintf (F1,"1\t%10i%39s",number,mas[i]);

           number++;

           }

                    }

goto begin;

  }

6. Результат работы программы.

6.1.  Входные данные для работы программы.

Входными данными есть файл “text2.asm” и mymac.lib

include mymac.lib

 DATA segment para

  ifb <>

  as  dw 34

  else

  K   DB 56

  endif

  W   DW 4536

  M   DB 0

  dfgha dw 87

 DATA ends

 CODE segment

           rept 5

     mov ax,7

     inc ax

     endm

     inc dx

     mym4 ax

    MOV ax,cx

   ddd: cmp cx,di

    a db 0

    mov bx,5

    mym ax,bx,10,20

    CMP cx,bx

    MOV DX,w

 ZN:

    DEC ax

    mym2 10,20

    MOV Bx,cx

    mym3 bx,cx

    MOV AX,16

    CMP AX,BX

  CODE ends

 END

6.2.  Результатом работы данной программы является “t$ext2.asm”

DATA SEGMENT PARA

  AS  DW 34

  W   DW 4536

  M   DB 0

  DFGHA DW 87

 DATA ENDS

 CODE SEGMENT

     MOV AX,7

     INC AX

     ENDM

1

Содержащий результат работы препроцессора и подтверждающий правильность

aайл “text2.lst”

               1                     INCLUDE MYMAC.LIB

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.