Змішанепрограмування на мовах С та Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕПМС

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Варіант:
4 14 1

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт про виконання лабораторної роботи № 2 з курсу „ Системне програмування” Змішанепрограмування на мовах С та Асемблер Мета роботи:оволодітинавикамистворенняпрограм, частиниякихнаписанірізнимимовамипрограмуванняЗасвоїти правила взаємодіїрізнихмодулів. Теоретичнівідомості Труднощі опису зв'язку програм мовою C і асемблерних програм полягає в тому, що різні версії мови C мають різні угоди про зв'язки і для більш точної інформації варто користатися посібником з наявної версії мови C. Більшістьверсіймови C забезпечують передачу параметрів через стек у зворотній (у порівнянні з іншимимовами) послідовності. Звичайно доступ, наприклад, до двохпараметрів, переданих через стек, здійснюється в такийспосіб: PUSH EBP MOV EBP,ESP MOV EAX,[EBP+8] MOV EDX,[EBP+12] ... POP EBP RET Деяківерсіїмови C розрізняютьвеликі і малібукви, тому ім'яасемблерного модуля повинне бути представлено в тому ж символьному регістрі, якийвикористовують для посилання C-програми. У деякихверсіяхмови C потрібно, щобасемблерніпрограми, щозмінюютьрегістри EDI і ESI, записувалиїхнійвміст у стек при вході і відновлювалицізначеннязі стека при виході. Ассемблерніпрограмиповинніповертатизначення, якщоценеобхідно, у регістрі EAX (подвійне слово) чи в регістровійпарі EDX:EAX (8 слів). Для деякихверсіймови C, якщоассемблернапрограмавстановлює прапор DF, те вона повинна скинутийого командою CLD перед поверненням. Щобскомпонувати разом модулі C++ і Макро асемблера, повинні бути дотриманінаступні три умови: У модулях Макро Асемблераповиннівикористовуватися угоди проімена, прийняті в C++. C++ і Макро Асемблерповинніспільновикористовувативідповідніфункції й іменазмінних у формі, прийнятної для C++. Для комбінуваннямодулів у виконуванупрограмупотрібновикористовуватиутіліту-компоновщик (TLINK, LINKтощо). Поверненнязначень Програми, яківикликаються з С++ і написані на Асемблеріможутьповертатизначення. Значенняфункційповертаються в такийспосіб: тип щоповертає значения  Де перебуваєзначення, щоповертається  unsignedchar  EAX  char  EAX  enum  EAX  unsignedshort  EAX  short  EAX  unsignedint  EAX  int  EAX  unsignedlong  EAX  long  EAX  float регістрвершини стека співпроцесора 8087 (ST(0))  double регістрвершини стека співпроцесора 8087 (ST(0))  longdouble регістрвершини стека співпроцесора 8087 (ST(0))  near*  EAX  Завдання Створити програму, яка реалізовує обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: ввід даних з клавіатури; виклик підпрограми обчислення виразу; вивід на екран результату обчислення виразу. Модуль безпосередніх обчислень – здійснює всі обчислення виразу і створюється мовою Assembler; Відлагодити та протестувати програму. Результати роботи програми продемонструвати викладачу. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї, а також результатів її роботи. Примітка. В лабораторній роботі використати взаємовиклики С – ASM – С. Для виводу результатів обчислень забезпечити виклик стандартної функції printf() із модуля ASM . 4 X=A4+C1-D4/5+K 45694   Код програми С – ASM main.cpp #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; extern "C" int calc(int a, char c, int d); extern "C" const int K; int main() {//X=A4+C1-D4/5+K 45694 int A,C,D; cout << "X=A4+C1-D4/5+K.\n"; cout << "Please, enter your numbers:\n"; cout << "A4 = "; cin >> A; cout << "C1 = "; cin >> C; cout << "D4 = "; cin >> D; cout << endl << "Result(asm) = " << calc(A,C,D); cout << endl << "Result(c++) = " << A+C-D/5+K; getch(); return 0; } calc.asm .386 .model flat public _K .data _K dd 45694h x dd 0 .code _calc proc ;X=A4+C1-D4/5+K 45694 public _calc push ebp mov ebp,esp mov ebx, [ebp+8];ebx ->A add ebx, [ebp+12];ebx -> A+C mov eax, [ebp+16];eax -> D mov ch,5 div ch;eax -> D/5 sub ebx, eax; ebx -> A+C-D/5 add ebx, _K mov eax, ebx pop ebp ret _calc endp END Результат виконання програми / Код програми С – ASM – С main.cpp #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; extern "C" void calc(int a, char c, int d); extern "C" const int K; int main() {//X=A4+C1-D4/5+K 45694 int A,C,D; cout << "X=A4+C1-D4/5+K.\n"; cout << "Please, enter your numbers:\n"; cout << "A4 = "; cin >> A; cout << "C1 = "; cin >> C; cout << "D4 = "; cin >> D; calc(A,C,D); cout << endl << "Result(c++) = " << A+C-D/5+K; getch(); return 0; } calc.asm .386 .model flat public _K .data _K dd 45694h text db "Result(asm) = %d",0 x dd 0 .code extern _printf:near _calc proc ;X=A4+C1-D4/5+K 45694 public _calc push ebp mov ebp,esp mov ebx, [ebp+8];ebx ->A add ebx, [ebp+12];ebx -> A+C mov eax, [ebp+16];eax -> D mov ch,5 div ch;eax -> D/5 sub ebx, eax; ebx -> A+C-D/5 add ebx, _K mov eax, ebx pop ebp push eax push offset text call _printf add esp,8 ret _calc endp END Результат виконання програми / Висновок:оволодів навиками створення програм,частини яких написані різними мовами програмування. Засвоїв правила взаємодії різних модулів.
Антиботан аватар за замовчуванням

01.04.2014 22:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!