Ich lerne Assembler-Sprache zu meiner Zeit und versuche, das folgende Problem zu lösen. Ich habe den Code geschrieben, aber es wird nicht funktionieren.Assembly Language Code Ausgabe
Schreiben eines Programms, das eine Schleife verwendet, um die ersten sieben Werte der Fibonacci-Zahl-Sequenz durch die folgende Formel beschrieben zu berechnen: Fib (1) = 1, Fib (2) = 1, Fib (n) = Fib (n-1) + Fib (n-2).
Ich brauche dieses Programm in Assembler geschrieben. Verwenden Sie die Kommentare in der Programmvorlage als Anweisungen, um den Code in Assemblersprache zu schreiben. Ich möchte das Programm im Anschluss an diese Programmierlogik in Assembler geschrieben werden:
.data
;declare an array
.code
main proc
;move 0 into ebx to initialize
;move 1 into edx to store the first Fib value
;move edx into an array ; store the first Fib value
; prepare to loop
; loop counter for 6 more values
; move esi,4
; array index for 3rd Fib value
L1:
;move ebx into eax
;add edx and eax
;move edx into the array of esi
; eax = ebx
; eax = eax + edx
; store the Fib value
;move edx into ebx
; prepare for next iteration
;move eax into edx
;add 4 to esi
;Loop L1
invoke ExitProcess,0
mein Code:
ExitProcess PROTO
.data
numbers DWORD 10 DUP (?)
.code
main PROC
mov ebx,0
mov edx,1
mov numbers,edx
mov ecx,6
mov esi,4
L1:
mov eax,ebx
add eax,edx
mov esi,OFFSET numbers
mov [esi],edx
mov eax,ebx
add eax,edx
mov edx,ebx
mov eax,edx
add esi,4
Loop L1
call ExitProcess
main ENDP
END
ich meinen Code auf die folgende Änderung:
ExitProcess PROTO
.data
numbers DWORD 10 DUP (?)
.code
main PROC
mov ebx,0
mov edx,1
mov numbers,edx
mov ecx,10
mov esi,4
mov esi,OFFSET numbers
L1:
mov eax,ebx
add eax,edx
mov [esi],edx
mov ebx,edx
mov edx,eax
add esi,4
Loop L1
call ExitProcess
main ENDP
END
Als ich Beim schritt durch den code zeigen das eax-register und das edx-register die Fibonacci-Sequenzwerte an: 1, 2, 3, 5, 8, 13 usw. Allerdings speichert der code das eax-register oder den edx-registerwert in den Zahlen a fetzen? Wenn nicht, wie mache ich das.
Ist dies eine gültige Codezeile? Wird der Wert für edx im Zahlen-Array gespeichert?
Wie speichere ich den EAX- oder EDX-Wert im Zahlen-Array?
Stack-Überlauf ist keine "Bitte gib mir die Codez" Art der Website. – fuz
Nächstes Mal nicht Kommentare entfernen, wenn Sie Ihren Code eingeben. Vielleicht können Sie sie ein wenig komprimieren, aber halten Sie sie für Referenz und Debugging. – Ped7g
'MOV-Nummern, edx' ist in MASM (TASM emuliert MASM auch). Es kompiliert zu 'mov DWORD PTR [ds: OFFSET-Nummern], edx' (ausführliche technische Art, es genau zu beschreiben). Es ist gültig, aber verwirrend und fugig, weil es den '[]' (Speicherzugriff) vom Leser der Quelle versteckt!Ihre neue Bearbeitung ist fast korrekt, mit leichtem Haken, wenn Sie sie debuggen und die Speicher- und 'esi'-Werte ansehen und mit' OFFSET-Nummern' vergleichen, werden Sie es bald beheben, Sie sind in der Nähe. – Ped7g