JMP findet Labals nicht



  • Hallo!

    Ich hab wieder einmal ein Problem
    Wenn ich den unten stehenden gekürzten Code in der nicht gekürzten Version assembliere, bekomme ich folgende Fehlermaldungen: 😞

    C:\lab\vasm\projects\@\Project3\Project3.prj.asm:127: error: symbol .minus' undefined C:\\lab\\vasm\\projects\\@\\Project3\\Project3.prj.asm:129: error: symbol.mal' undefined
    C:\lab\vasm\projects\@\Project3\Project3.prj.asm:131: error: symbol `.durch' undefined

    Warum bekomme ich die Fehler? Was kann ich gegen die Fehler tun? 😕

    ; Rechner.asm (gekuerzt)
    .Command:
        mov eax, dword [wParam] 
        cmp eax, PLUSBTN_ID
        je .plus        ; Zeile 125
        cmp eax, MINUSBTN_ID
        je .minus       ; Zeile 127
        cmp eax, MALBTN_ID
        je .mal         ; Zeile 128
        cmp eax, DURCHBTN_ID
        je .durch       ; Zeile 131
        xor eax, eax
        leave
        ret 16
    .plus:  ; Dieses Label wird noch gefunden...
        ; viel Code
        xor eax, eax
        leave
        ret 16
    .minus: ; Dieses Label nicht... Obwohl ich es richtig geschriben habe...
        ; viel Code
        xor eax, eax
        leave
        ret 16
    .mal:   ; Auch dieses wird nicht gefunden... Verstecht es sich irgendwie?
        ; viel Code
        xor eax, eax
        leave
        ret 16
    .durch: ; Und auch das nicht... Warum bloß??? *ratlos*
        ; viel Code
        xor eax, eax
        leave
        ret 16
    

    Hoffentlich lässt sich dieses Problem genau so einfach lösen wie das Andere.

    Edit: Ein paar Schönheitsfehler korrigert...

    [ Dieser Beitrag wurde am 02.11.2002 um 21:47 Uhr von mastercpp editiert. ]



  • hm... Was fuer einen Compiler benutzt Du?



  • Ich benutzte den Netwide Assembler (mit der NaGoA RAD IDE).



  • Ich würde mal behaupten, das du die Labels aufrufts (in .command) bevor der Assembler diese überhaupt "gesehen" hat. Denn er weiß erst nach .Command wo sie auftauchen. Entwerder du verfrachtest .Command unter die nicht gesehenen Labels oder du definierst vor .Command diese als Dummy.



  • Ich habe .Command nach unten verlegt.
    Doch jetzt wird gar nicht mehr gefunden: 😞

    C:\lab\vasm\projects\Rechner\Rechner.asm:88: error: symbol .Command' undefined C:\\lab\\vasm\\projects\\Rechner\\Rechner.asm:402: error: symbol.plus' undefined
    C:\lab\vasm\projects\Rechner\Rechner.asm:404: error: symbol .minus' undefined C:\\lab\\vasm\\projects\\Rechner\\Rechner.asm:406: error: symbol.mal' undefined
    C:\lab\vasm\projects\Rechner\Rechner.asm:408: error: symbol `.durch' undefined



  • Original erstellt von Artchi:
    Ich würde mal behaupten, das du die Labels aufrufts (in .command) bevor der Assembler diese überhaupt "gesehen" hat. Denn er weiß erst nach .Command wo sie auftauchen. Entwerder du verfrachtest .Command unter die nicht gesehenen Labels oder du definierst vor .Command diese als Dummy.

    Nein, der Assembler geht eigentlich zweimal durch, das erste mal um Labels etc. zu bestimmen und beim zweiten Mal um dann erst zu assemblieren

    @mastercpp:
    benutzt du evtl. in deinen routinen wie .plus andere Labels? Die . Labels gelten ja nur bis zum nächsten normalen Label



  • @TriPhoenix

    Ja, das ich benutzte ich meinen vier routinen (.plus, .minus, .mal, .durch) andere Labels.

    Beispiel:

    .plus
        call SendDlgItemMessage, [hwnd], EDIT1_ID, WM_GETTEXT, 10, offset strZahl1
        call SendDlgItemMessage, [hwnd], EDIT2_ID, WM_GETTEXT, 10, offset strZahl2
    
        mov ebx, 0
        mov ecx, 0
        xor eax,eax
        mov ebx,0000000Ah
        mov esi,offset strZahl1
        @@ConvertLoop0:
        movzx ecx,byte [esi] ;Zeichen laden.
        test ecx,ecx
        jz  short @@ExitConvertLoop0 ;0=>Exit
        inc esi
        sub cl,30h              ;0-9...
        mul ebx                  ;Ergebnis * 10
        add eax,ecx               ;+naechste Ziffer
        jmp short @@ConvertLoop0
        @@ExitConvertLoop0:
    
        push eax
    
        mov ebx, 0
        mov ecx, 0
        xor eax,eax
        mov ebx,0000000Ah
        mov esi,offset strZahl2
        @ConvertLoop0:
        movzx ecx,byte [esi] ;Zeichen laden.
        test ecx,ecx
        jz  short @ExitConvertLoop0 ;0=>Exit
        inc esi
        sub cl,30h              ;0-9...
        mul ebx                  ;Ergebnis * 10
        add eax,ecx               ;+naechste Ziffer
        jmp short @ConvertLoop0
        @ExitConvertLoop0:
    
        pop ebx
        add ebx, eax
        mov eax, ebx
    
        @@start0:
        xor  ecx, ecx
        mov  ebx, 000ah
        @@DecConvert0:
        xor  edx,  edx
        div  ebx 
        add  edx,  0030h
        push edx
        inc  ecx
        or   eax,  eax
        jnz  short @@DecConvert0
        mov  edi,  offset strErg
        @@SortDec0:
        pop   eax
        stosb 
        loop  @@SortDec0
        mov eax, 0h
        stosb
    
        call SendDlgItemMessage, [hwnd], EDIT3_ID, WM_SETTEXT, 10, offset strErg
    
            xor eax, eax
        leave
        ret 16
    

    [ Dieser Beitrag wurde am 03.11.2002 um 19:33 Uhr von mastercpp editiert. ]



  • evtl. stört ihn das, versuch mal probeweise anstatt der labels wie .plus globale Labels zu nehmen, sowas wie blabla_plus:



  • Jetzt gehts. Danke!


Anmelden zum Antworten