Bin auch grade bissl raus, aus'm
ASM.
Es gibt ja ein paar Register, die man sichern muss, bzw. da man nicht verändern darf.
Wobei mir grade nicht einfällt wofür EBX war, (glaub Fehlerbehandlung, Stackverwaltung oder so)
im Windows x86 ... für x64 und andere Plattformen bissl anders.
Dank Multiplatform versuch ich wieder möglichst viel in Pascal zu machen, vor allem da eine meiner letzten Assenbler-Optimierungen auf modernen Intel-CPU gegen deren Optimierung arbeitete und mein hochoptimiertes Assembler wesentlich langsamer war, als das was Delphi aus dem Pascal machte.
Hier gibt's auch noch bissl was in der
OH zu finden.
http://docwiki.embarcadero.com/RADSt...bly_Code_Index
Zitat von
aus Verwendung des integrierten Assemblers:
In einer
asm-Anweisung muss der Inhalt der Register EDI, ESI, ESP, EBP und EBX erhalten bleiben
Auch dazu, was Delphi in den Pascal-Funktionen am Anfang einfügt und wann/warum.
Zitat von
aus Assembler-Prozeduren und -Funktionen:
Code:
PUSH EBP ;Present if Locals <> 0 or Params <> 0
MOV EBP,ESP ;Present if Locals <> 0 or Params <> 0
SUB ESP,Locals ;Present if Locals <> 0
; …
MOV ESP,EBP ;Present if Locals <> 0
POP EBP ;Present if Locals <> 0 or Params <> 0
RET Params ;Always present
Aber mit Conditional-Expressions kommt man
IMHO sowieso oft besser.
Zitat:
Delphi-Quellcode:
asm
...
end;
{$ELSE !CPUX86}
{MESSAGE Fatal 'not implemented'}
{$ENDIF !CPUX86}
{$ENDIF !PUREPASCAL}
Delphi-Quellcode:
{$IF Defined(PUREPASCAL)}
begin
...
end;
{$ELSEIF Defined(CPUX86)}
asm
...
end;
{$ELSE}
{MESSAGE Fatal 'not implemented'}
{$IFEND}
Hier kann man auch schöner Verschachteln und Zusammenfassen, ohne wirklich in X Ebenen zu verschachteln, wie z.B.
{$IF Defined(AAA) OR Defined(BBB)}
.