AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein asm vergleich? (Assembler gegen delphi prog)
Thema durchsuchen
Ansicht
Themen-Optionen

asm vergleich? (Assembler gegen delphi prog)

Ein Thema von gabneo · begonnen am 11. Mär 2007 · letzter Beitrag vom 12. Mär 2007
 
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: asm vergleich? (Assembler gegen delphi prog)

  Alt 12. Mär 2007, 09:07
Bitte immer die Register retten!
Es kann in einfachen Funktionen gut gehen, aber meistens geht es schief, wenn die Register nicht gerettet werden.
Ausnahmen sind EAX, EDX und ECX. Die müssen nicht gerettet werden (wobei dieser Satz mit Vorsicht zu genießen ist). Das gilt allerdings auch nur, wenn du deine ganze Funktion in Assembler schreibst. Ein Mix aus Delphi und ASM in einer Funktion ist schon gefährlich genug. Allerdings würde ich da nicht auf den Compiler hoffen, dass er aufpasst, welche Register du verwendest.


Edit: Was erwartest du eigentlich aus einem Vergleich? Bzw. was ist deine Vergleichsfunktion? Eine einfache Addition o.ä. ist nix, womit du den Compiler herausfordern kannst.

Am Besipiel der Addition:
Du willst for i:=1 to c do result1:=wert1+wert2; machen.

Dein Code sieht so aus:
Delphi-Quellcode:
asm
  MOV ECX,c
  @schleife1:
  MOV EAX,wert1
  ADD EAX,wert2
  LOOP @schleife1
  MOV result1,EAX
end;
1. Frage: Was ist wenn c<1 ist?
2. Anmerkung: Du solltest schon das Ergebnis innerhalb der Schleife speichern, ansonsten gibt es keine entsprechende Pascal-Version, mit der du vergleichen könntest (wobei man in solchen Momenten ASM einsetzt, wenn es keine einfache Pascal-Version gibt).

So, und was macht der Delphi-Compiler:
Delphi-Quellcode:
asm
  mov eax,c
  test eax,eax
  jle @_end
@_begin:
  mov edx,wert1
  add edx,wert2
  mov result1,edx
  dec eax
  jnz @_begin
@_end:
end;
Der Unterschied liegt in dem "loop" zu "dec + jnz". Wobei mir in Erinnerung ist, dass loop langsamer ist. Das hat irgendetwas mit dem Pipelining zu tun.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz