Witam!
Staram się napisać makro do wyświetlania tekstu na ekranie. Korzystam z GoAsm
Niestety gdy używam Lstrlen (chciałem użyć SIZEOF ale mam probem) do wyliczenia długości łańcucha dubluje mi się tekst w pamięci(kod niżej)
Mam jeszcze pytanie. Jak wyznaczyć początkowy adres łańcucha gdy podaję go z ręki 'asdads' tak jak w macro cout?

#include <windows.h>

cout(text) macro 
invoke lstrlenA,text
invoke WriteFile,[HandleOut],text,EAX,addr keep,0
invoke WriteFile,[HandleOut],addr newline,1,addr keep,0

ENDM

cin(buff) macro 
invoke ReadFile,[HandleIn],addr buff,20,addr Ile,0
ENDM
DATA section

HandleIn DD 0
HandleOut DD 0
keep DD 0
Buff DD 0
Ile DD 0
newline DB 0ah
CODE section
START:
invoke GetStdHandle,-10
mov [HandleIn],eax
invoke GetStdHandle,-11
mov [HandleOut],eax
cout('Podajjakasliczbe')
cout('Psdsd')
cin (Buff)
ret

------edit
Już wiem jak wyznaczyć adres początku łańcucha, mov edi offset text, ale to nie rozwiązało problemu ze dane się dublują
-----edit2
Już rozwiązałem problem wystarczy przy invoke WriteFile,[HandleOut],text,EAX,addr keep,0 zamiast parametru text wstawić adres początku tego parametru który jest w edi