Міністерство освіти і науки
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Звіт
до лабораторної роботи № 3
з дисципліни: “Системне програмування”
на тему: змішане програмування на мовах с та асемблер
Варіант - 19
ЗМІШАНЕ ПРОГРАМУВАННЯ НА МОВАХ С ТА АСЕМБЛЕР
Мета: Оволодіти навиками створення програм частини яких написані різними мовами програмування. Засвоїти правила взаємодії між різними програмними модулями
ТЕОРИТИЧНІ ВІДОМОСТІ:
/ЗАВДАННЯ
/
/
ВАРІАНТ ЗАВДАННЯ:
№
Вираз
К
19
A2 * 4 + C1 – D2/2 + K
4019
ТЕКСТИ ПРОГРАМ:
calc1.asm
.386
.model flat,c
.data
.code
calc PROC
push ebp ; збереження вершини стеку для відновлення
mov ebp,esp
;//////////////////////////////////////
mov eax, dword ptr [ebp+8] ;дістаємо A
mov ecx, 4
mul ecx
add eax, dword ptr [ebp+12] ;дістаємо C
mov ecx, eax
mov eax, dword ptr [ebp+16] ;дістаємо D
mov ebx, 2
mov edx, 0
div ebx ;операція D/K
sub ecx, eax
mov eax, ecx
add eax, dword ptr [ebp+20] ;дістаємо константу К
;//////////////////////////////////////
pop ebp ; відновлення стека
ret
calc ENDP
END
main1.asm
#include <stdio.h>
extern "C" int calc(short, char, short, int);
void main()
{
const int K = 4019;
short A, D;
char C;
printf("Enter numbers:\n");
printf("A = "); scanf("%hd", &A);
printf("C = "); scanf("%hhd", &C);
printf("D = "); scanf("%hd", &D);
printf("A * 4 + C - D/2 + K = %d\n", calc(A, C, D, K));
}
Результат виконання 1 програми:
/
calc2.asm
.386
.model flat,c
.data
text BYTE "Result = %d", 10, 13, 0
.code
EXTRN printf : proc ;підключення функції printf
calc PROC
push ebp ; збереження вершини стеку для відновлення
mov ebp,esp
;//////////////////////////////////////
mov eax, dword ptr [ebp+8] ;дістаємо A
mov ecx, 4
mul ecx
add eax, dword ptr [ebp+12] ;дістаємо C
mov ecx, eax
mov eax, dword ptr [ebp+16] ;дістаємо D
mov ebx, 2
mov edx, 0
div ebx ;операція D/K
sub ecx, eax
add ecx, dword ptr [ebp+20] ;дістаємо константу К
;//////////////////////////////////////
lea ebx, text
push ecx
push ebx
call printf ;виклик printf (ebx, ecx)
;//////////////////////////////////////
pop ebx
pop ecx
pop ebp
ret
calc ENDP
END
main2.asm
#include <stdio.h>
extern "C" int calc(short, char, short, int);
void main()
{
const int K = 4019;
short A, D;
char C;
printf("Enter numbers:\n");
printf("A = "); scanf("%hd", &A);
printf("C = "); scanf("%hhd", &C);
printf("D = "); scanf("%hd", &D);
calc(A, C, D, K);
}
Результат виконання 2 програми:
/
ВИСНОВОК:
На даній лабораторній роботі я оволодів навиками створення програм частини яких написані різними мовами програмування. Засвоїти правила взаємодії між різними програмними модулями.