|  | 
|  08-10-2004, 06:21 AM | #1 (permalink) | 
| Junkie Location: India | 
				
				[asm] exchange numbers in an array
			 im trying to make a prog in inline asm to find the median of an array of numbers my last lines are :"r="(median) :"r"(size),"r"(n) :"%eax"etcetc so %2 is the addr of my array with 'size' elements i want to sort the array and find the middle element so im using bubble sort: variables for bubble loop are i,j stored in eax,edx mov 0(%2,%%eax,4),%%ebx #ebx=n[i] mov 0(%2,%%edx,4),%%ecx #ecx=n[j] if n[i]>n[j] (i 1st tried) xchg %%ebx,%%ecx ##this will only exchange values in ecx,ebx,not in the array (then tried) mov %%ebx,0(%2,%%edx,4) #n[j]=value of n[i] taken above mov %%ecx,0(%2,%%eax,4) #similar (but this didnt work either) im taking the middle element like this: mov %1,%%eax sar $1,%%eax #divide eax by 2 mov 0(%2,%%eax,4),%0 #copy n[i/2] to median if anyone understood what i asked, plz reply... 
				__________________ Why did the Comp. Engineer get X-mas and Halloween mixed up? Because Oct(31) == Dec(25) Last edited by nukeu666; 08-10-2004 at 09:16 AM.. | 
|   | 
|  08-10-2004, 05:28 PM | #2 (permalink) | 
| I am Winter Born Location: Alexandria, VA | If you're trying to exchange two values, the best way to do that is three XOR operations.   xorl %eax, %edx xorl %ebx, %eax xorl %eax, %edx However, the thing to pay attention to is the list of legal operands: src dst idata reg idata mem reg reg mem reg reg mem So I think what you'd have to do is move both pieces of data from the array to registers, XOR them, then move them back. However, now that I put more thought into it, that might not answer your solution. I'll give it some more thought. 
				__________________ Eat antimatter, Posleen-boy! | 
|   | 
| Tags | 
| asm, divide, integers | 
| 
 |  |