Question

Hé les gars je ne sais pas si je vais tout cela dans le bon sens. J'ai besoin des 12 premiers numéros de séquence de Fibonacci à calculer qui son fait déjà je suis assez sûr. Mais maintenant, je dois afficher le contenu hexadécimal de (Fibonacci) dans mon programme en utilisant Dumpmem. Je dois être obtenir une impression de: 01 01 02 03 05 08 0D 15 22 37 59 90

Mais je n'obtenir: 01 01 00 00 00 00 00 00 00 00 00 00

Les conseils ou de l'aide est beaucoup apprécié.

 INCLUDE Irvine32.inc
.data

reg DWORD -1,1,0                    ; Initializes a DOUBLEWORD array, giving it the values of -1, 1, and 0
array DWORD 48 DUP(?)
Fibonacci BYTE 1, 1, 10 DUP (?) 



.code
main PROC
       mov array, 1
       mov esi,OFFSET array ; or should this be Fibonacci?
       mov ecx,12
       add esi, 4


    L1:
        mov edx, [reg]
        mov ebx, [reg+4]
        mov [reg+8], edx
        add [reg+8], ebx                    ; Adds the value of the EBX and 'temp(8)' together and stores it as temp(8) 
        mov eax, [reg+8]                    ; Moves the value of 'temp(8)' into the EAX register        
        mov [esi], eax                      ; Moves the value of EAX into the offset of array
        mov [reg], ebx                      ; Moves the value of the EBX register to 'temp(0)' 
        mov [reg+4], eax                    ; Moves the value of the EAX register to 'temp(4)
        add esi, 4

       ; call DumpRegs
        call WriteInt
        loop L1

        ;mov ebx, offset array
        ;mov ecx, 12

        ;L2: 
        ;mov eax, [esi]
        ;add esi, 4
        ;call WriteInt
        ;loop L2

  ;Below will show hexadecimal contents of string target-----------------
   mov   esi, OFFSET Fibonacci      ; offset the variables
   mov   ebx,1                      ; byte format
   mov   ecx, SIZEOF Fibonacci      ; counter
   call  dumpMem 


exit
main ENDP

END main
Était-ce utile?

La solution

Il me semble que le problème est ici avec calcul de la suite de Fibonacci. Votre code pour que les feuilles me ... un peu perplexe. Vous avez un tas de « trucs » là-bas, qui semble avoir rien à voir avec le calcul de nombres de Fibonacci (par exemple, reg), et d'autres qui pourraient, mais il semble que vous ne savez pas vraiment ce que vous essayez de faire avec eux .

En regardant votre boucle pour calculer la séquence, la première chose qui saute pratiquement à moi est que vous utilisez la mémoire beaucoup . L'un des premiers (et les plus importants) les choses lorsque vous êtes en langage assembleur d'écriture est de maximiser votre utilisation de registres et de minimiser votre utilisation de la mémoire.

En pointe, je pense que si vous lisez quoi que ce soit de la mémoire au cours si le calcul de la séquence, vous êtes probablement faire une erreur. Vous devriez être en mesure de faire tout le calcul dans les registres, de sorte que les seules références de mémoire écriront résultats. Puisque vous êtes (apparemment) produisant les résultats de taille octet, vous avez besoin seulement un tableau du nombre approprié d'octets pour maintenir les résultats (à savoir, un octet par numéro que vous allez générer).

Je suis tenté d'écrire un peu de routine montrant comment cela peut être parfaitement adapté au langage d'assemblage, mais je suppose que je ne devrais probablement pas faire ...

Autres conseils

Votre appel à Dumpmem est correct, mais votre programme ne stocke pas les résultats de vos calculs à l'emplacement correct: la région que vous appelez reste « Fibonacci » initialisé à 1, 1, et dix zéros. Vous devez vous assurer que votre boucle commence à écrire à l'offset de Fibonacci plus 2, et se déplace dix fois par incréments d'un octet (dix, douze, parce que vous avez fourni les deux éléments initiaux du initialiseur).

Je suis désolé, je ne peux pas être plus précis, comme toute question contenant le mot « Fibonacci » se retourne inévitablement être les devoirs de quelqu'un: -)

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