Defines are a way to customize and improve your Doukutsu assembler experience. To use them, you'll need a define block, which starts with #define and ends with #enddefine. offset 405F30 #define // Define macros go here. #enddefine //code goes here.A define in the form: foo=barwill replace all instances of foo with the replacement bar in your assembly-source-code before parsing of the actual code begins. New Instructions If there's an instruction or a variation of an instruction that the Doukutsu Assembler doesn't support, you can still use that instruction by taking advantage of defines. Let's say that you happen to love using the instruction IN AL,DX. The problem is, most people don't use IN AL,DX on a regular basis, so it's not supported. You can still use a define to get around this: offset 00488318 #define IN AL,DX=data EC #enddefine IN AL,DX CMP AL,1 JNE 475000 RETNYou can use OllyDbg or an assembly reference to figure out that IN AL,DX has the hexcode 0xEC, so just use the define IN AL,DX=data EC to replace all instances of IN AL,DX with the hex value EC. In the past, comments were not allowed in the defines block. This isn't true anymore. Go ahead and put comments in the #define/#enddefine block. Naming Your Variables Wouldn't it be nice if you could refer to DWORD PTR DS:[49E6D0] with the name MaxHealth? Well, now you can. Take a look at the following code that uses defined variables: offset 415000 #define npc.xvel=[EDX+10] npc.yvel=[EDX+14] quote.x=[49E654] quote.y=[49E658] npc.xpos=[EDX+8] npc.ypos=[EDX+C] npc.direction=[EDX+4C] setpointer=MOV EDX,[EBP+8] #enddefine setpointer MOV EAX,quote.x CMP EAX,npc.xpos JGE :approach_from_right MOV npc.xvel,400 MOV npc.direction,2 JMP :else1 :approach_from_right MOV npc.xvel,-400 MOV npc.direction,0 :else1 MOV EAX,npc.xvel ADD npc.xpos,EAX MOV EAX,npc.yvel ADD npc.ypos,EAXFile: defines.txt The file defines.txt is the global defines file. You can add more to this file if you want. All defines in defines.txt are always used by the Doukutsu Assembler in addition to anything in the #define/#enddefine block that you specify. You'll notice that jump synonyms, conditional-move synonyms, set-byte synonyms, the SAL instruction, and any MOV EIP,(whatever) instructions are already located inside defines.txt: jpe=jp jpo=jnp jz=je jnz=jne jnl=jge jnle=jg jnge=jl jng=jle jnbe=ja jnae=jb jc=jb jna=jbe jnc=jnb jae=jnb mov eip,="jmp " sal=shl cmovpe=cmovp cmovpo=cmovnp cmovz=cmove cmovnz=cmovne cmovnl=cmovge cmovnle=cmovg cmovnge=cmovl cmovng=cmovle cmovnbe=cmova cmovnae=cmovb cmovc=cmovb cmovna=cmovbe cmovnc=cmovnb cmovae=cmovnb setpe=setp setpo=setnp setz=sete setnz=setne setnl=setge setnle=setg setnge=setl setng=setle setnbe=seta setnae=setb setc=setb setna=setbe setnc=setnb setae=setnbIf you're using an old custom defines list, you may want to update your list with these new default defines. Note: comments are now allowed in defines.txt as well. Quoted Define Values Some characters such as the pipe character are automatically removed in defines. If you want to use them, please see the Quoted Defines Guide. Table of Contents |