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