Question

Dans certains devoirs, je dois créer un programme de séquence Fibonacci en montage.J'ai créé ce code, mais cela ne semble pas fonctionner correctement et je ne suis pas sûr de savoir pourquoi.Je crois que je le fais correctement, mais EAX reste "2" chaque boucle.

    INCLUDE Irvine32.inc
    .data
        prev DWORD ?
        next DWORD ?
        val DWORD ?
        count DWORD ?
        total DWORD ?

        myMsg BYTE "Fibonacci Sequence ",0dh,0ah,0

   .code
    main PROC
       mov ecx,15
       mov val,1
       mov prev,-1
       mov eax,1
       mov edx,OFFSET myMsg
       call WriteString

    L1:
       mov count,ecx
       mov ebx,val
       add ebx,prev
       mov total,ebx
       mov ebx,val
       mov prev,ebx
       mov eax,total
       mov val, ebx
       call WriteInt
       call Crlf
       loop L1

    exit
    main ENDP
    END main

Était-ce utile?

La solution

pourrait ressembler à ceci (non testé):

    mov  ecx, 15
    mov  eax, 0    ;a = 0
    mov  ebx, 1    ;b = 1
_fib:
    mov  edx, eax 
    add  edx, ebx  ;sum = a + b
    mov  eax, ebx  ;a = b
    mov  ebx, edx  ;b = sum
    loop _fib

Autres conseils

Votre boucle simplifie à cela en pseudocode:

L1:
   count = ecx; // count === 15
   eax = total = val + prev; // prev = -1 => eax = 0. prev = 1 => eax = 2
   prev = val; // sets prev = 1, val doesn't change so prev = 1 after the first iteration

Comme vous pouvez le constater, EAx= Val + prev va évaluer à 2 une fois la prev allure à 1.

Vous devez élaborer sur la spécification de votre problème.Combien d'entiers voulez-vous imprimer?Est-ce ce que comptez= 15 est pour?Dans ce cas, vous devez réduire le nombre de comptes avec chaque itération et vérifier pour voir qu'il n'est pas zéro.

Quant à la séquence Fibonacci, vous devriez faire quelque chose comme celui-ci dans votre boucle:

// lets say that eax is the current integer in the sequence and prev is the previous integer
// then the next integer = eax + prev
ebx = eax + prev
prev = eax
eax = ebx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top