ist dir schon aufgefallen, daß du auf meißt nur AX setzt und mit EAX prüfst?
Code:
STRLEN_DATA_TO_CX macro
@@loop:
inc eax <<<<< hier
inc cx
cmp DATA[eax], 0
jnz @@loop
dec cx
endm
was glaubst du denn, was passiert, wenn beim weiterechnen die WORD-Grenze überschritten wird?
z.B.
String fängt an Adresse $0040fff8 an und ist 32 Zeichen lang
dann ergibt das eine schöne Endlosschleife,
denn die #0 ist dann an Adresse $00410018, aber da nur AX geändert wird, kommst du nur an Adresse $
00400018 vorbei.
Code:
STRLEN_DATA_TO_CX macro
xor cx, cx
cmp eax, 0 // prüfen ob EAX = nil
jz @@end //
@@loop:
inc eax
inc cx
cmp DATA[eax], 0
jnz @@loop
dec cx
@@end:
endm