global _dswap _dswap: push ebp ; ebp auf stack retten da c noch benoetigt mov ebp, esp ; stackpointer in ebp laden push edi ; register sichern push esi push ebx push eax push ecx push edx mov esi, [ebp+8] ; n nach ESI laden cmp esi,0 ; bei n <=0 soll nichts gemacht werden jle ende ; also sprung nach ende mov ecx, [ebp+12] ; vector_x* nach ecx laden sub ecx, 8 ; auf Komponente -1 setzen weil in schleife zuerst 8 addiert wird mov edx, [ebp+20] ; vector_y* nach edx laden sub edx, 8 mov edi, [ebp+16] ; incx nach edi laden schleife: mov eax, [ebp+24] ; incy nach eax laden lea ecx, [ecx+edi*8] ; adresse der zu verteuschenden x-komponente nach ecx lea edx, [edx+eax*8] ; adresse der zu verteuschenden y-komponente nach ecx mov eax, [ecx] ; vektor_x[n*incx] nach eax mov ebx, [edx] ; vector_y[n*incy] nach ebx mov [edx], eax ; eax nach vektor_y[n*incy] mov [ecx], ebx ; ebx nach vector_x[n*incx] add ecx, 4 ;mit den restlichen 32 bit genauso verfahren add edx, 4 mov ebx, [edx] mov eax, [ecx] mov [edx], eax mov [ecx], ebx sub ecx, 4 sub edx, 4 dec esi ; n-- jnz schleife ; n=0 abbruch der schleife ende: pop edx pop ecx pop eax pop ebx pop esi pop edi leave ret