diff options
author | Pixel <> | 2001-04-17 00:42:20 +0000 |
---|---|---|
committer | Pixel <> | 2001-04-17 00:42:20 +0000 |
commit | d3050fa05ca0bc9231eca96bcbf62d1ec60c9f90 (patch) | |
tree | 9ea393da66cf3d9809afb80af44f755fb36d46c3 /samples | |
parent | b77b22b3bd99c03b032cbd47465b1cbe34821120 (diff) |
OUAAAAAAAAAAAAAAAAA
Diffstat (limited to 'samples')
-rw-r--r-- | samples/rechcara.s | 35 | ||||
-rw-r--r-- | samples/recherche.s | 38 | ||||
-rw-r--r-- | samples/sommeentiers.s | 31 |
3 files changed, 48 insertions, 56 deletions
diff --git a/samples/rechcara.s b/samples/rechcara.s index c4747c3..4eeeef8 100644 --- a/samples/rechcara.s +++ b/samples/rechcara.s @@ -1,26 +1,25 @@ -;Recherche du caractere 0DH dans une chaine de caracteres +;Recherche du caractere 0x0D dans une chaine de caracteres .DATA -CHAINE DS "ceci est un test de chaine de caractere de quatre vingt caracteres akdijhgffddss" -MSGPASTROUVE DS "Le caractere 0DH n'a pas été trouvé dans la chaine" -MSGTROUVE DS "Le caractere 0DH a été trouvé dans la chaine" -ZERO DB 0 +CHAINE DS "ceci est un test de chaine\r de caractere quelconque..." +MSGPASTROUVE DS "Le caractere 0x0D n'a pas été trouvé dans la chaine\n" +MSGTROUVE DS "Le caractere 0x0D a été trouvé dans la chaine à l'index " +MSGENDL DS "\n" .TEXT .START - MOV R1,ZERO; - MOV R3,80; - MOV R2,0x0D; - MOV R5,ZERO; -BOUCLE: MOV R4,CHAINE[R1]; - JE R4,R2,TROUVE; - ADD R1,R1,1; - SUB R3,R3,1; - JNE R3 R5 BOUCLE; - MOV, [0xffffff04],MSGPASTROUVE; - JMP FIN; -TROUVE: MOV, [0xffffff04],MSGTROUVE; + MOV R1, R0 ; R1 est le compteur + MOV R2, 0x0D ; R2 est l'élement recherché + +BOUCLE: MOV R4,CHAINE[R1] ; On lit un caractère. + JE R4, R2, TROUVE + ADD R1, 1 ; On incrément le pointeur + JNE R4, R0, BOUCLE ; C'était le caractère 0? On sort + MOV, [0xffffff04], MSGPASTROUVE; + JMP FIN +TROUVE: MOV, [0xffffff04], MSGTROUVE; + MOV, [0xffffff06], R1 + MOV, [0xffffff04], MSGENDL FIN: HALT -
\ No newline at end of file diff --git a/samples/recherche.s b/samples/recherche.s index 46b979e..78db501 100644 --- a/samples/recherche.s +++ b/samples/recherche.s @@ -1,26 +1,24 @@ .DATA -TAB1 DS "efghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxywNNEX" -TAB2 DS "aafghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxy" -MSGTROUVE DS "TAB1 et TAB2 ont un élément en commun" -MSGPASTROUVE DS "TAB1 et TAB2 n'ont pas d'élément en commun" -ZERO DB 0 +TAB1 DS "efghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghXjklynoparstuvzxyw" +TAB2 DS "aafghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefghijklynoparstuvzxywqbcdefgXijklynoparstuvzxy" +MSGTROUVE DS "TAB1 et TAB2 ont un élément en commun à l'index " +MSGPASTROUVE DS "TAB1 et TAB2 n'ont pas d'élément en commun\n" +ENDLINE DS "\n" .TEXT .START - MOV R5, 101 ;R5 est le compteur - MOV R1, TAB1 ;TAB1 est un tableau de 100 octets de type char - MOV R2, TAB2 ;TAB2 est un tableau de 100 octets de type char -BOUCLE: SUB R5 R5 1 - MOV R6, [R1] - MOV R7, [R2] ;decrementation du compteur - JE R6 R7 TROUVE ;test si TAB1[i]=TAB2[i] =>jmp trouvé - ADD R1 R1 1 ;incrementation de R1 (element suivant du tableau TAB1) - ADD R2 R1 1 - MOV R8, ZERO ;incrementation de R2 (element suivant du tableau TAB2) - JNE R5 R8 BOUCLE ;si compteur !=0 on refait la boucle - MOV, [0xffffff04], MSGPASTROUVE ;il n'y a pas de d'éléments identiques a une position i => on place dans R3 le msg a afficher - JMP FIN ;jmp a l'affichage -TROUVE: MOV, [0xffffff04], MSGTROUVE ;il y a une paire d'éléments identiques => on place dans R3 le msg a afficher + MOV R4, TAB2 ; R4 est la taille max + SUB R4, TAB1 + MOV R5, R0 ; R5 est le compteur +BOUCLE: MOV R6, TAB1[R5] ; on charge les lettres + MOV R7, TAB2[R5] ; + JE R6 R7 TROUVE ; test si TAB1[i]=TAB2[i] =>jmp trouvé + ADD R5, 1 ; incrémentation du compteur + JNE R5 R4 BOUCLE ; si compteur !=taille max on refait la boucle + MOV, [0xffffff04], MSGPASTROUVE ; il n'y a pas de d'éléments identiques a une position i => on place dans R3 le msg a afficher + JMP FIN ; jmp a l'affichage +TROUVE: MOV, [0xffffff04], MSGTROUVE ; il y a une paire d'éléments identiques => on place dans R3 le msg a afficher + MOV, [0xffffff06], R5 + MOV, [0xffffff04], ENDLINE FIN: HALT - RET 4
\ No newline at end of file diff --git a/samples/sommeentiers.s b/samples/sommeentiers.s index e8b6926..0580e77 100644 --- a/samples/sommeentiers.s +++ b/samples/sommeentiers.s @@ -1,28 +1,23 @@ ;Ce programme va calculer la somme des 97 premiers entiers .DATA MSG DS "La somme des " -MSG2 DS " premiers entiers est égale à" -N DB 97 -ZERO DB 0 -SOMME DB 4 +MSG2 DS " premiers entiers est égale à " +N DD 97 +MSG3 DS "\n" .TEXT .START - MOV R5,[N] ;init du compteur - MOV R1,0 ;init de R1 - MOV R2,0 ;init de R2 - + MOV R6,[N] ;init du compteur, R6 sera la taille totale + MOV R5,R0 ; R5 sera notre compteur + MOV R1,R0 ;init de R1, qui sera la somme totale + BOUCLE: ADD R1,R1,R5 ; R1=R1+R5 - AND R3,Fl,0x00000001 ; - ADD R2,R2,R3 ; R2=R2+CF - SUB R5,R5,1 ; DEC R5 - MOV R6,ZERO ; - JNE R5,R6,BOUCLE ; si R5!=0 on refait la boucle - MOV, [SOMME], R1 ; ; - MOV, [SOMME+2], R2 ;on place la valeur de la somme - MOV, [0xffffff04], MSG ;on affiche le msg et la somme - MOV, [0xffffff06], SOMME ; - MOV, [0xffffff06], SOMME+2 ; + ADD R5,R5,1 ; DEC R5 + JNE R5,R6,BOUCLE ; si R5!=R6 (=N) on refait la boucle + MOV, [0xffffff04], MSG ; on affiche le msg et la somme + MOV, [0xffffff06], R6 ; MOV, [0xffffff04], MSG2 ; + MOV, [0xffffff06], R1 ; + MOV, [0xffffff04], MSG3 ; HALT ; |