![]() |
[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... |
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. |
my program finally ran...why..i dunno
maybe coz of compiler/OS/processor version quirks |
All times are GMT -8. The time now is 12:29 AM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Optimization by vBSEO 3.6.0 PL2
© 2002-2012 Tilted Forum Project