1 |
|
---|
2 |
|
---|
3 |
|
---|
4 | ****************************************
|
---|
5 | * *
|
---|
6 | * T R I 2 EXG *
|
---|
7 | * *
|
---|
8 | ****************************************
|
---|
9 | * *
|
---|
10 | * Programme de tri en mémoire centrale *
|
---|
11 | * appel par le BASIC par USR(0) *
|
---|
12 | *--------------------------------------*
|
---|
13 | * *
|
---|
14 | * Manuel de l'assembleur 6809 *
|
---|
15 | * du TO7/TO7-70 page 165 *
|
---|
16 | * *
|
---|
17 | ****************************************
|
---|
18 |
|
---|
19 |
|
---|
20 | ORG $7FBD
|
---|
21 |
|
---|
22 | LDA #100 Nb d'éléments à
|
---|
23 | LDB #100 trier = 100 seront
|
---|
24 | * contenus dans les accumulateurs A et B
|
---|
25 |
|
---|
26 | LDY 2,X Le paramètre trans
|
---|
27 | * mis au langage machine est placé dans
|
---|
28 | * les 2 octets après l'adresse contenue
|
---|
29 | * dans X.Y va contenir VARPTR(A(0)).Le
|
---|
30 | * programme démarre avec Y pointant sur
|
---|
31 | * le 1er élément A(0) du tableau A(I).
|
---|
32 |
|
---|
33 | SUITE2 PSHS D Sauvegarde de D
|
---|
34 |
|
---|
35 | LEAX 2,Y On commande à X de
|
---|
36 | * pointer sur le 2ème élément du tableau
|
---|
37 | * soit A(1), noter que les entiers sont
|
---|
38 | * rangés en mémoire sur 2 octets.
|
---|
39 |
|
---|
40 | SUITE1 DEC ,S Décrémente l'octet
|
---|
41 | * au sommet de la pile.Celui-ci équivaut
|
---|
42 | * au nombre de passages dans la boucle
|
---|
43 | * SUITE1.
|
---|
44 |
|
---|
45 | BEQ PASSE (+21)On compare le
|
---|
46 | LDD ,X++ 2nd élem. de A(I)
|
---|
47 | * pointé par X et le
|
---|
48 | CMPD ,Y 1er (pointé par Y)
|
---|
49 | BHS SUITE1 (-11)Oui si le 2nd
|
---|
50 | * > ou = au 1er alors retour à SUITE1
|
---|
51 | * pour comparer le 3ème et le 1er.
|
---|
52 |
|
---|
53 | PSHS D Si non (2nd<1er)
|
---|
54 | LDD ,Y on procède à leur
|
---|
55 | STD ,--X échange.Nous avons
|
---|
56 | PULS D la certitude à la
|
---|
57 | STD ,Y fin de la boucle
|
---|
58 | LEAX 2,X SUITE1 que A(0)
|
---|
59 | BRA SUITE1 (-25)est l'élément
|
---|
60 | * minimum de A(I).
|
---|
61 |
|
---|
62 | PASSE LEAY 2,Y Y va contenir l'
|
---|
63 | PULS D adresse de A(1) et
|
---|
64 | DECB un retour à SUITE2
|
---|
65 | EXG B,A est programmé.Pour
|
---|
66 | CMPB #1 comparer A(1) avec
|
---|
67 | BNE SUITE2 (-40)les éléments
|
---|
68 | * suivants; un échange sera effectué à
|
---|
69 | * chaque fois que l'on aura trouvé un
|
---|
70 | * élément plus petit que A(1).
|
---|
71 |
|
---|
72 | RTS
|
---|
73 | END
|
---|
74 |
|
---|
75 | * Ainsi après deux passages de la boucle
|
---|
76 | * SUITE2, A(0) et A(1) contiendront les
|
---|
77 | * deux plus petites valeurs de A(I), et
|
---|
78 | * ceci dans l'ordre croissant.
|
---|
79 | * Quand le programme arrivera à la fin,
|
---|
80 | * les 100 éléments seront rangés et la
|
---|
81 | * ligne BASIC 60 nous en donnera la
|
---|
82 | * confirmation.
|
---|
83 | * NB: La variable Z est une var. fictive
|
---|
84 | * dont la valeur est sans importance
|
---|
85 | * puisque l'assembleur n'a aucun para-
|
---|
86 | * mètre à retourner au BASIC.
|
---|