begin process at 2010 03 18 11:21:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

68xxx

 > CALCUL DU LOGARITHME NÉPÉRIEN ET DE L'EXPOSANT (X+1)M

CALCUL DU LOGARITHME NÉPÉRIEN ET DE L'EXPOSANT (X+1)M


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :68xxx Niveau :Débutant Date de création :17/06/2003 Date de mise à jour :17/06/2003 11:44:13 Vu :11 036

Auteur : steven007

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

mon programme calcul le logarithme népérien et de l'exposant (x+1) exposant m , aussi simple et clair que ça :)

c'est un projet ke j'avais du faire l'année passée je vous le post ici, ça ressemble pas exactement a l'asm que vous utiliser sur le site ici, enfin a quelque différence...

super bien commenté avec ça j'espère ke vous vous y retrouverez sinon laisser vraiment tomber l'asm parce ke + clair y a pas.

A vos compilateur :)

Source

  • .model small
  • .stack 100h
  • .data
  • ;----------------------------
  • ; variables pour ln -
  • ;----------------------------
  • x dw 300 ; 0,3
  • x2 dw ? ; x exposant 2
  • x3 dw ? ; x exposant 3
  • x4 dw ? ; x exposant 4
  • x5 dw ? ; x exposant 5
  • x6 dw ? ; x exposant 6
  • fact2 dw ? ; !2
  • fact3 dw ? ; !3
  • fact4 dw ? ; !4
  • fact5 dw ? ; !5
  • fact6 dw ? ; !6
  • v_2 dw 2 ; valeur 2
  • v_3 dw 3 ; valeur 4
  • v_5 dw 5 ; valeur 5
  • v_6 dw 6 ; valeur 6
  • v_10 dw 10 ; valeur 10
  • v_15 dw 15 ; valeur 15
  • v_24 dw 24 ; valeur 24
  • v_25 dw 25 ; valeur 25
  • v_35 dw 35 ; valeur 35
  • v_120 dw 120 ; valeur 120
  • mille dw 1000 ; 1000
  • deuxm dw 2000 ; 2000
  • troim dw 3000 ; 3000
  • quatrm dw 4000 ; 4000
  • cinqm dw 5000 ; 5000
  • t_1 dw ? ; 1er terme du ln
  • t_2 dw ? ; 2eme terme du ln
  • t_3 dw ? ; 3eme terme du ln
  • t_4 dw ? ; 4eme terme du ln
  • t_5 dw ? ; 5eme terme du ln
  • t_6 dw ? ; 6eme terme du ln
  • log dw ? ; variable dans laquelle ira toutes les valeurs des termes du logarithme
  • ; népérien
  • a_1 dw 1000 ; 1er terme de l'exposant
  • a_2 dw ? ; 2eme terme de l'exposant
  • a_3 dw ? ; 4eme terme de l'exposant
  • a_5 dw ? ; 5eme terme de l'exposant
  • a_6 dw ? ; 6eme terme de l'exposant
  • exp dw ? ; variable dans laquelle ira toutes les valeurs des termes de (1+x)m
  • .code
  • MAIN proc
  • MOV AX,@data
  • MOV ds,AX
  • ;--------------------------------------------
  • ;- calcul des puissance -
  • ;--------------------------------------------
  • MOV AX,x ; je met x dans ax (x vaut 300) (0.3)
  • MUL x ; je le multipli par x ce qui donne x au carré
  • DIV mille ; divisé par 1000
  • MOV x2,AX ; je copi la valeur de ax dans x2
  • MUL x ; je multipli la valeur que j'avais dans ax par x
  • DIV mille ; je divise le tout par 1000
  • MOV x3,AX ; je copi la valeur de ax dans x3
  • MUL x ; meme chose pour les étapes suivantes jusqu'au 6ème terme
  • DIV mille
  • MOV x4,AX
  • MUL x
  • DIV mille
  • MOV x5,AX
  • MUL x
  • DIV mille
  • MOV x6,AX
  • ;--------------------------------------------
  • ;- Calcul des factorielles -
  • ;--------------------------------------------
  • ; mon programme calcul les factorielles
  • MOV AX,v_2 ; je place la valeur 2 dans le registre ax
  • MOV fact2,AX ; il place le résultat de ax (2) dans fact2
  • MUL v_3 ; je multiplie la valeur de ax (2) par 3 = 2 x 3 = 6
  • MOV fact3,AX ; je place le résultat de ax (6) dans fact3
  • MUL v_4 ; je multiplie la valeur de ax (6) par 4 = 6 x 4 = 24
  • MOV fact4,AX ; je place le résultat de ax (24) dans fact4
  • MUL v_5 ; je multiplie la valeur de ax (24) par 5 = 24 x 5 = 120
  • MOV fact5,AX ; je place le résultat de ax (120) dans fact5
  • MUL v_6 ; je multiplie la valeur de ax (120) par 5 = 120 x 6 = 720
  • MOV fact6,AX ; je place le résultat de ax (720) dans fact6
  • ;---------------------------------------------
  • ;- Calcul du 2eme terme -
  • ;---------------------------------------------
  • MOV AX,x2 ; je met x2 dans ax
  • DIV fact2 ; le tout divisé par 2
  • MOV t_2,AX ; qui me donne le résultat du terme 2
  • ;---------------------------------------------
  • ;- calcul du 3eme terme -
  • ;---------------------------------------------
  • MOV AX,x3 ; je met x3 dans ax
  • MUL v_2 ; le tout multiplié par 2
  • DIV fact3 ; puis divisé par 6
  • MOV t_3,AX ; qui me donne le résultat du terme 3
  • ;---------------------------------------------
  • ;- Calcul du 4eme terme -
  • ;---------------------------------------------
  • MOV AX,x4 ; je met x4 dans ax
  • MUL v_6 ; le tout multiplié par 6
  • DIV fact4 ; puis divisé par 24
  • MOV t_4,AX ; qui me donne le résultat du terme 4
  • ;---------------------------------------------
  • ;- Calcul du 5eme terme -
  • ;---------------------------------------------
  • MOV AX,x5 ; je met x5 dans ax
  • MUL v_24 ; le tout multiplié par 6
  • DIV fact5 ; puis divisé par 120
  • MOV t_5,AX ; qui me donne le résultat du terme 5
  • ;---------------------------------------------
  • ;- Calcul du 6eme terme -
  • ;---------------------------------------------
  • MOV AX,x6 ; je met x6 dans ax
  • MUL v_120 ; le tout multiplié par 6
  • DIV fact6 ; puis divisé par 720
  • MOV t_6,AX ; qui me donne le résultat du terme 6
  • ;--------------------------------------------
  • ;- Calcul de touts les termes -
  • ;--------------------------------------------
  • MOV AX,x ; je fais la somme ou je soustrais les termes entre eux selon la formule du logarithme ;népérien
  • SUB AX,t_2 ; et je trouve le résultat finale que je place dans log (logarithme népérien)
  • ADD AX,t_3
  • SUB AX,t_4
  • ADD AX,t_5
  • SUB AX,t_6
  • MOV log,AX ;je copi la val de AX dans log, dans lequel nous pourrons voir directement ;la valeur ;du logarithme népérien en faisant un simple "INSPECT" log
  • ;---------------------------------------------
  • ;- Calcul du 2 eme terme -
  • ;---------------------------------------------
  • MOV AX,x ; je met x dans le registre AX
  • MOV dx,0 ; je vide le registre dx pour éviter un "divide by zero"
  • DIV v_2 ; je fais un DIV 2 au lieu de faire MUL 1 demi
  • MOV a_2,AX ; je sauve la valeur de AX, dans a_2 qui pourra servir + tard
  • ;---------------------------------------------
  • ;- calcul du 3eme terme -
  • ;---------------------------------------------
  • MUL x ; je multipli directement x au registre AX pour obtenir ce que j'avais fois x
  • DIV v_2 ; je mul par 2 au lieu de MUL par 0.5 ( c + facile et j'évite d'avoir un "divide by ;zero",ici ou + tard)
  • DIV deuxm ; je div par 2000 car factorielle 2 (1000 x + grand)
  • MOV a_3,AX ; je sauve la valeur de AX, dans a_3 qui pourra servir + tard
  • ;---------------------------------------------
  • ;- Calcul du 4eme terme -
  • ;---------------------------------------------
  • MUL x ; pareil qu'au dessus
  • MUL v_15 ; je MUL par 15 car - 3 demi = 1,5 = 15 / 10
  • DIV v_10 ; je DIV par 10 car - "" "" ""
  • DIV troim ; je DIV par 3000 par c'est le reste de la factorielle par 3 (1000 x + grand)
  • MOV a_4,AX ; je sauve la valeur de AX, dans a_4 qui pourra servir + tard
  • ;---------------------------------------------
  • ;- Calcul du 4eme terme -
  • ;---------------------------------------------
  • MUL x ; pareil qu'au dessus
  • MUL v_25 ; je MUL par 25 car 5 demi = 2,5 = 25 / 10
  • DIV v_10 ; je DIV par 10 car - "" "" ""
  • DIV quatrm ; je DIV par 4000 car c'est le reste de la factorielle par 4 (1000 x + grand)
  • MOV a_5,AX ; je sauve la valeur de AX, dans a_5 qui pourra servir + tard
  • ;---------------------------------------------
  • ;- Calcul du 5eme terme -
  • ;---------------------------------------------
  • MUL x ; pareil qu'au dessus
  • MUL v_35 ; je MUL par 35 car - 7 demi = 3,5 = 35 / 10
  • DIV v_10 ; je DIV par 10 car - "" "" ""
  • DIV cinqm ; je DIV par 5000 car c'est le reste de la factorielle par 5 (1000 x + grand)
  • MOV a_6,AX ; je sauve la valeur de AX, dans a_6 qui pourra servir + tard
  • ;---------------------------------------------
  • ;- Calcul de la somme des terme -
  • ;---------------------------------------------
  • MOV AX,a_1 ; je fais la somme ou je soustrais les termes entre eux celon la formule de l'exposant
  • ADD AX,a_2 ; et je trouve le résultat finale que je place dans exp (exposant)
  • SUB AX,a_3
  • ADD AX,a_4
  • SUB AX,a_5
  • ADD AX,a_6
  • MOV exp,AX ; je copi la val de AX dans exp, dans lequel nous pourrons voir directement la ;valeur de (x+1) exposant m, en faisant un simple "INSPECT" exp
  • MOV AX,04c00h ; fin du programme, rend la main au system
  • INT 21h ; d'exploitation.
  • MAIN ENDP
  • end MAIN
