AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Is this correct and Safe

Ein Thema von sdean · begonnen am 20. Aug 2010 · letzter Beitrag vom 21. Aug 2010
Antwort Antwort
sdean

Registriert seit: 5. Dez 2009
64 Beiträge
 
#1

Is this correct and Safe

  Alt 20. Aug 2010, 19:18
Delphi-Version: 2005
I would like to do 3 Loops and each loop gives a Message , but without using IF .. Then

i did it in this way * Is it correct and Safe ... ? *
// in ASM
Delphi-Quellcode:
var
  Str: string;
begin
  Str := 'Just to popup a message without using IF Then';
   try
  Asm
  PushAd
  Xor al,al
    @Loop:Cmp al,3//xLoop //---> 3 loops
          JE @ExitpRoc
         PushAd
            Push 0
            Push 0
            Push Str
            Push 0
            Call MessageBoxA
         PopAd
        Inc al
        Jmp @Loop
  @ExitpRoc:PopAd
  End;
  except
    Exit;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: Is this correct and Safe

  Alt 20. Aug 2010, 19:51
Is it correct and Safe ... ?
To check if it is correct you can just try out if it works. I haven't found any error in this code yet.

Bernhard

BTW: What do PushAd/PopAd do? - I just know "Push XXX"/"Pop XXX" (including space)
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Is this correct and Safe

  Alt 20. Aug 2010, 20:21
Should do fine imo, except for one thing: MessageBoxA is an API function, hence it uses PChar and not Delphi's internal string. You should pass a pointer to the first character instead of the string itself.
I'm not sure about the PushAd and PopAd stuff - I think it's for exception handling, isn't it? I can't tell if you're using those instructions correctly because I've never used them myself, but I think the easiest way to find that out is to just run the code and see if it works.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Is this correct and Safe

  Alt 20. Aug 2010, 20:28
@NamenLozer: Intern enthält ein Delphi-String alles, was einem PChar gleicht.


Delphi-Quellcode:
. except
    Exit;
  end;
end;
aka
Delphi-Quellcode:
. except
  end;
end;
Sowas macht man nicht !

Ansonsten seh ich keinen Vorteil, weswegen man hier unbedingt ASM und nicht einfaches Pascal nutzt.
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Is this correct and Safe

  Alt 20. Aug 2010, 20:30
@NamenLozer: Intern enthält ein Delphi-String alles, was einem PChar gleicht.
Aber ein String hat doch noch eine Längenangabe und einen Referenzzähler etc.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Is this correct and Safe

  Alt 20. Aug 2010, 22:00
Der interne Pointer eines Strings und der anderen dynamischen Arrays zeigt absichtlich auf das erste Array-Feld/Char.
Vor diesem Feld/Char liegen dann Referenzzählung, Längenangabe und Co. .
Beim String liegt dann hinter dem String auch noch eine zusätzliche #0, obwohl es dieses für einen String mit Längenangabe nicht nötig währe.
(Abgesehn vom ShortString)

Durch die Position des Pointers und die #0 entspricht es "absichtlich" (ja, man hat sich dabei was gedacht) einem PChar, denn daruch kann eine Konverierung in einen PChar ohne Probleme und großen Aufwand vorgenommen werden, bzw. man kann es einfach ohne Konvertierung nutzen.

Nur die andere Richtung, von PChar nach String geht natülich nicht.
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Is this correct and Safe

  Alt 20. Aug 2010, 22:32
Ah okay, wieder was gelernt. In dem Fall ist das natürlich dann kein Problem.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Is this correct and Safe

  Alt 21. Aug 2010, 11:28
BTW: What do PushAd/PopAd do? - I just know "Push XXX"/"Pop XXX" (including space)
PUSHAD/POPAD macht PUSH/POP für die meisten CPU-Register (genauer: EAX, ECX, EDX, EBX, originaler ESP, EBP, ESI, und EDI) mit einem einzelnen Befehl. Wenn man eh mehrere davon braucht, ist das bequemer als eine Litanei von PUSH/POP zu schreiben. Reduziert ausserdem die Gefahr von Vertippern in der Reihenfolge Und performancemäßig fällt das überhaupt nicht mehr ins Gewicht heutzutage
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz