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' undefinedWarum 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
-
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!