Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Assembleur 68000 aide pour devoir



  1. #1
    ARTHUR42

    Assembleur 68000 aide pour devoir


    ------

    Bonjour,
    Je suis étudiant en première année de STI (génie électronique)
    J'ai un programme en assembleur à débuger et avec mes recherches et les explications de mon prof, je ne vois pas la solution aux 14 erreurs que compte ce programme :

    Le but du programme est de réaliser la fonction suivante pour calculer les nombres de Fibonacci (voir wikipédia) sans utiliser la directive invoke :

    Code:
    int fibonacci(int n){ 
    if(n <= 1 ) 
    return 1; 
    else 
    return (fibonacci(n-1)+fibonacci(n-2)); 
    } 
    
    
    Code à corrigé en assembleur: 
    
    Fibonacci proc n DWORD 
    MOVE eax,n 
    If: CMP eax,1 
    JMP else ;si n<=1 
    MOVE eax,1 ;retourner 1 
    RESET 
    else: DEC eax ;n-1 
    PUSH eax ;n-1 sur la pile 
    CALLM Fibonacci ;resultat dans eax 
    ROL ebx ;rectifier la pile et ebx=n-1 
    DEC ebx ;ebx=n-2 
    PUSH eax ;sauvegarder eax = Fibonacci(n-1) sur la pile 
    CALLM Fibonacci ;résultat dans eax=Fibonacci(n-2) 
    ADD esp,1 ;rectifier la pile 
    ROR ebx ;ebx = Fibonacci(n-1) 
    ADD eax,ebx ;eax = Fibonacci(n-2) + Fibonacci(n-1) 
    RESET 
    Fibonacci endp
    J'ai essayé de faire de mon mieux car j'ai enlevé 5 erreurs (bien pour un débutant)
    Pour le programme, merci de ne pas utiliser la fonction invoke (consigne).
    Je suis disponible pour répondre a vos questions.

    J'utilise IDE68000 demander par la prof
    http://www.easy68k.com/

    Merci d'avance.

    -----
    Dernière modification par yoda1234 ; 30/03/2009 à 09h06.

  2. Publicité
  3. #2
    SuperTux

    Re : Assembleur 68000 aide pour devoir

    Il n'y a pas de registre "eax, ebx, esp..." (c'est du x86). Le 68000 a 8 registres de données (D0 à D7) et 8 registres d'adresses (A0 à A7). Il n'y a pas non plus d'instruction PUSH en 68000, le pointeur de la pile est contenu dans A7, qu'il faut incrémenter/décrémenter manuellement. CALL c'est aussi du x86, en 68000 l'instruction est BSR (Branch Sub Routine). Ect...

    L'assembleur 68k significativement différent du x86 (intel pc) !

    Pour apprendre le 68000 je te conseille les bons vieux cours de Féroce Lapin pour Atari ST (donc dans ton cas les choses spécifique à l'Atari ne te concerne pas) :
    http://atariste.free.fr/asm/Cours_1.zip

  4. #3
    ARTHUR42

    Re : Assembleur 68000 aide pour devoir

    Merci pour vos précieux conseils
    j'ai amélioré le code et il reste 10 erreurs
    Code:
    Fibonacci proc n:DWORD
    	MOVE	D0,n
    If:	CMP	D0,1
               JMP  	else		;si n<=1
    	MOVE	D0,1		;retourner 1
    	RESET
    else:	DEC	D0		;n-1
    	PUSH	D0		;n-1 sur la pile
    	BSR	Fibonacci	;resultat dans eax
    	ROL	D1 		;rectifier la pile et ebx=n-1
    	DEC	D1		;ebx=n-2
    	PUSH	D1		;sauvegarder eax = Fibonacci(n-1) sur la pile
    	BSR	Fibonacci	;résultat dans eax=Fibonacci(n-2)
    	ADD	esp,1		;rectifier la pile
    	ROR	D1		;ebx = Fibonacci(n-1)
    	ADD	D0,D1		;eax = Fibonacci(n-2) + Fibonacci(n-1)
    	RESET
    Fibonacci  end
    Je vais essayer de corriger d'autres erreurs

  5. #4
    whoami

    Re : Assembleur 68000 aide pour devoir

    Bonjour,
    Citation Envoyé par ARTHUR42 Voir le message
    Code:
    If:	CMP	D0,1
               JMP  	else		;si n<=1
    En lisant en diagonale, j'aperçois cette erreur : après un test, on met un saut conditionnel, sinon ça revient à ne pas tenir compte du test, et à toujours faire le saut.

  6. #5
    ARTHUR42

    Re : Assembleur 68000 aide pour devoir

    Merci pour ton aide,
    J'ai modifier un saut mais il reste encore 10 erreurs :
    Code:
    Fibonacci proc n:DWORD
    	MOVE	D0,n
    If:	CMP	D0,1
               BLE  	else		;si n<=1
    	MOVE	D0,1		;retourner 1
    	RESET
    else:	DEC	D0		;n-1
    	PUSH	D0		;n-1 sur la pile
    	BSR	Fibonacci	;resultat dans eax
    	ROL	D1 		;rectifier la pile et ebx=n-1
    	DEC	D1		;ebx=n-2
    	PUSH	D1		;sauvegarder eax = Fibonacci(n-1) sur la pile
    	BSR	Fibonacci	;résultat dans eax=Fibonacci(n-2)
    	ADD	esp,1		;rectifier la pile
    	ROR	D1		;ebx = Fibonacci(n-1)
    	ADD	D0,D1		;eax = Fibonacci(n-2) + Fibonacci(n-1)
    	RESET
    Fibonacci  end

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. aide pour un devoir maison
    Par braca dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 06/03/2009, 18h55
  2. aide pour un devoir urgent...
    Par chamallow76000 dans le forum Chimie
    Réponses: 1
    Dernier message: 03/02/2009, 22h49
  3. [Biologie Moléculaire] Aide pour devoir sur chromatographie
    Par sylvain78 dans le forum Biologie
    Réponses: 4
    Dernier message: 28/05/2008, 19h50
  4. aide pour devoir de physique
    Par frag57 dans le forum Physique
    Réponses: 3
    Dernier message: 08/03/2008, 14h04
  5. aide pour un devoir maisson merci
    Par boukheras dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 05/11/2005, 19h18
Découvrez nos comparatifs produits sur l'informatique et les technologies.