Освоєння принципів написання інтерпретаторів на прикладі написання програми, що виконує команди та директиви мови асемблеру процесора 8086

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

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

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

                            Тема:"ИНТЕРПРЕТАТОРИ"

Ціль роботи:

Освоити принципи написання інтерпретаторив на прикладі написан-ня програми, що виконує команди та директиви мови асемблеру процесора 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

Operation > mul ax,3

        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туеть виконання команд та директив мови асемблеру.

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

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