Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Тема:"ИНТЕРПРЕТАТОРИ"
Ціль роботи:
Освоити принципи написання інтерпретаторив на прикладі написан-ня програми, що виконує команди та директиви мови асемблеру процесора 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туеть виконання команд та директив мови асемблеру.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.