I have never seen this Error on a .While statement.
invoke RegisterClassEx, addr wc ; register our window class
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
CW_USEDEFAULT,280,150,NULL,NULL,hInstance,NULL ; Create the window
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow ; display our window
invoke UpdateWindow, hwnd
.WHILE TRUE ; use of register assumed to ERROR
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
I have two errors.
Can someone help me ?
MOV al, [esi]
.IF al > 29h
1st error here .IF al AND al, 0Fh
2nd error here .IF al SUB al, 55 ; problem here
ADD byte ptr [edx+ecx], al
C:\masm32\SOURCE\fixer1.asm(365) : error A2008: syntax error : ,
C:\masm32\SOURCE\fixer1.asm(400) : error A2008: syntax error : SUB
1st error here .IF al AND al, 0Fh
i think you mean this...
.if al&0Fh
which is essentially the same as
test al,0Fh
jz @F
this one - i am not sure what you are trying to do
2nd error here .IF al SUB al, 55 ; problem here
but - see if this makes sense...
sub al,55
.if !ZERO?
which is the same as
sub al,55
jz @F
maybe i am reading you wrong, and you want these...
.if al
and al,0Fh
.endif
that doesn't really make sense
because, if AL is 0 to begin with, ANDing it won't change its' value
.if al
sub al,55
.endif
i had trouble with these - and i am still not super-comfortable with .IF/.ELSEIF/.ELSE/.ENDIF syntax
what i do is write what i think it should be, then look at the disassembled code
Thanks Dave.
I am down to one error.
Sorry it looks sloppy right now.
Stayed up late.
C:\masm32\SOURCE\reparieren.asm(438) : fatal error A1010: unmatched block nesting : .if-.repeat-.while
WndProc endp
; Change a string to its byte equivalent.
; Use only numbers, and uppercase letters
Convert proc LpBuffer:DWORD,LpString:DWORD
push eax
push esi
push ecx
push edx
mov esi, LpBuffer
mov edx, LpString
xor ecx, ecx
MORE :
MOV al, [esi]
.IF al > 29h
;.IF al AND al, 0Fh
.if al&0Fh
IMUL eax, 10h
.ELSE
.IF al>64
.IF al
SUB al, 55
IMUL eax, 10h
.ENDIF
.ENDIF
.ENDIF
;.ENDIF
MOV byte ptr [edx+ecx], al
INC esi
mov al, [esi]
.IF al >29h
;.IF al AND al, 0Fh
.if al&0Fh
ADD byte ptr [edx+ecx], al
.ELSE
.IF al > 64
;.IF al SUB al, 55 ; problem here
sub al,55
.if !ZERO?
ADD byte ptr [edx+ecx], al
.ENDIF
.ENDIF
;.ENDIF
;.ENDIF
.IF byte ptr [edx+ecx] != NULL
INC esi
INC ecx
JMP MORE
.ENDIF
mov StrLen2, ecx
pop edx
yah - that's why they use indentation - so you can see them matched up
i am not crazy about IF/ELSE or indentation - lol
not sure where you want the .ENDIF's
but, maybe this will help...
; Change a string to its byte equivalent.
; Use only numbers, and uppercase letters
Convert proc LpBuffer:DWORD,LpString:DWORD
push eax
push esi
push ecx
push edx
mov esi, LpBuffer
mov edx, LpString
xor ecx, ecx
MORE :
MOV al, [esi]
.IF al > 29h
;.IF al AND al, 0Fh
.if al&0Fh
IMUL eax, 10h
.ELSE
.IF al>64
.IF al
SUB al, 55
IMUL eax, 10h
.ENDIF
.ENDIF
.ENDIF
;.ENDIF
MOV byte ptr [edx+ecx], al
INC esi
mov al, [esi]
.IF al >29h
;.IF al AND al, 0Fh
.if al&0Fh
ADD byte ptr [edx+ecx], al
.ELSE
.IF al > 64
;.IF al SUB al, 55 ; problem here
sub al,55
.if !ZERO?
ADD byte ptr [edx+ecx], al
.ENDIF
.ENDIF
;.ENDIF
;.ENDIF
.IF byte ptr [edx+ecx] != NULL
INC esi
INC ecx
JMP MORE
.ENDIF
mov StrLen2, ecx
pop edx
pop ecx
pop esi
pop eax
ret
Convert endp
notice that, when you have an .ELSE immediately followed by an .IF, they can be combined to .ELSEIF
.ELSE
.IF al > 64
.ELSEIF al > 64