Лабораторна робота № 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
Висновок:
Вивчені основні принципи побудови трансляторів: побудова таблиць змінних, семантичний та синтаксичний аналіз, формування машиного коду.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.