Beiträge von daybyter im Thema „Fehlermeldung bei Hi-TECH-C im Inlinecode.“

    Kann sein, dass der noch was auf den Stack packt? Kannst nach dem Funktionsaufruf was ausgeben, und schauen, ob das dann angezeigt wird?

    Man sollte vielleicht auch in der Funktion mal was machen, was man kontrollieren kann. Z.B. einen Wert in eine Speicheradresse schreiben, damit man sieht, ob das gemacht wurde.

    Der Pointer auf zahl zeigt ja am Anfang _irgendwo_ hin und dort schreibt man dann 15 rein. Das kann so nicht gut sein.

    Vielleicht besser mal eine int Variable erzeugen und die dann an die Funktion übergeben?

    void main(int argc, char *argv[]) {
    int zahl=15;

    werte(zahl);
    }

    Und im nächsten Schritt einen Pointer nehmen, und ne Änderung machen, die man überprüfen kann.
    Z.B. so:

    char test=0; // sollte test als volatile deklariert sein?
    char *p = &test;

    werte(p);

    und in werte dann z.B. eine 1 in den Speicher schreiben, auf den p zeigt:

    void werte(xyz)
    char *xyz;
    {
    Bitte melde dich an, um diesen Link zu sehen.
    pop de ; save return address
    pop hl ; fetch xyz
    ld a.1
    LD (hl),a ; *p=1; also sollte test jetzt 1 sein
    push hl ; restore stack
    push de ; push return address
    Bitte melde dich an, um diesen Link zu sehen.
    }

    Jetzt sollte test eigentlich 1 sein, und man könnte das ausgeben, um zu schauen, ob das stimmt?

    Ein Stück weiter. Was ich gesagt hab, ist natürlich so Quatsch. Zuerst werden die Parameter auf den Stack gepushed und danach die Return-Adresse. Danach kommen evtl. lokale Variablen der Funktion, aber die haben wir ja hier nicht.



    So etwa könnte ich mir das Beispiel vorstellen...