36942

Оволодіти навиками створення програм, частини яких написані різними мовами програмування. Засвоїти правила взаємодії різних модулів

Лабораторная работа

Информатика, кибернетика и программирование

Звичайно доступ наприклад до двох параметрів переданих через стек здійснюється в такий спосіб: PUSH EBP MOV EBPESP MOV EX[EBP8] MOV EDX[EBP12] . POP EBP RET Деякі версії мови C розрізняють великі і малі букви тому ім'я асемблерного модуля повинне бути представлено в тому ж символьному регістрі який використовують для посилання Cпрограми.code _clc proc push ebp mov ebpesp mov ex[ebp16] shr ex01 mov ebx[ebp8] shl ebx02 sub ebxex sub ebx[ebp12] sub ebx[ebp8] mov ex[ebp20] dd exebx pop ebp ret _clc endp END ...

Украинкский

2013-09-23

169.07 KB

3 чел.

Міністерство освіти і науки, молоді та спорту України

Національний університет “Львівська політехніка”

Кафедра ЕОМ

Лабораторна робота №2
дисципліни:”
Системне програмування

Виконав:

Ст.. гр. –КІ-32

Приймак Д.В.

Перевірив:

 Олексів М.В.

                      

Львів – 2011


Мета: оволодіти навиками створення програм, частини яких написані різними мовами програмування. Засвоїти правила взаємодії різних модулів 

Теоретичні відомості :

Труднощі опису зв'язку програм мовою C і асемблерних програм полягає в тому, що різні версії мови C мають різні угоди про зв'язки і для більш точної інформації варто користатися посібником з наявної версії мови C.

  1.  Більшість версій мови C забезпечують передачу параметрів через стек у зворотній (у порівнянні з іншими мовами) послідовності. Звичайно доступ, наприклад, до двох параметрів, переданих через стек, здійснюється в такий спосіб:

PUSH EBP

MOV EBP,ESP

MOV EAX,[EBP+8]

MOV EDX,[EBP+12]

...

POP EBP

RET

  1.  Деякі версії мови C розрізняють великі і малі букви, тому ім'я асемблерного модуля повинне бути представлено в тому ж символьному регістрі, який використовують для посилання C-програми.
  2.  У деяких версіях мови C потрібно, щоб асемблерні програми, що змінюють регістри EDI і ESI, записували їхній вміст у стек при вході і відновлювали ці значення зі стека при виході.
  3.  Ассемблерні програми повинні повертати значення, якщо це необхідно, у регістрі EAX (подвійне слово) чи в регістровій парі EDX:EAX (8 слів).
  4.  Для деяких версій мови C, якщо ассемблерна програма встановлює прапор DF, те вона повинна скинути його командою CLD перед поверненням.

Щоб скомпонувати разом модулі C++ і Макро асемблера, повинні бути дотримані наступні три умови:

  1.  У модулях Макро Асемблера повинні використовуватися угоди про імена, прийняті в C++.
  2.  C++ і Макро Асемблер повинні спільно використовувати відповідні функції й імена змінних у формі, прийнятної для C++.
  3.  Для комбінування модулів у виконувану програму потрібно використовувати утіліту-компоновщик (TLINK, LINK тощо).

.

Завдання:

  1.  Створити дві програми. Прша програма реалізує взаємовиклики С – ASM та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох  модулів, передача параметрів між якими здійснюється через стек.

Основний модуль – створюється мовою С.

Він повинен забезпечувати:

  1.  ввід даних з клавіатури;
  2.  виклик підпрограми обчислення виразу;
  3.  вивід на екран результату обчислення виразу.

Модуль безпосередніх обчислень – здійснює всі обчислення виразу. Створюється  мовою Assembler.

  1.  Друга програма реалізує взаємовиклики С – ASM – С та здійснює обчислення, заданого виразу, згідно варіанту. Програма повинна складатися з кількох  модулів, передача параметрів між якими здійснюється через стек.

Основний модуль – створюється мовою С.

Він повинен забезпечувати:

  1.  ввід даних з клавіатури;
  2.  виклик підпрограми обчислення виразу;

Модуль безпосередніх обчислень – здійснює всі обчислення і вивід на екран результату обчислення виразу викликом стандартної функції 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

Висновок : на даній лабораторній роботі я оволодів навиками створення програм, частини яких написані різними мовами програмування. Засвоїв правила взаємодії різних модулів


 

А также другие работы, которые могут Вас заинтересовать

50057. ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ МАХОВОГО КОЛЕСА МЕТОДОМ КОЛЕБАНИЙ 286.5 KB
  Цель работы: Ознакомление с методом измерения моментов инерции тел обладающих осевой симметрией. Основные теоретические положения к данной работе (основополагающие утверждения: формулы, схематические рисунки)
50058. ВЫБОР СПЕЦОДЕЖДЫ, СПЕЦОБУВИ И ДРУГИХ СРЕДСТВ ИНДИВИДУАЛЬНОЙ ЗАЩИТЫ 108.5 KB
  Изучить Правила обеспечения работников специальной одеждой специальной обувью и другими средствами индивидуальной защиты принятыми Постановлением Министерства труда и социального развития РФ от 18 декабря 1998 г. Составить личную карточку учета выдачи средств индивидуальной защиты по представленной форме в соответствии с заданием. Типовые отраслевые нормы бесплатной выдачи специальной одежды специальной обуви и других средств индивидуальной защиты выдаются преподавателем или берутся из справочника по охране труда в сельском хозяйстве...
50059. Рефрактометр Рэлея 260.5 KB
  Элемент щели dx посылает в направлении φ волну с амплитудой пропорциональной dx. При этом будем считать что угол φ достаточно мал sin φ ≈ φ и что в правой щели искусственно создана дополнительная разность хода Δ одинаковая для всех ее элементов это позволит написать смещение интерференционных полос используемое для измерений в интерферометреРэлея. Интегрируя 3 найдем 4 где а расстояние между щелями b ширина щели. Первый из них описывает распределение интенсивности в дифракционной картине Фраунгофера от одной щели.
50060. Техніка пересувань футболістів у нападі та захисті 21 KB
  Футболіст пересувається короткими кроками і завжди повинен бути готовий до миттєвої зупинки або зміни темпу й напрямку руху. Найважливіше під час вистрибування вибрати відповідне місце відштовхування врахувавши швидкість та висоту руху мяча. Ефективний спосіб пересувань зміна напрямку руху. Для того щоб змінити напрямок руху з мінімальною втратою часу футболісти застосовують повороти: переступанням стрибком на опорній нозі.
50062. ОПРЕДЕЛЕНИЕ ХАРАКТЕРИСТИК РАСПРЕДЕЛЕНИЯ ПО ЭКСПЕРИМЕНТАЛЬНЫМ ДАННЫМ 110 KB
  Разность наибольшего и наименьшего членов ряда R = Xn X1 называется РАЗМАХОМ эмпирического распределения а число наблюдений n объемом выборки. Функцией распределения случайной величины для данного статистического материала ВЫБОРКИ будет частота события X где X любое возможное значение случайной величины . Значение статистической функции распределения легко вычислить подсчитав число опытов m в которых величина приняла значение меньшее чем X и разделив...
50063. Численное решение обыкновенных дифференциальных уравнений 957.5 KB
  При выполнении данной лабораторной работы были получены теоретические и практические навыки в приближенном решении дифференциальных уравнений первого порядка с начальным условием методами Эйлера, Эйлера (уточнённый), Рунге-Кутты, Адамса, Милна. Сравнивая полученные результаты вычислений с истинным значением можно сделать вывод...