Accueil > > > RECURSIVITE EN ASM
RECURSIVITE EN ASM
Information sur la source
Description
ce programme illustre la recursivite en assembleur on utilise comme example la fonction de "FIBONACCI" et la "FACTORIEL"
Source
- DONNE SEGMENT
-
- MESSAGE DB 10,13,"*********CE PROGRAMME CALCULE LE SUIT DE FIBONACCI EN ASSEMBLEUR*******",10,13,'$'
- UN_NUMERO DB 10,13," ENTRER LE RANG : ",'$'
- RESULTAT DB 10,13," VIOCI LE RESULTAT ",'$'
- MSGFACTO DB 10,13," ET POUR LE FACTORIELLE LE RESULTATA EST : ",'$'
- MSGERREUR DB 10,13,"ENTRER UN NOMBRE SVP",'$'
- DONNE ENDS
-
- CODE SEGMENT
-
- ASSUME CS:CODE,DS:DONNE
- debut:
- MOV AX,DONNE
- MOV DS,AX
-
- LEA DX,MESSAGE
- MOV AH,09H
- INT 21H
- LEA DX,UN_NUMERO
- INT 21H
- MOV BX,0
- MOV CX,10
- ;LECTURE ET CONVERTION DES DU NOMBRE LU DANS LE REGISTRE BX
- LECT:
- MOV AH,01H ;on lit un caractaire
- INT 21H
- CBW
- CMP AL,13 ; si c'est ENTRER on va la suit du programme
- JE SUIT
- CMP AL,30H ;SINON ON VERIFIE SI C'EST UN CHIFFRE
- JL ERREUR
- CMP AL,39H
- JA ERREUR
- SUB AL,30H ;si oui on lui soustrait 30H
- XCHG AX,BX
- MUL CX ;on multiplie le resultat deja obtenu par 10
- JC SUIT
- ADD AX,BX ;ON L'ADDITIONNE AVEC LE NOMBRE LU
- XCHG AX,BX ; on met le resultat dans bx
- JMP LECT
- SUIT:
- MOV CX,BX ;ON MET DANS CX LE RAG
- PUSH CX
- CALL FIBO
- MOV DX,OFFSET RESULTAT
- MOV AH,09H
- INT 21H
- CALL AFFICHE
- POP CX
- CALL FACTO
- MOV BX,AX
- LEA DX,MSGFACTO
- MOV AH,09H
- INT 21H
- CALL AFFICHE
- JMP FIN
- ERREUR:
- LEA DX,MSGERREUR
- MOV AH,09H
- INT 21H
- FIN:
- MOV AH,01H
- INT 21H
- MOV AH,4CH
- INT 21H
- ;*************************************************
- ; LA PROCEDURE NON RECURSIVE DE FIBONACCI
- ;*************************************************
- FIBO:
- XOR AX,AX
- JCXZ RETOURE
- MOV BX,AX
- INC AX
- CMP CX,1
- JBE RETOURE
- TANQUE:
- PUSH AX
- ADD AX,BX
- POP BX
- LOOP TANQUE
- RETOURE:
- RET
- ;***************************************************
- ; LA PROCEDURE D'AFFICHAGE DU RESULTAT
- ;***************************************************
- AFFICHE:
- mov cl,10
- MOV AX,BX
- MOV SI,0
- MOV DX,0
- convert:
- INC SI
- div CX
- cmp AX,0
- je BOUCLE
- ADD DL,30H
- PUSH DX
- CWD
- JMP CONVERT
- BOUCLE:
- ADD DX,30H
- PUSH DX
- BCL:
- POP DX
- MOV AH,02H
- INT 21H
- DEC SI
- CMP SI,0
- JNE BCL
- ret
- ;*******************************************************************
- ;******************************************************************
- ;**** LA FONCTION FACTORIELLE RECURSIF ****
- ;******************************************************************
- FACTO:
- XOR AX,AX
- INC AX
- FACTORIELLE:
- JCXZ RET_PROG
- MUL CX
- DEC CX
- CALL FACTORIELLE ;ICI LE CALL EST SEULLEMENT FAIR ILLUSION A LA RECURSIVITE
- ; LE RESULTAT RESTERA LE MEME AVEC UN JMP MAIS TRES EFFICASSE
- RET_PROG:
- ret
-
- ;**** FIN DE LA PROCEDURE ******
- CODE ENDS
- END debut
DONNE SEGMENT
MESSAGE DB 10,13,"*********CE PROGRAMME CALCULE LE SUIT DE FIBONACCI EN ASSEMBLEUR*******",10,13,'$'
UN_NUMERO DB 10,13," ENTRER LE RANG : ",'$'
RESULTAT DB 10,13," VIOCI LE RESULTAT ",'$'
MSGFACTO DB 10,13," ET POUR LE FACTORIELLE LE RESULTATA EST : ",'$'
MSGERREUR DB 10,13,"ENTRER UN NOMBRE SVP",'$'
DONNE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DONNE
debut:
MOV AX,DONNE
MOV DS,AX
LEA DX,MESSAGE
MOV AH,09H
INT 21H
LEA DX,UN_NUMERO
INT 21H
MOV BX,0
MOV CX,10
;LECTURE ET CONVERTION DES DU NOMBRE LU DANS LE REGISTRE BX
LECT:
MOV AH,01H ;on lit un caractaire
INT 21H
CBW
CMP AL,13 ; si c'est ENTRER on va la suit du programme
JE SUIT
CMP AL,30H ;SINON ON VERIFIE SI C'EST UN CHIFFRE
JL ERREUR
CMP AL,39H
JA ERREUR
SUB AL,30H ;si oui on lui soustrait 30H
XCHG AX,BX
MUL CX ;on multiplie le resultat deja obtenu par 10
JC SUIT
ADD AX,BX ;ON L'ADDITIONNE AVEC LE NOMBRE LU
XCHG AX,BX ; on met le resultat dans bx
JMP LECT
SUIT:
MOV CX,BX ;ON MET DANS CX LE RAG
PUSH CX
CALL FIBO
MOV DX,OFFSET RESULTAT
MOV AH,09H
INT 21H
CALL AFFICHE
POP CX
CALL FACTO
MOV BX,AX
LEA DX,MSGFACTO
MOV AH,09H
INT 21H
CALL AFFICHE
JMP FIN
ERREUR:
LEA DX,MSGERREUR
MOV AH,09H
INT 21H
FIN:
MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
;*************************************************
; LA PROCEDURE NON RECURSIVE DE FIBONACCI
;*************************************************
FIBO:
XOR AX,AX
JCXZ RETOURE
MOV BX,AX
INC AX
CMP CX,1
JBE RETOURE
TANQUE:
PUSH AX
ADD AX,BX
POP BX
LOOP TANQUE
RETOURE:
RET
;***************************************************
; LA PROCEDURE D'AFFICHAGE DU RESULTAT
;***************************************************
AFFICHE:
mov cl,10
MOV AX,BX
MOV SI,0
MOV DX,0
convert:
INC SI
div CX
cmp AX,0
je BOUCLE
ADD DL,30H
PUSH DX
CWD
JMP CONVERT
BOUCLE:
ADD DX,30H
PUSH DX
BCL:
POP DX
MOV AH,02H
INT 21H
DEC SI
CMP SI,0
JNE BCL
ret
;*******************************************************************
;******************************************************************
;**** LA FONCTION FACTORIELLE RECURSIF ****
;******************************************************************
FACTO:
XOR AX,AX
INC AX
FACTORIELLE:
JCXZ RET_PROG
MUL CX
DEC CX
CALL FACTORIELLE ;ICI LE CALL EST SEULLEMENT FAIR ILLUSION A LA RECURSIVITE
; LE RESULTAT RESTERA LE MEME AVEC UN JMP MAIS TRES EFFICASSE
RET_PROG:
ret
;**** FIN DE LA PROCEDURE ******
CODE ENDS
END debut
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Assembleur ... [ par pi0up51 ]
Voilà je voulais savoir qch ..Je fais un bac S spécialité Science de l'ingenieur et on fais de la programmation assembleur, sur un vieux microcontrole
Deux Questions (Pas compliqué) [ par Dalamar ]
Je commence en Assembleur et j'ai deux questions:1-Je travaille avec dev-c++ et je voudrais savoir comment on inclus de l'assembleur2-J'ai trouvé u
Quel assembleur choisir ? [ par trinitacs ]
J'aimerai savoir quel est le meilleur assembleur qui existe ou si il en faut mixer. Je début difficielment l'asm avec NASM. Faut-il choisir MASM, TASM
langage c /assembleur [ par almai467 ]
salut ..!mon projet de fin d'annee est un logiciel (compteur internet) qui compte la duree de la connexion internet et le cout avec le langage c je c'
Programmation assembleur d'un pilote de souris serie [ par Scaq ]
COUCOU, C SCAQ...J'ai du mal à recevoir les données de ma souris serie
compilateur assembleur [ par morganitos ]
Salut a tous ce qui liront ce message.Je débute en programmation assembleur et voici ma question : où pourrai-je trouver un assembleur, un linker ...(
Petit problème pour le nul en assembleur que je suis Merci d'avance [ par rgc50 ]
Trouver parmis les 5 nombres 67, 79, 15, e3, 72 le nombre le pls élevé, on le stockera le résultat en 0100 (en assembleur 68000 (MOTOROLA)).
Pb assembleur très facile (pas pour moi) Merci d'avance [ par rgc50 ]
Trouver parmis les 5 nombres 67, 79, 15, e3, 72 le nombre le pls élevé, on le stockera le résultat en 0100 (en assembleur 68000 (MOTOROLA)).
Commander un PCF 8574 en assembleur 68000 [ par Apophis74 ]
Je cherche quelqu'un qui pourrait m'adier à faire communiquer ma carte Coldfire 5307 avec une carte d'ES PCF8574 via le bus I2C en assembleur 68000. M
Utilistaionde l'I2C en assembleur 68000 [ par Apophis74 ]
Je cherche une source qui pourrait m'aider à utiliser le bus I2C de ma carte Coldfire 5307 en asssembleur 68000. Help me!Apophis74
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|