Problem podany jak powyżej. Moduł główny stworzony jest w C++, a moduł zewnętrzny w assemblerze, ma on za zadanie zwrócić średnią z tablicy. Za nic nie potrafie dobrze odnieść się do poszczególnych parametrów. Kod się kompiluje.
Kod z C++ (borland C++):
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
extern "C" double srednia(double *,int);
extern "C" double il_znakow();
int main()
{
int r;
cout << "\t Obliczanie sredniej wartosci tablicy. \nPodaj rozmiar tablicy: ";
cin >> r;
double *tab = new double [r];
for( int i=0;i<r;i++)
{
cout << "Element " << i+1 << ": ";
cin >> tab[i];
}
float srednia1 = srednia(tab,r);
printf("%e", srednia1, "\n");
return 0;
}
a tutaj assembler (Turbo Assembler w Dosie):
.MODEL SMALL, C
.386
PUBLIC SREDNIA
.DATA
suma DD 0.0
dzielnik DD ?
pom DD ?
srednia DD ?
.CODE
START:
SREDNIA PROC
finit ; definicja koprocesora
push ebp
mov ebp,esp
xor ecx, ecx
xor eax, eax
mov ecx, [ebp+4] ; pobranie wielkosci tablicy
mov dzielnik, ecx ; zapisanie wielkosci tablicy jako dzielnik
fld suma ; zapisanie sumy na szycie koprocesora
DODAWAJ:
mov eax,[ebp+6] ; wyraz tablicy
mov pom, eax
fadd pom ; dodawanie elementow tablicy do sumy
inc ebp ; dostanie sie do kolejnego wyrazu tablicy ???
loop DODAWAJ
fdiv dzielnik ; podzielenie st0 przez ilosc elementow
fst srednia
mov eax, srednia
mov esp,ebp
pop ebp
ret
SREDNIA ENDP
.STACK 100h
END START