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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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