Perfiliev
-
Gesamte Inhalte
13 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von Perfiliev
-
-
Hallo Jens,
pcode.pas
PCODE.7z ñêà ÷à òü ñ Ôà éëû@Mail.Ru
var1 = 10 var2 = 1 if var1 = var2 showmessage("ist 5") elseif var1 = var2 showmessage("ist nicht 5") endif
asm code:BITS 32 cpu 486 extern _exit, _show_message extern _set_vergleichswert_A1, _set_vergleichswert_A2, _set_vergleichswert_bychar extern _vergleiche_cmpeq @var_var1: dd 10 @var_var2: dd 1 @Pshow_message0: db "ist 5",0 @Pshow_message1: db "ist nicht 5",0 segment .text global _start_main _start_main: push ebp mov ebp, esp push dword [@var_var1] push dword [@var_var2] call _set_vergleichswert_byvar add esp,8 call _vergleiche_cmpeq cmp eax, 1 jne near Le0 push @Pshow_message0 call _show_message add esp,4 jmp near Lj0 Le0: push dword [@var_var1] push dword [@var_var2] call _set_vergleichswert_byvar add esp,8 call _vergleiche_cmpeq cmp eax, 1 jne near Le2 push @Pshow_message1 call _show_message add esp,4 jMP near Lj2 Le2: jmp near Lj2 Lj2: jmp near Lj0 Lj0: push dword 0 call _exit leave ret
mfg
Sergey
-
Hallo Jens,
Schwerpunkt ist, dass Yacc anscheinend kein richtigen Code zurüclgibt.Es gibt nur einen Weg. Debugging, Debugging und noch einmal Debugging.
Könntest du DEINE exe-files (lex.exe und yacc.exe)und Quelldatei zu Rapidshare laden?
-
Es gibt eine Gegenüberstellungstabelle in dem Buch:
Windows System Programming (3rd Edition); Johnson M. Hart; ISBN 0-321-25619-0; Addison Wesley, 2004
-
Der ParserCode erzeugt aus einer Quelldatei NASM (Netwide Assembler) Win32 Code
gcc kann AFAIR auch asm Code erzeugen. Options sind -S und -fverbose-asm
Hast du das probiert?
-
Hallo Jens,
zuerst habe ich falsch verstanden, dass vergleiche_cmpeq pascal-call ist und zwei args hat.
Jetzt habe ich set_vergleichswert_byvar vergleiche_cmpeq gesehen. Beide sind C-call.
Dann ist dieses Code ganz richtig:
...push dword [@var_var1]
push dword [@var_var2]
call _set_vergleichswert_byvar
add esp, 8
call _vergleiche_cmpeq
cmp eax, 1
jne near Le0
...
Und nicht wie:
push @Pshow_messageXXX
call _show_message
sondern, so:
push @Pshow_messageXXX
call _show_message
add esp,4
Wenn _show_message auch C-call ist.
Wenn ich später Zeit habe,dann versuche ich dir helfen.
-
call _set_vergleichswert_byvar add esp, 8
Wenn es C-call ist, dann braucht man zwei PUSHs bevor.push dword [@var_var1] push dword [@var_var2] call _vergleiche_cmpeq
Procedure _vergleiche_cmpeq hat zwei Args. Oder? Warum gibt es keine Args:Le0: call _vergleiche_cmpeq
-
Ich möchte gern procedure "_vergleiche_cmpeq" und "_set_vergleichswert_byvar" in ASM sehen. Dann kann man sagen,warum das Stack nicht gleich Stack ist.
-
Vielleicht habe ich nicht richtig verstanden, was Sie genau erfahren möchten.
variable = 12
asm:
mov [variable],12 ; Intel syntax
movl $12,$variable ; AT&T syntax
-
dann halt aus dem x noch ein abs(x) gemacht
Genau
-
int DigitalCount(int x) { int j=0; while(x>0) { x=x/10; j++; } return j; }
-
Vielleicht braucht man noch msvcm90.dll und msvcr90.dll
-
Ihre Freunde haben kein msvcp90.dll auf PCs.
Deshalb sollen Ihre Freunde msvcp90.dll in C:\Windows\System32 oder in Progs Ordner legen.
[Delphi, YACC] Befehle zum Compilerbau
in Delphi/RPG+CL/Sonstige
Geschrieben
Hallo Jens,
wenn ich später Zeit habe, versuche ich helfen
mfg
Sergey