WinFuture-Forum.de: [assembler] Fibonacci - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[assembler] Fibonacci


#1 Mitglied ist offline   free 

  • Gruppe: aktive Mitglieder
  • Beiträge: 948
  • Beigetreten: 18. Dezember 04
  • Reputation: 0

geschrieben 04. Dezember 2006 - 21:35

Hi Leute!

Ich versuch mich gerade an der rekursiven Ausgabe der Fibonaccifolge in Assembler. Doch ich bekomm das nicht hin :blink:
Die Logik habe ich beim rekursiven Ablauf verstanden! (n-1)+(n-2)


Soweit bin ich schonmal
Könnte mal jemand drüberschauen :wink:

segment .data

segment .bss

segment .text
	global fibo

fibo:
	push ebp
	mov  ebp, esp

	mov  edx, [ebp+8]
	cmp  edx, 2	;n mit 2 vergleichen
	jae  recur	;falls größer

   ;mov  esp, ebp
   ;pop  ebp
   ;ret

recur:
	push edx
	push eax
	call fibo
	dec edx
	mov edx, eax
	push edx
	
	call fibo
	add esp, 8
	add eax, edx
	pop edx

	pop edx
	ret 0


Danke!
~free
Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 04. Dezember 2006 - 21:46

Also wenn du nicht erwähnt hättest, daß das die Fibonacci-Zahlen berechnen soll, dann wüsste ich echt nicht, was dieses wirre Codefragment zu bedeuten hat. Muss das eigentlich sein, daß du mit EBP und ESP rumspielst?

Muss das überhaupt sein, daß das rekursiv werden soll?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#3 Mitglied ist offline   free 

  • Gruppe: aktive Mitglieder
  • Beiträge: 948
  • Beigetreten: 18. Dezember 04
  • Reputation: 0

geschrieben 04. Dezember 2006 - 21:53

Beitrag anzeigenZitat (Rika: 04.12.2006, 21:46)

Muss das eigentlich sein, daß du mit EBP und ESP rumspielst?

Nein


Beitrag anzeigenZitat (Rika: 04.12.2006, 21:46)

Muss das überhaupt sein, daß das rekursiv werden soll?

ja

Habe bisher kaum was mit Assembler zu tun gehabt. :-/
Eingefügtes Bild
0

#4 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 04. Dezember 2006 - 22:00

Dann mach doch mal etwas ganz sinnvolles:

1. Mach dir den Sinn von Push und Pop klar.
2. Stelle eine vernünftige Aufrufkonvention auf.
3. Definiere deine Anforderungen

Zitat

Nein

Dann lass es.

Zitat

ja

Per Aufgabe oder per Unlust, es iterativ zu implementieren?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#5 Mitglied ist offline   free 

  • Gruppe: aktive Mitglieder
  • Beiträge: 948
  • Beigetreten: 18. Dezember 04
  • Reputation: 0

geschrieben 04. Dezember 2006 - 22:02

Beitrag anzeigenZitat (Rika: 04.12.2006, 22:00)

Per Aufgabe oder per Unlust, es iterativ zu implementieren?


Per Aufgabe...
Eingefügtes Bild
0

#6 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 04. Dezember 2006 - 22:23

Dann hier mein Vorschlag:

fib:;n = EAX, return = EBX

	CMP EAX, 0
	JE n_is_0

	CMP EAX,1
	JE n_is_1

	PUSH EAX;; EBX pushen wir nicht, weil uns der alte Wert vollkommen egal ist.
	DEC EAX
	CALL fib;fib(n-1)
	POP EAX
	
;; an dieser Stelle ist EBX=fib(n-1)
	
	PUSH EAX
	PUSH EBX;; hier müssen wir EBX sichern
	DEC EAX
	DEC EAX
	CALL fib;fib(n-2)
	POP ECX; alter Wert von EBX, in ECX wiederhergestellt. ECX=fib(n-1), EBX=fib(n-2)
	POP EAX
	
	ADD EBX,ECX;; EBX = EBX+ ECX = fib(m-1)+fib(n-2)
	RET
	
	n_is_0:
	MOV EBX,1
	RET

	n_is_1:
	MOV EBX,1
	RET


Na, ist denn sauberer Code wirklich so schwer?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#7 Mitglied ist offline   free 

  • Gruppe: aktive Mitglieder
  • Beiträge: 948
  • Beigetreten: 18. Dezember 04
  • Reputation: 0

geschrieben 05. Dezember 2006 - 18:05

@rika
Dein Code läuft nicht ganz ;o)

Habs jetzt so hinbekommen
segment .text
		global  fibo

fibo:					

	PUSH ebp
	push ebx
	push ecx
	MOV	 ebp, esp

	mov eax, [ebp+16]

	CMP EAX, 0
	JE n_is_0

	CMP EAX,1
	JE n_is_1

	DEC EAX	
	PUSH EAX

	CALL fibo			
	mov ebx, eax 
	
	POP EAX


	DEC EAX   
	PUSH EAX
	CALL fibo			
	mov ecx, eax	
	POP EAX				
					
	
	ADD EBX,ECX			
	mov eax,ebx	
	jmp done

n_is_0:
	MOV EAX,0
	jmp done

n_is_1:
	MOV EAX,1
	jmp done

done:
	MOV	esp, ebp
	pop ecx
	pop ebx
	POP ebp
	ret

Dieser Beitrag wurde von free bearbeitet: 05. Dezember 2006 - 18:06

Eingefügtes Bild
0

#8 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 05. Dezember 2006 - 18:23

Hey, auch ich kann nicht erahnen, was die für das Marshalling von Relocation Records bei Verwendung innerhalb eines anderen Programmes brauchst - das musst du natürlich selbst ergänzen. :8):
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#9 Mitglied ist offline   free 

  • Gruppe: aktive Mitglieder
  • Beiträge: 948
  • Beigetreten: 18. Dezember 04
  • Reputation: 0

geschrieben 05. Dezember 2006 - 18:25

:8):
Danke für deine Hilfe!
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0