Not logged in. · Lost password · Register

fredator
Ca$h Carlo$
Avatar
Member since Mar 2003
953 posts
Subject: Aufgabe 4 2/2002
ich wuerd mal gern wissen. ob mein code so stimmt, oder ob ich da nen groben denkfehler drinn hab:

l2:

movl 24(%esp), %ecx; //right 
addl 20(%esp), %ecx;  //+left
sarl $1, %ecx;             // div2
movl %ecx, 4(%esp);  // middle =   .... (eigentlich ueberfluessig, wenn man immer mit ecx arbeitet .... naja)

movl $array, %ebx;
movl (%ebx,%ecx,8), %eax;
cmpl %eax, 16(%esp);
jg then;
pushl 24(%esp);
addl $1, %ecx;
pushl %ecx;
pushl 20(%esp)
subl $12, %esp;
call search;
// muessen hier dann die pops hin?
ret;

then:
pushl %ecx;       //middle auf stack
pushl 24(%esp); //left
pushl 24(%esp); //id
subl $12, %esp;
call search;        //search aufrufen
// muessen hier dann die pops hin?
ret;

Ja also wie man sehen kann bin ich mir net so ganz im klaren wo da die pops + speicherfreigaben reinzusetzen san. ausserdem fehlt mir hier ein bisschen der durchblick wer eigentlich den speicher fuer die ruecksprungadresse reserviert/freigibt. Muss ich das machen? uhm. irgendwie..... komisch
1.Sys: ZX Spectrum +2, 128K RAM, 0MB HD, Kassettendeck, RS232 Interface
2.Sys: Nintendo GameBoyAdvance SP, Metallicblau, 32bit CPU, Sound, Video/Mucke/NES Player
3.Sys: Sega Dreamcast, 128Bit, 2Mem Cards, 10+Spiele, SNES emulator, 2 (!) Controller
This post was edited on 2004-09-28, 17:17 by fredator.
galaxius
Avatar
Member since Oct 2002
49 posts
Hab ich so ähnlich, nur folgendes:
statt jg müsste es ein jge sein
statt ret ein jmp .L4
die subl $12,(%esp) dürfen erst nach dem call stehen
zwischen subl und jmp muss noch ein movl %eax (%esp), des schreibt das Ergebnis des Funktionsaufrufs in die Variable ret.

Du musst nur den Speicher freigeben, den du selber auch belegst. Das machst du ja mit subl $12,(%esp). Hier müssen sonst keine weiteren pops hin.

Das mit der Rücksprungadresse wird alles automatisch freigegeben, wenn du ret aufrufst.
Die Künstler sind Profis geworden;
die Amateure Künstler (Satie)
fredator
Ca$h Carlo$
Avatar
Member since Mar 2003
953 posts
warum denn erst nach dem call den speicher reservieren? da is doch ein wenig spaet dacht ich?

und das mit dem subl $12, ( %esp ) verstehe ich nich. das machen die da auch nich so.
1.Sys: ZX Spectrum +2, 128K RAM, 0MB HD, Kassettendeck, RS232 Interface
2.Sys: Nintendo GameBoyAdvance SP, Metallicblau, 32bit CPU, Sound, Video/Mucke/NES Player
3.Sys: Sega Dreamcast, 128Bit, 2Mem Cards, 10+Spiele, SNES emulator, 2 (!) Controller
Julia
Kruemelmonsterine
Avatar
Member since May 2003
387 posts
nach dem call macht man auch kein subl sondern ein addl. und dieses macht man auch ohne ( ) um %esp oder sonstiges. man will die zwoelf ja wohl kaum als zahl auf den stack schreiben.
Der Pinky, der Pinky und der Brain, Brain, Brain, Brain!
fredator
Ca$h Carlo$
Avatar
Member since Mar 2003
953 posts
ah gut. dann passt das .... ausgezeichnet *g*
1.Sys: ZX Spectrum +2, 128K RAM, 0MB HD, Kassettendeck, RS232 Interface
2.Sys: Nintendo GameBoyAdvance SP, Metallicblau, 32bit CPU, Sound, Video/Mucke/NES Player
3.Sys: Sega Dreamcast, 128Bit, 2Mem Cards, 10+Spiele, SNES emulator, 2 (!) Controller
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen