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 / Exemple :
.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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.