DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 2 з дисципліни: “Системне програмування” на тему: “Змішане програмування на мовах C та Асемблер” Мета лабораторної роботи Оволодіти навичками створення програм, частини яких написані різними мовами програмування. Засвоїти правила взаємодії між програними модулями різних мов програмування. Теоретичні відомості Труднощі опису зв’язку програм написаних мовою C і асемблерних програм полягає в тому, що різні версії мови C мають різні угоди з виклику функцій та передавання їм параметрів. Для більш точної інформації варто користатися посібником з наявної версії мови C. Індивідуальне завдання 1. Створити дві програми. Перша програма реалізує взаємовиклики С – ASM та здійснює обчислення, заданого виразу, згідно варіанту (Табл. 2.3). Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Константа передається через спільну пам’ять. Основний модуль – створюється мовою С. Він повинен забезпечувати: • ввід даних з клавіатури; • виклик підпрограми обчислення виразу; • вивід на екран результату обчислення виразу. Модуль безпосередніх обчислень – здійснює всі обчислення виразу. Створюється мовою Assembler. 2. Друга програма реалізує взаємовиклики С – ASM – С та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: • ввід даних з клавіатури; • виклик підпрограми обчислення виразу; Модуль безпосередніх обчислень – здійснює всі обчислення і вивід на екран результату обчислення виразу викликом стандартної функції printf() . Створюється мовою Assembler. 29. X=K-B1*4+D2-F2/2 12A0C029  А, В, С, D, E, F - знакові цілі числа, довжиною в байтах, згідно з індексом, значення константи К подано у 16-му форматі. Код програми Перша програма (C – Asm) main.cpp #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <conio.h> extern "C" int calc(int, int, int); extern "C" const int K = 0x12A0C029; void main() { printf("X = %d - B * 4 + D - F / 2\n\nB = [-128; 127]\nD = [-32768; 32767]\nF = [-32768; 32767]\n\n", K); int B, D, F; do { printf("B = "); scanf("%d", &B); } while (B < -128 || B > 127); do { printf("D = "); scanf("%d", &D); } while (D < -32768 || D > 32767); do { printf("F = "); scanf("%d", &F); } while (F < -32768 || F > 32767); printf("\nC: X = %d\nAsm: X = %d\n", K - B * 4 + D - F / 2, calc(B, D, F)); _getch(); } calc.asm .686 .model flat, c .data extrn K : dword .code calc proc push ebp mov ebp, esp mov al, byte ptr [ebp+8] cbw cwde sal eax, 2 ; eax = B * 4 mov edx, K sub edx, eax ; edx = K - B * 4 mov ax, word ptr [ebp+12] cwde add eax, edx mov ebx, eax ; ebx = K - B * 4 + D mov ax, word ptr [ebp+16] cwde cdq mov ecx, 2 idiv ecx ; eax = F / 2 sub ebx, eax mov eax, ebx ; eax = K - B * 4 + D - F / 2 pop ebp ret calc endp end Друга програма (C – Asm – C) main.cpp #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <conio.h> extern "C" void calc(int, int, int); extern "C" const int K = 0x12A0C029; void main() { printf("X = %d - B * 4 + D - F / 2\n\nB = [-128; 127]\nD = [-32768; 32767]\nF = [-32768; 32767]\n\n", K); int B, D, F; do { printf("B = "); scanf("%d", &B); } while (B < -128 || B > 127); do { printf("D = "); scanf("%d", &D); } while (D < -32768 || D > 32767); do { printf("F = "); scanf("%d", &F); } while (F < -32768 || F > 32767); printf("\nC: X = %d\n", K - B * 4 + D - F / 2); calc(B, D, F); _getch(); } calc.asm .686 .model flat, c .data result db "Asm: X = %d", 13, 10, 0 extrn K : dword .code extrn printf : proc calc proc push ebp mov ebp, esp mov al, byte ptr [ebp+8] cbw cwde sal eax, 2 ; eax = B * 4 mov edx, K sub edx, eax ; edx = K - B * 4 mov ax, word ptr [ebp+12] cwde add eax, edx mov ebx, eax ; ebx = K - B * 4 + D mov ax, word ptr [ebp+16] cwde cdq mov ecx, 2 idiv ecx ; eax = F / 2 sub ebx, eax ; ebx = K - B * 4 + D - F / 2 pop ebp push ebx push offset result call printf add esp, 8 ret calc endp end Результат виконання програми / / / / Висновок Я оволодів навичками створення програм, частини яких написані різними мовами програмування та засвоїв правила взаємодії між програними модулями різних мов програмування.
Антиботан аватар за замовчуванням

07.05.2017 14:51

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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