; Tri d'une table d'entiers en ordre croissant ; Lecture des valeurs au terminal ; Tri de la table en ordre croissant ; Affichage des valeurs triées au terminal ; Philippe Gabrini Octobre 2005 TAILLE: .EQUATE 20 ;taille du vecteur 0..19 LF: .EQUATE 0x000A ;Line Feed ;int main(){ Tri: LDX 0,i ; indice de boucle de lecture STX indice1,d ; Lire: CPX TAILLE,i ; for(int indice = 0; indice <= 19; indice++){ BRGE Trier ; STRO msg1,d ; cout << "Donnez une valeur: "; LDX indice1,d ; avance dans vecteur ASLX ; 2 octets DECI vecteur,x ; cin >> vecteur[i]; LDX indice1,d ; avance dans vecteur ADDX 1,i ; STX indice1,d ; BR Lire ; }//for Trier: LDX TAILLE,i ; STX indice1,d ; Boucle1: LDX indice1,d ; for(int indice1 = 19; indice1 >=0; indice1 --){ SUBX 1,i ; STX indice1,d ; CPX 0,i ; BRLT Sortir ; STX indice2,d ; ASLX ; [ 2 octets par mot ] LDA vecteur,x ; [ AC= vecteur[indice1] ] Boucle2: LDX indice2,d ; for(int indice2 = i-1; indice2 >= 0;indice2--){ SUBX 1,i ; [indice2--;] STX indice2,d ; CPX 0,i ; BRLT FinBouc ; ASLX ; [ 2 octets par mot] CPA vecteur,x ; if(vecteur[indice2]>vecteur[indice1]){ BRGE PasEch ; STA temp1,d ; Echange(vecteur[indice1],vecteur[indice2]) LDA vecteur,x ; STA temp2,d ; vecteur[indice2] LDX indice1,d ; ASLX ; [ 2 octets par mot ] STA vecteur,x ; LDA temp1,d ; LDX indice2,d ; ASLX ; [ 2 octets par mot ] STA vecteur,x ; LDA temp2,d ; }//if PasEch: BR Boucle2 ; }//for FinBouc: BR Boucle1 ; }//for Sortir: CHARO LF,i ; cout << endl; LDX 0,i ; for(int i = 0; i <= 19; i++) STX indice1,d ; Sortie: ASLX ; [ 2 octets par mot ] DECO vecteur,x ; cout << vecteur[indice1] CHARO ' ',i ; << ' '; LDX indice1,d ; ADDX 1,i ; [ i++ ] STX indice1,d ; CPX TAILLE,i ; BRLT Sortie ; CHARO LF,i ; cout << endl STRO msg2,d ; << "Fin du traitement" CHARO LF,i ; << endl; STOP ; return 0; ;}//main msg1: .ASCII "Donnez une valeur: \x00" msg2: .ASCII "Fin du traitement\x00" indice1: .WORD 0 indice2: .WORD 0 temp1: .WORD 0 temp2: .WORD 0 vecteur: .BLOCK 40 ;int vecteur[TAILLE] .END