Тема:"ИНТЕРПРЕТАТОРИ"
Ціль роботи:
Освоити принципи написання інтерпретаторив на прикладі написан-ня програми, що виконує команди та директиви мови асемблеру процесора 8086.
1.Постановка задачі:
Необхідно розробити програму, що виконує команди мови асембле-ру.
2.Розробка рішення задачі:
2.1.Вибір змінних:
Імена змінних, їхній тип і функціональне призначення приведені в Табл.1.
Таблиця 1
Ім'я |
Тип |
Призначення |
mnemonics[] registers[] opcode op1num op2num regval [sizeof(registers / sizeof(char *)] |
char int int int int |
Покажчик на елемент масиву mnemonics.Цей масив містить найменування команд мови асемблера, що зустрічаються у вихідному файлі. -//- iндекс для масива mnemonics. -//- registers. -//- registers. Масив умiстiв iмiтованих регистрiв |
2.2. Опис структури програми.
Імена функцій, їхній тип і призначення приведені в Табл. 2.
Таблиця 2.
Ім'я |
Тип |
Призначення |
Strtoi Strupcase Strcomp *parse findstr push pop execcmd main |
int void char char int void int void void |
Порівняння виділеної лексеми з десятковим числом У випадку позитивного результату повертаеться значення 0. Перетворення рядкових символів у прописні. Порівняння двох рядків. Виділення лексеми з рядка. Пошук рядка в мисiвi рядкiв. У випадку присутностi повертаеться індекс у масиві , у противному випадку –1. Iмiтацiя занесення у стек. Iмiтацiя повернення з стеку. Виконання команд. Головна програма. |
3.Опис алгоритму рішення:
3.1.Загальній алгоритм рішення задачи:
Блок 1.Вводиться з клавіатури команда.
Блок 2.Якщо строка пуста, тоді вихід з програми.
Блок 3.Виконується синтаксичний анализ введеної строки строки.
Блок 4.Якщо нема помилок, команда виконується, інакше перехід до пункту 1.
4.Текст программы:
//interpr.c
#define OP_MUL 12 //$$$
#define OP_DIV 13 //$$$
char *mnemonics[] = {
"MUL”,
"DIV"
};
char operandcount[] = {2, 1, 1, 2, 2, 1, 1, 0, 2, 2, 2, 1, 2,2}; //$$$
switch (code)
{
case OP_MUL : *op1 *= *op2; pswz = (*op1 == 0); break;
case OP_DIV : *op1 /= *op2; pswz = (*op1 == 0); break;
}
}
5.Результат виконання програми:
Програма обробки команди
MOV,DEC,INC,ADD,SUB,PUSH,POP,RET,OR,XOR,AND,NOT,MUL,DIV,
Operation > mov ax,2
AX=A(2) BX=A(10) CX=0(0)
DX=0(0) SP=0(0) BP=0(0)
SI=0(0) DI=0(0) IP=0(0)
Програма обробки команди
MOV,DEC,INC,ADD,SUB,PUSH,POP,RET,OR,XOR,AND,NOT,MUL,DIV
AX=A(6) BX=A(10) CX=0(0)
DX=0(0) SP=0(0) BP=0(0)
SI=0(0) DI=0(0) IP=0(0)
Програма обробки команди
MOV,DEC,INC,ADD,SUB,PUSH,POP,RET,OR,XOR,AND,NOT,MUL,DIV
Operation > div ax,2
AX=A(3) BX=A(10) CX=0(0)
DX=0(0) SP=0(0) BP=0(0)
SI=0(0) DI=0(0) IP=0(0)
6. Висновок: у цiй лабораторнiй роботi були вивченi принципи написання програми, котра iмiтуеть виконання команд та директив мови асемблеру.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.