source: thomson/code/3rdparty/sources4-divers/TRI2.ASM@ ceffc47

main
Last change on this file since ceffc47 was ceffc47, checked in by Adrien Destugues <pulkomandy@…>, 10 years ago

Add that collection of 3rdparty source I had lying on my disk for some time...

git-svn-id: svn://localhost/thomson@51 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

  • Property mode set to 100644
File size: 2.7 KB
Line 
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
34SUITE2 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
41SUITE1 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
63PASSE 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.
Note: See TracBrowser for help on using the repository browser.