Wofür sind MACROS gut ?
-
Hallo, über macros hab ich noch nie ein tutorial gesehen
Ich verwende sie gern für win32
z.b.:; --------------------- ; literal string MACRO ; --------------------- literal MACRO quoted_text:VARARG LOCAL local_text .data local_text db quoted_text,0 .code EXITM <local_text> ENDM ; -------------------------------- ; string address in INVOKE format ; -------------------------------- SADD MACRO quoted_text:VARARG EXITM <ADDR literal(quoted_text)> ENDM invoke WritePrivateProfileString ,SADD("settings"),SADD("Mykey"),addr text1,SADD("C:\Text.txt")
Wo krieg ich macros infos ?
-
Was hat der Titel mit deiner Frage zu tun???
Tut mir leid, kA wo's das gibt. Ich sag nur: goooooooooooooooglen
-
Antwort auf deine Frage im Titel:
Makros bestehen aus einem oder mehreren Befehlen, die durch den Makronamen zusammengefasst werden. Wenn du diese Befehele im Programm benötigst, dann gibst du einfach den Namen des Makros an. Dieser Makro wird vom Assembler beim Assemblieren durch die im Makro enthaltenen Befehel im Source ersetzt.Code-Hacker
-
Also wenn jemand ein tutorial über Macros finden sollte, dann bitte sofort bescheid sagen. Ich habe auch schon mal danach gesucht, aber nichts gefunden. Ich kenne sogar ein Macro, das die CRC32 von einem String berechnen kann und nichts weiter als ein DD mit der entsprechenden CRC initialisiert erzeugt.
-
Ist ein Macro dann dasselbe wie eine Funktion???
-
falls der macro einen wert zurückgibt könnte man ihn so nennen.
eine funktion ist aber meistens ein aufruf einer prozedur, die irgendwo im speicher ist.
ein macro dagegen steht nur für eine ansammlung von befehlen, die beim assemblieren, an die stelle des macronamens eingefügt werden.
-
also wie #define nur, dass mehrere Befehle eingefügt werden?
-
MACRO TUTORIAL GIBTS HIER
http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/ProgrammersGuide/Chap_09.htm
leider in fach englisch
-
Niklas Cathor schrieb:
also wie #define nur, dass mehrere Befehle eingefügt werden?
In einem C-Makro können auch mehrere Befehle drin sein.
-
SingleInstanceOnly MACRO lpClassName invoke FindWindow,lpClassName,NULL cmp eax, 0 je @F push eax invoke ShowWindow,eax,SW_RESTORE pop eax invoke SetForegroundWindow,eax mov eax, 0 ret @@: ENDM
Benutzung wie folgt:
SingleInstanceOnly ADDR szClassName
-
strcat MACRO arguments:VARARG txt equ <invoke szMultiCat,> ;; lead string pcount = 0 FOR arg, <arguments> pcount = pcount + 1 ;; count arguments ENDM % pcount = pcount - 1 ;; dec 1 for 1st arg txt CATSTR txt,%pcount ;; append number to lead string FOR arg, <arguments> txt CATSTR txt, <,ADDR arg> ;; append 'ADDR' + args ENDM txt ;; put result in code ENDM
Benutzung wie folgt:
strcat buffer,str1,str2,str3 etc ...