Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 06:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Inline Assembler] Wo liegt der Fehler?

Discussion on [Inline Assembler] Wo liegt der Fehler? within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
[Inline Assembler] Wo liegt der Fehler?

Hi, ich arbeite seit gestern mit Assembler (inline Assembler). Grundsachen wie Rechnen und einfache Schleifen kann ich schon, aber an diesem nicht sinnvollen Beispiel (das ich nur zum üben nehme ) bekomme ich einen Zugriffsfehler. Warum?

Code:
function Test(x: integer): Integer; assembler;
  asm
  PUSH EAX;
  MOV EAX, X; //Kopiere einen beliebigen Wert in EAX
  MOV EDX, 30; //kopiere 30 in EDX
  CMP EAX, 20; //WENN EAX = 20 DANN
  JE @Start;   //Springe zu Start
  CDQ;         //EAX auf 64Bit erweitern
  @Start:      //Startausführung starten
    ADD EAX, EDX;  //Addiere EAX mit EDX
    IDIV EAX, EDX; //Diviediere EAX mit EDX
    RET;           //Gebe das Ergebnis zurück
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage (IntToStr(Test(20)));
end;

end.
HardCore.1337 is offline  
Old 04/11/2010, 14:45   #2
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Die Genau Fehlermeldung wäre interessant, allerdings vermute ich das es an dem PUSH EAX am Anfang liegt, du müsstest das vor dem Return wieder vom Stack Popen denn sonst returnst du ins nirvana.

Wenn du bei Delphi Funktionen das Assembler lable in weg lässt werden die Parameter übrigens automatisch nacheinander in die Register geschoben, also das MOV EAX, X; würde entfallen bei deiner Funktion
Bot_interesierter is offline  
Old 04/11/2010, 14:56   #3
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Jop, daran lags.
Ich hätte erst POP EAX nutzten sollen.

Nun kommt keine Fehlermeldung mehr, aber das Ergebnis sieht merkwürdig aus.
Es kommt immer -51 raus.

Also theoretisch wird doch so gerechnet

Code:
ADD EAX, EDX;
IDIV EAX, EDX;
...
Code:
20 + 30 (=50)
20/50
...
Oder seh ich das Falsch?
HardCore.1337 is offline  
Old 04/11/2010, 16:08   #4
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Machst du vor dem return pop eax?
Bot_interesierter is offline  
Old 04/11/2010, 16:12   #5
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
ja
HardCore.1337 is offline  
Old 04/11/2010, 16:21   #6
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Das ist des Pudels Kern!
EAX wird verwendet um den Rückgabewert zu übergeben, also wird schlicht der Wert zurückgegeben, welcher am Anfang auf den Stack gepusht wurde :P
Bot_interesierter is offline  
Old 04/11/2010, 16:23   #7
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
soll ich mal PUSH und POP weg machen?
HardCore.1337 is offline  
Old 04/11/2010, 16:52   #8
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Lernst du was wenn ich dir schritt für schritt erkläre was du machen sollst damit das Programm das tut was du wolltest?
Ich glaube nicht und es ist wohl sehr Offensichtlich dass das Push EAX und Pop EAX überflüssig ist, aber wenn du lustig bist kannst du auch einfach ein anderes freies Register benutzten um den wert vom Stack zu holen, Sinnvoll ist das aber nicht.
Bot_interesierter is offline  
Old 04/11/2010, 18:12   #9
 
HardCore.1337's Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
Ja, ich habe in einem Tutorial gelesen, das es sicherer ist EAX zu Pushen.
Ich arbeite noch nicht sehr lange mit Assembler und deswegen seh ich da auch noch nicht richtig durch.Aber ich hab mir jetzt ein Super Buch geholt.
HardCore.1337 is offline  
Reply


Similar Threads Similar Threads
[Zombimobs , wo liegt der fehler]
08/08/2010 - Metin2 Private Server - 4 Replies
http://img808.imageshack.us/img808/7441/meinprople m.gif oben auf dem giuf bild sieht man das ich aus einem thread wo das beschrieben wird die monster 2 gedownlaodet hab , in meinem clienten ersetz habe und sie in den profizockerfiles schon drinen waren und dann die npc datei auch ersetz aheb aus der die im erklärungs thread kam jetz kommt da immer die fehlermeldung die man im bild sieht €1: liegt das eventuel l daran das die value von server mobproto und client npc list nichtd ie selbe...
Wo liegt der Fehler?
07/01/2010 - Metin2 Private Server - 6 Replies
Hallo, Ich und Profi haben ne Quest gemacht, damit man in unsere neue Map kommt, aber komischerweise funktioniert die nicht. Findet ihr den Fehler? quest trade_map begin state start begin when 20354.chat."Handelsmap" begin say_title(mob_name(20354)..":")
Habn fehler...wo liegt der??
01/13/2010 - AutoIt - 4 Replies
das is mein kleiner script...der soll dafür sorgen, dass mein programm netr ausgeht wegen inaktivität... naja wiso passiert nix beim starten
Wo liegt der Fehler
08/04/2009 - AutoIt - 6 Replies
Hey, ich hab hier ein Code für ein Acc ersteller: #NoTrayIcon $pw = InputBox ("PW", "Gib das Sicherheits Password ein:D") If $pw = "dynastie") Then $Email = InputBox ("Email", "gib hir die gewünschte email ein") $zahl = InputBox ("Zahl", "gib hir eine am besten 5-6 stellige zahl als ID ein...sie wird bei jedem erstellten acc +1 gerechnet^^") $time = InputBox ("time", "Gib die zeit die dein PC beim accmachen läd ein...in millisecunden und lieber zu viel als zu wenig") MouseClick...
Wo liegt der Fehler?
05/28/2008 - World of Warcraft - 8 Replies
Ich hab mir Glitchy runtergeladen ich möchte nur Rasse von männlich Blutelf zu männlich Undead wechseln,dann hab ich Liste erstellt die MPQ datei auf dem desktop gespeichert als : jojo.MPQ (war 1,92 mb groß oder so ) dann konvertiert danach war die ca. 4,5mb groß,dann umgeschrieben in patch-3.MPQ weil patch-MPQ und patch-2.MPQ gibts schon dann in den Data Ordner gepackt,dann WoWME runtergeladen in wow Ordner gepackt in der cfg Datei : patch.MPQ patch-2.MPQ patch-3.MPQ eingegebn. Dann...



All times are GMT +2. The time now is 06:19.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.