Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : A l'aide... svp [ Archives / Aide a la programmation Windows ] (monitor100)

jeudi 20 avril 2006 à 19:00:19 | A l'aide... svp

monitor100

Bonjour a tous,

Je suis completement null en assembler, et il faut que je fasse afficher le résultat de la factoriel de 4 soit 24.

est ce que quelqu'un peut m'aider s.v.p.

1000000000000 Merci.

voici mon bout de code....


TITLE factoriel
  PILE   segment stack
        dw 100 dup(?)
        Basdepile  equ this word
PILE ends

Data segment

    N    dw  4
    fact dw ?

Data ends

Code segment

   assume CS:code, DS:Data, SS:Pile

 Debut:
     MOV AX,Data
     MOV DS,AX
     MOV AX,Pile
     MOV SS, AX   ; initialise le segment de pile
     MOV SP, basdepile   ; copier l'adresse de la base de la pile  dans SP
     mov  BX,n   ; sauvegarde la valeur de n
     mov ax,bx
     call factoriel
          
 Fin:   
     pop AX   ; le résultat calculé par la fonction factoriel est dans AX
     mov fact, AX   
     mov AX,4c00h
     int 21h
     factoriel  proc  near
     push ax

       
Continuer: 

    CMP AX,1
    JLE  depiler  ; déplier jusqu’à ce n = 1
    dec AX
    push AX
    JMP     continuer
Depiler: 
     POP  AX             
     POP CX
     mul  CX
     Push AX
     CMP  BX,CX
     Ja depiler
     ret

     factoriel endp   ; fin de la procédure
     code ends
     end debut    ; fin du programme code
             


vendredi 21 avril 2006 à 09:45:35 | Re : A l'aide... svp

Nasman

Bonjour monitor100,

Deux choses sont à considérer pour ton exercice:
- le calcul de la factorielle
- la sortie du résultat

Le calcul est très simple par exemple:

            mov al,1            ;initialisation du calcul
            mov cx,[n]         ;charge la valeur (4)
boucle  mul cl                  ;effectue la multiplication par cl (résultat dans ax)
            loop boucle        ;décrémente cx et va à bcl si cx<>0
terminé  résultat dans ax
                  
Attention, ne fonctionne que si les précédentes multiplications tiennent sur un octet (excepté la dernière) - ne marche que si n<=5
5
5*4 = 20
20*3=60
60*2=120
120*1=120
par compte
6
6*5=30
30*4=120
120*3=360 (ah=1 al=104)
104*2=208 (mul cl multiplie al par cl et met le résultat dans ax)
208*1=208

Pour sortit le résultat il te faut convertir la valeur de l'octet valant 24d soit 18h
Il faut convertir la valeur 18h en "24". Tu peux utiliser l'instruction AAM qui te décomposera 18h (dans al) en 2h (dans ah) et 4h (dans al) - quotient et reste de la division par dix.
Après il faut convertir 2h en '2' et 4h en '4' (conversion de valeurs en caractères)
Ceci s'effectue en ajoutant la valeur 30h à al et ah ('0' = 30h, '9' = 39h)
Après c'est à toi de te débrouiller pour sortir tout dans le bon ordre.

A+

mercredi 26 avril 2006 à 01:47:19 | Re : A l'aide... svp

Guilou34

Salut
Il me semble que c'est la sortie qui pose problème, voici un morceau de code qui doit convenir. Quant à la manière de calculer une factorielle,la méthode suggérée par Nasman est évidemment beaucoup plus simple.
 Il semblerait qu'il y a là derrière une contrainte solaire. Désolé, si j'arrive trop tard .

(ax contient la valeur à convertir en décimal  <9999)  
 mov di,offset resultat ; adresse du tampon où sera rangée la valeur
 xor dx,dx ;
 mov bx,1000
 div bx  ; (dx:ax)/bx   al=quotient dx=reste
 add al,30h ; conversion en ascii
 stosb
 mov ax,dx ;
 mov bl,100
 div bl
 add ax,30h
 stosb
 mov al,ah
 xor ah,ah
 mov bl,10
 div bl
 add ax,30h
 stosb
 mov al,ah
 add al,30h
 stosb
 mov al,"$" ; termine la chaîne
 stosb
mov dx,offset resultat
mov ah,9
 int 21h



Cette discussion est classé dans : code, mov, ax, pile, factoriel


Répondre à ce message

Sujets en rapport avec ce message

Conversion hexa vers ascii [ par Cygace ] Bonjour voici un code asm qui convertit un nombre binaire vers de l'ascii. Mais je dois modifiier ce code pour qu'il convertisse de l'hexadecimal vers rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa pb affichage console [ par mat74 ] voila je cherche a faire un prog qui affiche 0 ou 1 en fonction de la valeur de ax . et le teste est ds une procedure . mais il y a un pb le prog n'af pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 Probleme avec la pile et call [ par Mick7 ] Salut,Voila j'ai un probleme d'adresse de pile quand je fais appele a call affichage:  Main:     mov ax, 324     mov bx, 10  Boucle:     xor dx, dx    Boot et heure [ par henri12 ] je fais un essai de changement de l heure avec l interruption 21h sous le boot l heure n est pas changerpourquoi.286C   ;Code de bootsecteur permettan boot system [ par henri12 ] salut je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a: exemple systemje voudrais qu il me lance le jeu pong sur a:  j nasm [ par henri12 ] salut je viens de compiler ce mbr boot avec nasmnasm -fbin aboot.asm -o binexe.exele programme c est bien compiler mais en lançant d une cle usb l ima


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.