.model small
.stack 100h

.data

;----------------------------
;   variables pour ln       -
;----------------------------
x		dw 	300    		 ; 0,3
x2 		dw	?		; x exposant 2
x3		dw	?		; x exposant 3
x4		dw	?		; x exposant 4
x5		dw	?		; x exposant 5
x6		dw	?		; x exposant 6
fact2	dw	?		; !2
fact3	dw	?		; !3
fact4	dw	?		; !4
fact5	dw	?		; !5
fact6	dw	?		; !6
v_2	dw	2		; valeur 2
v_3	dw	3		; valeur 4
v_5	dw	5		; valeur 5
v_6	dw	6		; valeur 6
v_10	dw	10		; valeur 10
v_15	dw	15		; valeur 15
v_24	dw	24		; valeur 24
v_25	dw	25		; valeur 25
v_35	dw	35		; valeur 35
v_120	dw	120		; valeur 120
mille	dw	1000		; 1000
deuxm	dw	2000		; 2000
troim	dw	3000		; 3000
quatrm	dw	4000		; 4000
cinqm	dw	5000		; 5000
t_1		dw	?		; 1er  terme du ln
t_2		dw	?		; 2eme terme du ln	
t_3		dw	?		; 3eme terme du ln
t_4		dw	?		; 4eme terme du ln
t_5		dw	?		; 5eme terme du ln
t_6		dw	?		; 6eme terme du ln
log		dw	?		; variable dans laquelle ira toutes les valeurs des termes du logarithme
					; népérien               
