2016-07-11 14 views
-3

Ich versuche, eine Schleife zu machen, die die ersten 10 Zahlen in Fibonacci-Nummer berechnen. Ich verwende "Schleife" an der und des Codes, und es funktioniert nicht.Assembly-Schleife funktioniert nicht

xor cx, cx 
    mov cx, 8 
    mov bx, offset Array 
    mov [byte ptr bx], 0 
    mov [byte ptr bx+1], 1 
    mov bx, 1 

Fibo: 
    inc bx 
    mov al, [byte ptr bx-1] 
    mov [byte ptr bx], al 
    mov al, [byte ptr bx-2] 
    add [byte ptr bx], al 
    loop Fibo 
+2

Sie sollten "Schleife" vermeiden. Es ist langsam und verwendet implizit '[r/e] cx '', was bedeutet, dass der Code, den Sie gepostet haben, im 32- oder 64-Bit-Modus viel mehr durchlaufen kann, als Sie erwarten. – EOF

+0

Siehe auch http://stackoverflow.com/questions/32659715/assembly-language-x86-how-to-create-a-loop-to-calculate-fibonacci-sequence –

Antwort

1

Die Schleife ist in Ordnung, aber Sie zerstören Ihre bx aus Versehen. Versuchen Sie es mit Debugger zu debuggen.

(downvoting, weil es offensichtlich ist, wenn Sie es debuggen, sogar auf Papier ohne HW).

1

Ich denke, Sie sollten "Byte PTR [BX]" anstelle von "[Byte PTR BX]" für alle Ihre Zeigertypen verwenden.

Auch diese Zeile wird wahrscheinlich einen Fehler verursachen.

Es setzt bx zurück, so dass es nicht mehr auf die Adresse von Array zeigt. Verwenden Sie stattdessen "inc bx".

+0

Aber wenn ich anstelle von "Schleife" verwende, dass : dec cx- cmp cx, 0- jne Fibo - Es funktioniert. – Asher

+1

Es gibt viele Möglichkeiten, dass dies noch funktioniert. Eine der Eigenschaften ist, dass die relative Adresse von Array im Speicher 0 ist. Aber Sie wollen ein Programm, das immer funktioniert. Nicht einer, der manchmal funktioniert. :) – Ariestinak

1

Die Schleife war korrekt. Ich war verwirrt über das Debuggen von Loops. Entschuldigung.