source: thomson/code/3rdparty/sources4-divers/TRI2EXG.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.6 KB
Line 
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
33SUITE2 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
40SUITE1 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
62PASSE 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.
Note: See TracBrowser for help on using the repository browser.