Einzelnen Beitrag anzeigen

Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#8

Re: [Assemmbler] Aufrufkonvention erkennen

  Alt 25. Aug 2005, 10:10
Zitat von Olli:
Zitat von BlackJack:
[...] und sich unwissentlich mit der angenommenen Parameterübergabe den Compilerotimierungen ausliefert.
Kannst du mal ein Beispiel geben (zB per PM). Ist mir noch nie passiert und Robert hat mir das auch erklärt, aber ich konnte es nicht nachvollziehen.
naja es könnte ja sein dass die Borländer in Zukunft die Ober-Aufrufkonvetion 3000 erfinden (oder in Uralt-Versionen eine andere Konvention als register benutzt haben) und ab da an genau diese standardmäßig statt der register-konvetion benutzen, und dann kann man seine proceduren, die man aufgrund der jetzigen impliziten Wahl von register daraufhin getrimmt hat ziemlich vergessen. man ist eben meiner Meinung nach Delphi total ausgeliefert, wenn man nicht explizit eine Konvention festlegt und sich aber gleichzeitig in seinem Code auf eine bestimmte Konvention einstellt.

Zitat von Olli:
Zitat von BlackJack:
ich bin z.b. schon öfter derbe auf die fresse gefallen, weil ich proceduren mit parametern komplett in ASM geschrieben habe und mich dann komplett auf eine Art der Parameterübergabe festgeschrieben hatte...
asm-end statt begin-end?
jo

Zitat von Olli:
Zitat von BlackJack:
(z.b. wurde von Delphi implizit die register-Konvention benutzt und ich hab in der Procedure fröhlich EAX und ECX benutzt, weil ich ja dachte, die Parameter lägen auf dem Stack)
Aber Delphi benutzt *immer* implizit Register wenn es nicht debuggt, oder habe ich da was mißverstanden? Bei voller Optimierung ist's doch Register?!
tja, aber das war zum meiner Anfansgzeit in Delphi, da kam ich gerade von TP rüber und war froh, verstanden zu haben, wie TP die Parameter auf den Stack legt und wie man die dann mit ASM adressieren kann. Also hab ich mir mal gedacht dass das unter Delphi genauso wäre, aber da wird ja standardmäßig register als Konvention benutzt, und ich habe mir erstmal schön die Parameter in den Registern EAX / ECX / EDX überschrieben und michgewundert warum ich im stack nur speichermüll statt meiner variablen finde
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat