CYGWIN und NCURSES

30/09/2008 - 20:23 von Jens Kallup | Report spam
Hallo NG,

zur Zeit seniere ich umher, Cygwin als ersatz unter Windows Linux(Befehle)
auszuführen,
ich habe ein neues Update der Pakete aufgespielt.
nun kann ich xbase libs und ncurses libs nutzen.
nun meine frage (weis jetzt nicht so recht ob das hier her passt, aber ein
wenig mit assembler hat es schon zu tun .. also:

in einen programm schreibe ich

push 1
push 1
push dword [Lstr]
call _mvaddnstr
add esp,4
call _refresh
call _getch

leider bleibt das Programm nach
call _endwin

stehen.

kan mir einer mal ein NCurses Beispiel
posten
wàre echt super

Danke und AHoi

Jens :-)
 

Lesen sie die antworten

#1 Ralph rkhb Bauer
30/09/2008 - 21:40 | Warnen spam
Jens Kallup schrieb:
in einen programm schreibe ich

push 1
push 1
push dword [Lstr]
call _mvaddnstr
add esp,4



Also, soweit ich erguggeln konnte, sieht der Funktionskopf von 'mvaddnstr'
so
aus:

mvaddnstr(int y, int x, char *s, int n)

Das bedeutet, dass vier Werte auf den Stack müssen und der Stack für 4 Werte
aufgeràumt werden muss. Außerdem gehe ich mal davon aus, dass die calling
convention 'cdecl' ist und somit alles "von rechts nach links" zu pushen
ist:

push dword [n] ; Zahl
push dword s ; Pointer
push dword [x] ; Zahl
push dword [y] ; Zahl
call _mvaddnstr
add esp, 16 ; Vier Werte zu je 4 Bytes macht 16, nicht mehr und nicht
weniger

Du machst den gleichen Fehler immer wieder: 'add esp, xyz' ràumt den Stack
auf. Jedes - aber wirklich auch *jedes* - Push muss wieder weggeràumt
werden. Auf einem ia32-System (32-Bit) bedeutet ein Push einen Müllhaufen
von 4 Bytes. 4 Pushes sind also 4*4 Bytes. Es heißt also 'add esp, 16'
hinter dem 'call'.

viele grüße
ralph

Ähnliche fragen