a_1	dw	1000		; 1er terme de l'exposant
a_2	dw	?		; 2eme terme de l'exposant
a_3	dw	?		; 4eme terme de l'exposant
a_5	dw	?		; 5eme terme de l'exposant
a_6	dw	?		; 6eme terme de l'exposant
exp	dw	?		; variable dans laquelle ira toutes les valeurs des termes de (1+x)m



.code

MAIN	proc

    MOV	   AX,@data
    MOV	   ds,AX


;--------------------------------------------
;- calcul des puissance                     -
;--------------------------------------------

    MOV  AX,x		; je met x dans ax (x vaut 300)  (0.3)
    MUL   x			; je le multipli par x ce qui donne x au carré
    DIV   mille			; divisé par 1000
    MOV   x2,AX		; je copi la valeur de ax dans x2

    MUL x			; je multipli la valeur que j'avais dans ax par x
    DIV   mille			; je divise le tout par 1000
    MOV   x3,AX		; je copi la valeur de ax dans x3

    MUL   x			; meme chose pour les étapes suivantes jusqu'au 6ème terme
    DIV   mille
    MOV   x4,AX

    MUL   x
    DIV   mille
    MOV   x5,AX

    MUL   x
    DIV   mille
    MOV   x6,AX


;--------------------------------------------
;- Calcul des factorielles                  -
;--------------------------------------------

			; mon programme calcul les factorielles

   MOV   AX,v_2	; je place la valeur 2 dans le registre ax
   MOV   fact2,AX	; il place le résultat de ax (2) dans fact2
   MUL   v_3		; je multiplie la valeur de ax (2) par 3 = 2 x 3 = 6
   MOV   fact3,AX	; je place le résultat de ax (6) dans fact3
   MUL   v_4		; je multiplie la valeur de ax (6) par 4 = 6 x 4 = 24
   MOV   fact4,AX	; je place le résultat de ax (24) dans fact4
   MUL   v_5		; je multiplie la valeur de ax (24) par 5 = 24 x 5 = 120
   MOV   fact5,AX	; je place le résultat de ax (120) dans fact5
   MUL   v_6		; je multiplie la valeur de ax (120) par 5 = 120 x 6 = 720
   MOV   fact6,AX	; je place le résultat de ax (720) dans fact6


