[C++] Funkcja swap w asemblerze

0

Witam,

Mam napisaną funkcję wymiany dwóch liczb typu int (jako wstawka asemblera). Jest pewien problem:
w funkcji zmienne wymieniają dane, ale po wyjściu z funkcji zmienne pozostają niezmienione. Dla
rozjaśnienia podaję kod:

void swap(int *x, int *y)
{
	__asm
	{
		mov eax, [x]
		mov ebx, [y]
		mov [x], ebx
		mov [y], eax
	}
	cout << *x << " " << *y << endl; //tutaj: x = 10, a y = 15 - zamiana nastąpiła - tak jak być powinno
}

int main()
{
	int x = 15, y = 10;
	swap(&x, &y);
	cout << x << " " << y << endl;  //tutaj: x = 15, a y = 10 - zamiana nie nastąpiła, dlaczego?
	return 0;
}

Teraz pytanie: dlaczego tak się dzieje, co robię źle?

Z góry dzięki za odp.

0

#include<iostream>
#include<cstido>
#include<cmath>
#include<conio.h>

using namespace std;
int main () {
int i, j , zakres , b ;
bool tablica [100] ;
cout<< "podaj gorny zakres, max. 99 : " << endl ;
cin>>zakres ;
b=sqrt(zakres) ;

for (i=2 ; i<zakres+1 ; i++) tablica [i]=true ; 

for (i=2 ; i<=b ; i++)
if (tablica[i] !=false)
for (j=i+i ; j<zakres+1 ; j=j+i) tablica[j]=false;
cout<<"liczby pierwsze z zakresu od 1 do " <<zakres<< "to " <<endl ;
for (i=2; i<zakres+1; i++)
if (tablica [i] != false) cout<<i<< "  " ;
getch();
return 0;

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1