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

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

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

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

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

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

Міністерство освіти і науки, молоді та спорту України Національний університет “Львівська політехніка” / Кафедра ЕОМ Лабораторна робота №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 тощо). . Завдання: Створити дві програми. Прша програма реалізує взаємовиклики С – ASM та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: ввід даних з клавіатури; виклик підпрограми обчислення виразу; вивід на екран результату обчислення виразу. Модуль безпосередніх обчислень – здійснює всі обчислення виразу. Створюється мовою Assembler. Друга програма реалізує взаємовиклики С – ASM – С та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох модулів, передача параметрів між якими здійснюється через стек. Основний модуль – створюється мовою С. Він повинен забезпечувати: ввід даних з клавіатури; виклик підпрограми обчислення виразу; Модуль безпосередніх обчислень – здійснює всі обчислення і вивід на екран результату обчислення виразу викликом стандартної функції printf() . Створюється мовою Assembler. Варіант №22 : 22 X=K-B1-C1-D2/2+4*B1 45781022  Виконання роботи : Коди програм : # include <stdio.h> extern "C" int calc(char B, char C, short D, int K); int K = 0x45781022; char B,C; short D; int Result; void main() { printf("Please enter your numbers \n"); printf("B = "); scanf("%d",&B); printf("C = "); scanf("%d",&C); printf("D = "); scanf("%d",&D); Result = calc(B,C,D,K); printf("Result = %ld", Result); }  .586 .model flat public _calc .data .code _calc proc push ebp mov ebp,esp mov eax,[ebp+16] shr eax,01 mov ebx,[ebp+8] shl ebx,02 sub ebx,eax sub ebx,[ebp+12] sub ebx,[ebp+8] mov eax,[ebp+20] add eax,ebx pop ebp ret _calc endp END      / # include <stdio.h> extern "C" int calc(char B, char C, short D, int K); int K = 0x45781022; char B,C; short D; int Result; void main() { printf("Please enter your numbers \n"); printf("B = "); scanf("%d",&B); printf("C = "); scanf("%d",&C); printf("D = "); scanf("%d",&D); Result = calc(B,C,D,K); }  .586 .model flat,C public calc .data PrintRezult BYTE "Result is %d",10,13,0 .code printf PROTO printlist: VARARG calc proc push ebp mov ebp,esp mov eax,[ebp+16] shr eax,01 mov ebx,[ebp+8] shl ebx,02 sub ebx,eax sub ebx,[ebp+12] sub ebx,[ebp+8] mov eax,[ebp+20] add eax,ebx invoke printf, ADDR PrintRezult, eax pop ebp ret calc endp END     / Висновок : на даній лабораторній роботі я оволодів навиками створення програм, частини яких написані різними мовами програмування. Засвоїв правила взаємодії різних модулів
Антиботан аватар за замовчуванням

03.03.2013 12:07

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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