Вивчення основних принципів побудови трансляторів (побудова таблиць змінних, семантичний та синтаксичний аналіз, формування машиного коду)

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

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

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

Транслятор

Мета роботи:

Розробити програму – транслятор, виконуючий розбір тексту програми написаної мовою асемблера і генеруючу файл лістінга, в якому містяться коди команд процесора 80х86, та дані про використовані у програмі мітки, змінні та сегменти.

Індивідуальне завдання:

Створити програму, обробляючу систему команд мови асемблера, а також виконуючу створення LST файла.

Розробка алгоритму:

Відкриття вхідного файла;

Перший прохід

 а) сематичний та синтаксичний аналіз;

 б) встановлення довжини команди;

 в) формування таблиці сегментів;

 г) формування таблиці адресів змінних;

 д) формування таблиці адресів міток;

Другий прохід (формування вихідного файлу)

 а) аналіз команд;

 б) формування машинного коду команди;

 в) запис у вихідний файл;

Блок-схема алгоритма:


 

 



Типи даних:

У програмі використовувалися наступні структури даних та змінні.

Структури:

     Для збереження дах про всі сегменти, мітки, змінні, команди була використана наступна структура:

struct names{

   char *strg;

   char *name;

   short int id;

   names *prev, *next;

};

     Для збереження дах про всі мітки була використана наступна структура:

struct labels{  // Список меток

   char *name;

   char *segm;

   int ofs;

   labels *prev, *next;

};

     Для збереження дах про всі змінні була використана наступна структура:

struct var{ // Список переменных

   char *name;

   char *segm;

   int n;

   int dl;

   int ofs;

   int ofse;

   var *prev, *next;

};

     Для збереження дах про всі сегменти була використана наступна структура:

struct segm{  // Список имен сегментов

   char *name;

   int ofs;

   int len;

   segm *prev, *next;

};

     Для збереження дах про всі команди була використана наступна структура:

struct command{

   char *strg;

   char *kod;

   short int id;

   short int len;

};

Змінні:

а – покажчик на список усіх команд, міток, сегментів та змінних;

*strg – Прочитана строки;

*strd – продубльована строки;

*tmpt – тимчасова змінна, покажчик на список з усіма даними;

*tmpl - тимчасова змінна, покажчик на список з даними про мітки;

*tmpv - тимчасова змінна, покажчик на список з даними про змінні;

*tmps - тимчасова змінна, покажчик на список з даними про сегмент;

fwtype – тип команди у прочитаної строки;

ofs – зміщення від початку сегмента;

Результат роботи програми:

LST file generator v0.50. (c)VoidSoft

Второй проход:

LINE  OFFSET      CODE              SOURCE

 001  0000                    data segment

 002  0000  0001 0002 0003          a   dw   1,2,3

 003  0006  2C                      b   db   44

 004  0007  0001                    c   dw   1

 005  0009                    data ends

 006  0000                    dat segment

 007  0000  01 02 03 04 05          d       db 1,2,3,4,5

 008  0005                    dat ends

 009  0000                    code segment

 010  0000                    assume ds:data,cs:code,es:dat

 011  0000                    begin:

 012  0000  40                      inc     ax

 013  0001  FF 06 0007 R            inc     c

 014  0005  4B                      dec     bx

 015  0006  FF 0E 0000 R            dec     a

 016  000A  EB 15 90                jmp     aa

 017  000D  8B D8                   mov     bx,ax

 018  000F  8B 16 0000 R            mov     dx,a

 019  0013  B9 0064                 mov     cx,100

 020  0016  89 0E 0000 R            mov     a,cx

 021  001A  C6 06 0006 R C8         mov     b,200

 022  001F  CD 21                   int     21h

 023  0021                    aa:

 024  0021  C7 06 0000 R 03E8       mov     a,1000

 025  0027  8B 0E 0000 R            mov     cx,a

 026  002B  EB F4                   jmp    aa

 027  002D                    code ends

                   ТАБЛИЦА ИМЕН СЕГМЕНТОВ

Имя сегмента            Длина сегмента

data              0009

dat               0005

code              002D

                  ТАБЛИЦА ПЕРЕМЕННЫХ

Имя переменной          Занимаемая память

a                 0006

b                 0001

c                 0002

d                 0005

                   ТАБЛИЦА МЕТОК

Имя метки         Смещение

begin             0000

aa                0021

Висновок:

Вивчені основні принципи побудови трансляторів: побудова таблиць змінних, семантичний та синтаксичний аналіз, формування машиного коду.

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

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