|
You last visited: Today at 06:19
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.
04/11/2010, 11:37
|
#1
|
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.
|
|
|
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
|
|
|
04/11/2010, 14:56
|
#3
|
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?
|
|
|
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?
|
|
|
04/11/2010, 16:12
|
#5
|
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
|
ja
|
|
|
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
|
|
|
04/11/2010, 16:23
|
#7
|
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
|
soll ich mal PUSH und POP weg machen?
|
|
|
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.
|
|
|
04/11/2010, 18:12
|
#9
|
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.
|
|
|
|
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.
|
|