Zum Inhalt springen

paule22

Mitglieder
  • Gesamte Inhalte

    190
  • Benutzer seit

  • Letzter Besuch

  1. Hallo, suche nach einer Möglichkeit, den Code für __alloca, __main __argv in source Form in naswm.exe (netwide assembler) zu verwandeln und anzuwenden. Wer Ideen hat, bitte schreiben. Grund des Anliegens: mit alink.exe obj Dateien unter Windows linken, ohne das GCC System auf den Computersystem zu verwalten. Bis jetzt crasht das Programm immer, wenn ich mit alink.exe linke. Könnte daher zusammenhängen, das die verwendeten C++ Klassen noch nicht initialisiert sind. Gruß pauel22
  2. Hallo, wie kann ich den Developer Flash Server 3.5 und den Live Flash Encoder im AuslieferungsZustand verwenden, das der Server richtiger eeise koreckt connectiert? Bei meinen Versuchen kommt stets die Meldung: "Can'T connect to Primary Server .." Was mach ich da falsch? Für sachdienliche Tipps sind gern gesehen Gruß paule
  3. Hallo, wie kann ich wie in Flash CS3 üblich, ein FLVPlayer Object auf die Bühne platzieren? Ich habe nach den Component gesuch, aber nichts gefunden. Wäre froh, wenn jemand weiterhelfen kann. Danke paule22
  4. Hallo Perfiliev! unter: RapidShare: Easy Filehosting habe ich eine abgeänderte Yacc-Datei hochgeladen. Ich habe alle möglichen Varianten + num = num + num = exp + exp = num + exp = exp primitiv programmiert. Klappt auch so weit gut mit var1 = 10.3 var2 = 2.1 if var1 = var2 ... allerdings tritt jetzt das ein Problem auf, wenn ich: var0 = 1.2 var1 = 10.2 var3 = 1.1 + var0 // <-- hier if var3 = ....- dann wird das AssemblerFile derart verstopft ... kannst Du mal nachschauen und ggf. eine Lösung posten? Vielen Dank Jens
  5. Danke Perfiliev! wenn Du anstelle der pcode.pas, die pcode.y gepostet hättest, wäre mir ein klein wenig Sucharbeit ersparrt geblieben. Aber naja, fürs erste geht das schon. Danke es funktioniert. Woher Du nur die ganzen Ideen herzauberst ;-) Gruß Jens
  6. Bitte sehr, hoffe das hilft! RapidShare: Easy Filehosting Gruß Jens
  7. Hallo Perfiliev, ja habe ich. geht prima. aber das ist nicht der Schwerpunkt. Schwerpunkt ist, dass Yacc anscheinend kein richtigen Code zurüclgibt. Gruß Jens
  8. Hallo Perfiliev, vielleicht sollte ich etwas zu dem Projekt sagen ... Es handelt sich hierbei wohl eher um einen Skript-Compiler. Das hört sich jetzt vielleicht lustig an, ist aber so :-) Der Kern des Compilers wurde von mir in Delphi 7 gestartet/programmiert. Mittlerweile wird das Projekt unter Windows Vista und CodeGear (Delphi 2009) weiter entwickelt, da es zu Problemen mit Delphi 7 unter Vista (Kompatibilität) gab. Unter dem WebLink: TP Lex/Yacc kann man die tply41a.zip downloaden (Yacc für Pascal) So als Grundlage für den Compiler dient der nopaste code vom letztem Posting. Yacc ist ja Stack basierend, vielleicht hier die kleine Unmissverständlichkeit. Der ParserCode erzeugt aus einer Quelldatei NASM (Netwide Assembler) Win32 Code. NASM verwende ich dann um den ASM-Text/Ausgabe in Win32 obj binary umzuwandeln. Dieser obj Code ist kompatibel mit den MingW32 GCC Compiler. Deshalb auch meine Wahl des Assemblers. Mittels selbst geschriebener Lib's (ausser Qt 4.3.4) werden dann die Daten gegeneinander zu einer EXE Datei gelinkt. Eine BATCH Datei würde dann so aussehen: set path=i:\mingw\bin;i:\qt\4.3.4\bin;%path% nasm -f win32 11.asm g++ -o 11.exe 11.obj -Li:\Qt\4.3.4\lib -L.\lib -lkalib -lkagraph -lxbase -lkernel32 -lwin32k -lQtCore4 -lqtmain -lQtGui4 Nun zu den cmp Funktionen: Dazu dient ein Ausschnitt aus der Datei jk_class.cc: ... float ErgebnisWert = 0.0; float vglwertA1 = 0; float vglwertA2 = 0; extern "C" void set_vergleichswert_A1(int nach, int vor) { vglwertA1 = QString("%1.%2").arg(vor).arg(nach).toFloat(); } extern "C" void set_vergleichswert_A2(int nach, int vor) { vglwertA2 = QString("%1.%2").arg(vor).arg(nach).toFloat(); } // die folgende Funktion muss noch angepasst werden // Sie steht nur exemplarisch (erstmal) hier aufgelistet ... extern "C" void set_vergleichswert_byvar(float v1, float v2) { vglwertA1 = v1; vglwertA2 = v2; } extern "C" int vergleiche_cmpeq(void) { if (vglwertA1 == vglwertA2) return 1; else return 0; } ... Zu Deiner Frage mit (siehe obigen Code _exemplarisch_), ja das ist richtig, aber das ist das wenigste Problem (erstmal). _vergleiche_cmpeq hat wie im Code oben zu sehen ist kein Argument. Zu den CodeAbschnitt Je0: call _vergleiche_cmpeq hier handelt es sich um eine NichtOptimierter Codestelle. Es wird halt nochmals auf "=" (Gleichheit) geprüft - der Compiler in seiner jetzigen Form ist halt noch ein recht dummy/dummer Automat, der keinen optimierten Code auswirft. So das dazu erstmal. Nun zum eigentlichem Problem: Das Programm YACC (so scheint es mir) ist ein STACK/(Keller) (YetAnother) Compiler-Compiler Tool. Doch warum verhält sich dieses Tool so merkwürdig? Beispiel: zahl : NUMMER_TOKEN ; t_var : /* kann leer bleiben */ | zahl zahl { wird als Stack von links nach rechts ausgewertet also zahl1 dann zahl2 } ; verständlich :confused: Also müsste doch mit dem vorliegenden YACC-Code der AsmCode nicht wie: ... call _set_vergleichswert_byvar add esp, 8 push dword [@var_var1] push dword [@var_var2] call _vergleiche_cmpeq ... aussehen, sondern so: ... push dword [@var_var1] push dword [@var_var2] call _set_vergleichswert_byvar add esp, 8 call _vergleiche_cmpeq cmp eax, 1 jne near Le0 ... oder liege ich da jetzt falsch? Für sachdienliche Hinweise bin ich sehr dankbar! Gruß Jens
  9. Hallo, wie man ein Assemblerprogramm schreiben kann, ist für mich noch etwas neuland. Kann aber schon Konstrukte aufstellen. unter nopaste.info - free nopaste script and service könnt Ihr eine etwas überarbeitete Version vorfinden. Was mir komisch vorkommt ist, das Stack nicht gleich Stack ist. Zum Beispiel beginnend ab Zeile 256 hochrangelnd auf Zeile 216 -> expr (Zeile 88) -> weiter bei Zeile 118. Warum wird dann folgender Code erzeugt: Für Ideen und Vorschläge bin ich jedem dankbar! Gruß Jens --- BITS 32 cpu 486 extern _exit, _show_message extern _set_vergleichswert_A1 extern _set_vergleichswert_A2 extern _set_vergleichswert_byvar extern _vergleiche_cmpeq @var_var1: dd 10 @Pshow_message0: db "ist 5",0 @Pshow_message1: db "juhu 5",0 @Pshow_message2: db "nuja halt 7",0 @Pshow_message3: db "ok",0 @Pshow_message4: db "ist nicht 5",0 segment .text global _start_main _start_main: push ebp mov ebp, esp ; die folgende Zeilen müssten doch theoretisch ; unter push [@var_var2] stehen? ; mache ich einen Programmierfehler oder liegt ; das Problem am Yacc? call _set_vergleichswert_byvar add esp, 8 push dword [@var_var1] push dword [@var_var2] call _vergleiche_cmpeq cmp eax, 1 jne near Le0 push @Pshow_message0 call _show_message jmp near Lj0 Le0: call _vergleiche_cmpeq cmp eax, 1 jne near Le2 push @Pshow_message1 call _show_message jMP near Lj2 Le2: call _vergleiche_cmpeq cmp eax, 1 jne near Le4 push @Pshow_message2 call _show_message push @Pshow_message3 call _show_message jMP near Lj4 Le4: push @Pshow_message4 call _show_message jmp near Lj4 Lj4: jmp near Lj2 Lj2: jmp near Lj0 Lj0: push dword 0 call _exit leave ret --- der QuellCode schaut wie folgt aus: ... var1 = 10 //var2 = 1 if var1 = var2 showmessage("ist 5") elseif 5 = 7 showmessage("juhu 5") elseif 5 = 5 showmessage("nuja halt 7") showmessage("ok") else showmessage("ist nicht 5") endif ...
  10. Hallo Miteinander! Ich bin gerade dabei einen Compiler zu schreiben. Wie kann ich den Ausdruck: ident '=' expr (Zeile: 218) also: variable = 12 in Assembler umsetzen? Als Grundlage soll folgender Yacc Source dienen: nopaste.info - free nopaste script and service Für Anregungen und Informationen bin ich jedem dankbar. MfG paule22
  11. Hallo Ihr beiden, unter nopaste.info - free nopaste script and service habe ich meine Bemühungen von heute morgen gepostet. Ich meinte mit endlos Tiefe, das geschachtelte IF ELSEIF ELSE ENDIF Anweisungen zu realisieren. Der Code funktioniert fast, mit der Ausnahme, das unter dem EndIF stehende Anweisungen nicht mehr behandelt werden z.B.: if 2 = 2 zwei.ontimer = ok if 4 = 4 vierzwei.ontimer = ok4 else zweiff.ontimer = false4 endif // hier wird der code irgendwie abgeschnitten zweidrei.ontimer = ok2 else zwei.ontimer = false endif könnt ihr mal bitte ein Auge drauf werfen? Danke! Die yacc Software kann unter: Albert Gräf's Homepage geladen werden. Gruß paule P.S.: per yacc übersetzt, müssen ein paar Zeilen ersetzt werden ... Zeile 65: type YYSType = record yylbl : lbl ; end(*YYSType*); Zeile 932 bis 936 auskommentieren .... : (* if yysp>yymaxdepth then begin yyerror('yyparse stack overflow'); goto abort; end; *) Und ja, Andy, ich will einen 32 Bit code basteln ... nasm.exe
  12. Hallo, wie kann ich eine (endlos) Tiefenschleife programmieren, die IF expr = expr code ELSEIF code ELSE code ENDIF Programmcode ausgeben kann? Zweck: Compilerbau, x86 32-Bit Assembler Output. Danke für Infos und Codebeispiele paule22 P.S: Hier der momentane Code : function TParserClass.handle_if: Boolean; label label_if, start_if; var c: char; cs,s2: String; l,i,b: integer; begin start_if: if_counter := if_counter+1; if_counter_tmp := if_counter; c := skip_white_space; if c in ['_','A'..'Z','a'..'z'] then begin ident_str := c; scan_ident; cs := ident_str; c := skip_white_space; if c = '=' then begin c := skip_white_space; if (c >= '0') and (c <= '9') then begin num_str := c; scan_num; s2 := FActiveClass+':'+FActiveObject; i := FEventCodeOutput.IndexOf(s2); if i > -1 then begin if if_counter > 1 then TStringList(FEventCodeOutput.Objects).Add(#9+'mov dword eax, ' + num_str); TStringList(FEventCodeOutput.Objects).Add(#9+'cmp dword eax, [@v_' + cs + ']'); TStringList(FEventCodeOutput.Objects).Add(#9+'jne near Lv_'+inttostr(if_counter)); l := yylex; if l = TOK_THEN then begin label_if: l := yylex; if l = TOK_ELSE then begin end else if l = TOK_ENDIF then begin TStringList(FEventCodeOutput.Objects).Add('Lv_'+inttostr(if_counter)+':'); end else if l = TOK_SHOWMESSAGE then begin handle_showmessage; TStringList(FEventCodeOutput.Objects).Add('Lv_'+inttostr(if_counter)+':'); dec(if_counter); l := yylex; if l = TOK_ELSE then begin TStringList(FEventCodeOutput.Objects).Add(#9+'jmp Lv_'+inttostr(if_counter)); end else if l = TOK_SHOWMESSAGE then showmessage('msfg') else if l = TOK_ENDIF then begin TStringList(FEventCodeOutput.Objects).Add(#9+'jmp Lv_'+inttostr(if_counter)); end else handle_parser_code(l); //goto label_if; end; end; end; end; end; end; end(*handle_if*);
  13. Hallo, arbeite gerade mit VC6 Autoren Edition ... habe von folgenden Link Code gesaugt ... flipcode - Programming a Virtual File System Leider kann ich daraus keine EXE erstellen, da der Linker mekkert, das uafxcw-lib nicht gefunden werden konnte. Habe SP6 aufgespielt, und er mekkert immer noch :-( Habe im Netz geschaut, konnte aber keinen DownloadLink finden. Hilfe!!! Wer kennt dieses Problem und kann helfen? Danke paule
  14. Hallo, habe vor, eine Client/Server Anwendung zu schreiben, bei der kontinuierlich eine Anfrage erstellt und ein Response erzeugt werden soll. Im konkreten Fall, soll "GET /" am Server ausgelesen werden und dann soll ein Text an den Client zurück geschrieben werden. Aber das klappt irgendwie nicht ... kann mich da einer bitte helfen Danke schonmal. ... ///////////// // mserver.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <netdb.h> #define BUF_SIZ 4096 int send_request(const int sock, const char *hostname) { char request[BUF_SIZ]; snprintf(request, sizeof(request), "GET /\r\n" "Host: %s\r\n" "\r\n\r\n", hostname); if (send(sock, request, strlen(request), 0) == -1) { perror("send() failed"); return 1; } return 0; } int view_response(const int sock) { char response[BUF_SIZ]; int bytes; while((bytes = recv(sock, response, sizeof(response), 0)) > 0) fwrite(response, 1, bytes, stdout); if (bytes < 0) { perror("recv() failed"); return 1; } return 0; } int main(int argc, char *argv[]) { struct hostent *host; struct sockaddr_in addr; int s; if (argc < 2) { fprintf(stderr, "usage: %s <host>\n", argv[0]); return 1; } if (!inet_aton(argv[1], &addr.sin_addr)) { host = gethostbyname(argv[1]); if (!host) { herror("gethostbyname() failed"); return 2; } addr.sin_addr = *(struct in_addr*)host->h_addr; } s = socket(PF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket() failed"); return 3; } printf("connecting to %s:7000...", inet_ntoa(addr.sin_addr)); fflush(stdout); addr.sin_port = htons(7000); addr.sin_family = AF_INET; if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) == -1) { perror("connect() failed"); return 4; } puts("ok."); if (send_request(s, argv[1])) return 5; if (view_response(s)) return 6; close(s); return 0; } ///////////////////////////////////////////// // mclient.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define BUF_SIZ 4096 int handle_client(const int sock) { char buffer[BUF_SIZ], puffer[200], *p, pget[126]; int bytes; strcpy(puffer,""); strcpy(pget,"GET /"); while((bytes = recv(sock, buffer, sizeof(buffer), 0)) > 0) strcat(puffer,buffer); p = strstr(puffer,pget); fprintf(stderr,"puffer = %s\n",p); if (strlen(p) > 0) { strcpy(buffer,"Hallo getter :-)\r\n"); send(sock, buffer, strlen(buffer), 0); } else { strcpy(buffer,"NOT FOUND\r\n"); send(sock, buffer, strlen(buffer), 0); } return 0; } int main(void) { int s, c, addr_len; struct sockaddr_in addr; s = socket(PF_INET, SOCK_STREAM, 0); if (s == -1) { perror("socket() failed"); return 1; } addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(7000); addr.sin_family = AF_INET; if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) == -1) { perror("bind() failed"); return 2; } if (listen(s, 3) == -1) { perror("listen() failed"); return 3; } for(; { addr_len = sizeof(addr); c = accept(s, (struct sockaddr*)&addr, &addr_len); if (c == -1) { perror("accept() failed"); continue; } printf("Client from %s\n", inet_ntoa(addr.sin_addr)); handle_client(c); close(c); } close(s); return 0; } [/code]
  15. Hallo, ich bekomme folgende Ausgabe: c=a+b*c, a=4.94066e-324, b=9.88131e-324, c=0 c=a+b*c, a=4.94066e-324, b=9.88131e-324, c=0 nach der Übersetzung (Netwide Assembler und MinGW gcc): nasm -fwin32 z1.s gcc -o z1.exe z1.obj woran kann dss liegen, das so komische werte rauskommen??? hier der code (auch nachzulesen unter: Sample nasm programs ) BITS 32 extern _printf %macro pabc 1 ; a "simple" print macro section .data .str db %1,0 ; %1 is macro call first actual parameter section .text ; push onto stack backwards push dword [c+4] ; double c (bottom) push dword [c] ; double c push dword [b+4] ; double b (bottom) push dword ; double b push dword [a+4] ; double a (bottom) push dword [a] ; double a push dword .str ; users string push dword fmt ; address of format string call _printf ; Call C function add esp,32 ; pop stack 8*4 bytes %endmacro section .data fmt: db "%s, a=%g, b=%g, c=%g",10,0 a: dq 1 b: dq 2 five: dq 5.0 ; constant 5.0 section .bss ; unitialized space c: resq 1 ; reserve a 64-bit word section .text global _main _main: @l1: fld qword [a] fld qword fld qword [c] fmulp faddp pabc "c=a+b*c" mov eax, 0 leave ret Am Ende der Anwendung wird auch ein Speicherzugriffs Meldung von Windows ausgespuckt *pfui ...

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...