codice:
void main()
{
int N=6;
int Perm[4320] = {1,2,3,4,5,6};
int Num;
_asm
{
XOR ESI,ESI
MOV ECX,N
lpSave:
MOV EAX,Perm[ESI*4]
PUSH EAX
INC ESI
DEC ECX
JNZ lpSave
MOV EDI,N
PUSH EDI
MOV Num,0
lpMain:
INC Num
MOV ESI,N
SUB ESI,2
lpOne:
CMP ESI,0
JL noMore
MOV EAX,Perm[ESI*4]
CMP EAX,Perm[ESI*4+4]
JLE chkOne
DEC ESI
JMP lpOne
chkOne:
MOV EDI,N
DEC EDI
lpTwo:
MOV EAX,Perm[ESI*4]
MOV ECX,Perm[EDI*4]
CMP EAX,ECX
JL swpOne
DEC EDI
JMP lpTwo
swpOne:
MOV Perm[ESI*4],ECX
MOV Perm[EDI*4],EAX
MOV ECX,ESI
INC ECX
XOR EDI,EDI
lpThr:
MOV EAX,N
ADD EAX,ESI
SAR EAX,1
INC EAX
CMP ECX,EAX
JL nolpMain
XOR ESI,ESI
POP EDI
MOV ECX,N
cpGrp:
MOV EAX,Perm[ESI*4]
MOV Perm[EDI*4],EAX
INC ESI
INC EDI
DEC ECX
JNZ cpGrp
PUSH EDI
JMP lpMain
nolpMain:
MOV EAX,N
SUB EAX,EDI
MOV EDX,Perm[EAX*4-4]
PUSH EDX
MOV EDX,Perm[ECX*4]
MOV Perm[EAX*4-4],EDX
POP EDX
MOV Perm[ECX*4],EDX
INC ECX
INC EDI
JMP lpThr
noMore:
POP EDI
MOV EDI,N
MOV ECX,N
lpRestore:
POP EAX
MOV Perm[EDI*4-4],EAX
DEC EDI
DEC ECX
JNZ lpRestore
}
int i,j,k;
printf("Permutazioni dei primi %d numeri naturali \n",N);
for (i=k=0;i<Num;i++)
{
for(j=0;j<N;j++)
printf("%3d",Perm[k++]);
printf("\n");
}
}
Con 6 elementi le permutazioni sono 6! ovvero 720 e dunque gli elementi devono essere 6*720 cioè 4320