#include void copie(int t[/*n*/], int u[/*n*/], int n) { while(n--) *u++=*t++; } /* copie: // r0 r1 r2 r3 r4 // t u n 1 x movimm16 r3,1 // 1 debut: sub r2,r3,r2 // n-- jc fin: load r0,r4 // x=*t store r1,r4 // *u=x add r0,r3,r0 // t++ add r1,r3,r1 // u++ jmp debut fin: ret */ void fusion(int t[/*n*/], int u[/*m*/], int v[/*n+m*/], int n, int m) { while(n && m) { int x=*t, y=*u; if(x>1 je fin // if(!n) return; loadimm16 r3,1 store r128,r129 // push r129 add r128,r3,r128 store r128,r130 // push r130 add r128,r3,r128 mov r0,r129 // t0=t mov r1,r130 // nm mov r2,r1 // n call tri_fusion // (t,n) shrimm r130,1,r2 // n=nm>>1 add r129,r2,r0 // u=t+n sub r130,r2,r1 // m=nm-n call tri_fusion // (u,m) shrimm r130,1,r2 // n=nm>>1 sub r130,r2,r5 // m=nm-n add r129,r2,r6 // u=t+n mov r129,r0 // t mov r128,r7 // int v[nm],*w=v add r128,r130,r128// on alloue v dans la pile l1:and r2,r2,r2 // n je l4 // if(!n) goto l4 and r5,r5,r5 // m je l4 // if(!m) goto l4 load r0,r8 // x=*t load r6,r9 // y=*u sub r8,r9,r4 // x-y jl l2 // if(x>10)+z)&1023; aff(t,n); tri_fusion2(t,n); aff(t,n); return 0; }