;---------------------------------------------
;-          Calcul du 2eme terme            -
;---------------------------------------------

   MOV   AX,x2	; je met x2 dans ax
   DIV   fact2		; le tout divisé par 2
   MOV   t_2,AX	; qui me donne le résultat du terme 2

;---------------------------------------------
;-          calcul du 3eme terme             -
;---------------------------------------------

   MOV   AX,x3	; je met x3 dans ax
   MUL   v_2		; le tout multiplié par 2
   DIV   fact3		; puis divisé par 6
   MOV   t_3,AX	; qui me donne le résultat du terme 3

;---------------------------------------------
;-           Calcul du 4eme terme            -
;---------------------------------------------

   MOV   AX,x4	; je met x4 dans ax
   MUL   v_6		; le tout multiplié par 6
   DIV   fact4		; puis divisé par 24
   MOV   t_4,AX	; qui me donne le résultat du terme 4

;---------------------------------------------
;-           Calcul du 5eme terme            -
;---------------------------------------------

   MOV   AX,x5	; je met x5 dans ax
   MUL   v_24	; le tout multiplié par 6
   DIV   fact5		; puis divisé par 120
   MOV   t_5,AX	; qui me donne le résultat du terme 5

;---------------------------------------------
;-           Calcul du 6eme terme            -
;---------------------------------------------

   MOV   AX,x6	; je met x6 dans ax
   MUL   v_120	; le tout multiplié par 6
   DIV   fact6		; puis divisé par 720
   MOV   t_6,AX	; qui me donne le résultat du terme 6

;--------------------------------------------
;- Calcul de touts les termes               -
;--------------------------------------------

MOV   AX,x	; je fais la somme ou je soustrais les termes entre eux selon la formule du logarithme ;népérien
SUB   AX,t_2	; et je trouve le résultat finale que je place dans log (logarithme népérien)
ADD   AX,t_3		
SUB   AX,t_4		
ADD   AX,t_5		
 SUB   AX,t_6		

MOV   log,AX		;je copi la val de AX dans log, dans lequel nous pourrons voir directement ;la valeur ;du logarithme népérien en faisant un simple "INSPECT" log

;---------------------------------------------
;-          Calcul du 2 eme terme            -
;---------------------------------------------

   MOV   AX,x		; je met x dans le registre AX	
   MOV   dx,0		; je vide le registre dx pour éviter un "divide by zero"
   DIV   v_2		; je fais un DIV 2 au lieu de faire MUL 1 demi
   MOV   a_2,AX		; je sauve la valeur de AX, dans a_2 qui pourra servir + tard

;---------------------------------------------
;-          calcul du 3eme terme             -
;---------------------------------------------

   MUL   x		; je multipli directement x au registre AX pour obtenir ce que j'avais fois x
   DIV   v_2	; je mul par 2 au lieu de MUL par 0.5 ( c + facile et j'évite d'avoir un "divide by      ;zero",ici ou + tard)
   DIV   deuxm		; je div par 2000 car factorielle 2 (1000 x + grand)
   MOV   a_3,AX		; je sauve la valeur de AX, dans a_3 qui pourra servir + tard

;---------------------------------------------
;-           Calcul du 4eme terme            -
;---------------------------------------------

   MUL   x		; pareil qu'au dessus
   MUL   v_15		; je MUL par 15 car - 3 demi = 1,5 = 15 / 10
   DIV   v_10		; je DIV par 10 car -    ""     ""     ""
   DIV   troim		; je DIV par 3000 par c'est le reste de la factorielle par 3 (1000 x + grand)
   MOV   a_4,AX		; je sauve la valeur de AX, dans a_4 qui pourra servir + tard
     
;---------------------------------------------
;-           Calcul du 4eme terme            -
;---------------------------------------------

   MUL   x		; pareil qu'au dessus
   MUL   v_25		; je MUL par 25 car 5 demi = 2,5 = 25 / 10
   DIV   v_10		; je DIV par 10 car -      ""     ""     ""
   DIV   quatrm		; je DIV par 4000 car c'est le reste de la factorielle par 4 (1000 x + grand)
   MOV   a_5,AX		; je sauve la valeur de AX, dans a_5 qui pourra servir + tard


;---------------------------------------------
;-           Calcul du 5eme terme            -
;---------------------------------------------

   MUL   x			; pareil qu'au dessus
   MUL   v_35		; je MUL par 35 car - 7 demi = 3,5 = 35 / 10
   DIV   v_10			; je DIV par 10 car -      ""     ""     ""
   DIV   cinqm		; je DIV par 5000 car c'est le reste de la factorielle par 5 (1000 x + grand)
   MOV   a_6,AX		; je sauve la valeur de AX, dans a_6 qui pourra servir + tard

;---------------------------------------------
;-       Calcul de la somme des terme        -
;---------------------------------------------
   
   MOV   AX,a_1		; je fais la somme ou je soustrais les termes entre eux celon la formule de l'exposant
   ADD   AX,a_2		; et je trouve le résultat finale que je place dans exp (exposant)
   SUB   AX,a_3
   ADD   AX,a_4
   SUB   AX,a_5
   ADD   AX,a_6

MOV   exp,AX		; je copi la val de AX dans exp, dans lequel nous pourrons voir directement la ;valeur de (x+1) exposant m,  en faisant un simple "INSPECT" exp


   MOV   AX,04c00h		; fin du programme, rend la main au system
   INT   21h			; d'exploitation.


   MAIN ENDP
   end MAIN

 Conclusion

aucun bug connu jusqu'à présent si vous en voyez faite le moi savoir

merci


 Sources du même auteur

AFFICHAGE D'UN CARRÉ (ROUGE), CENTRÉ, SUR LA POINTE, QUI SE ...

 Sources de la même categorie

LECTURE ET ECRITURE D'UN CARACTERE ET D'UNE CHAINE DE CARACT... par yasmus
Source avec Zip EN UTILISANT LES INTERRUPTIONS DE DOS , CECI EST UN CODE DE... par iltir_master
DÉCONCATÉNATION DE CHAÎNE SOUS MASM32V8 par Stormy
GENERIC WINDOWS XP URL DOWNLOAD AND EXECUTE SHELLCODE par theXman
AFFICHAGE D'UN CARRÉ (ROUGE), CENTRÉ, SUR LA POINTE, QUI SE ... par steven007

Commentaires et avis

Commentaire de steven007 le 17/06/2003 11:47:09

zuttttttttt, les commantaire dépasse la ligne parfois, enfin si vous voyez ce ke je veux dire vous trouverez direct

mettez les commantaire derrière les " ; " pour indiquer au compilateur qu'il s'agit de commantaire & pas de texte source

Commentaire de steven007 le 16/08/2003 04:32:48

y ce bouscule pas les commentaires ici ...

Commentaire de flodelarab le 07/09/2004 22:17:11

Salut!

c louche!
je vois pas le rapport avec le log népérien:
avec ce prog ln(0)=0 et ln(1) est très différent de 0
....

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales