1 ; 7zAsm.asm -- ASM macros 2 ; 2012-12-30 : Igor Pavlov : Public domain 3 4 MY_ASM_START macro 5 ifdef x64 6 .code 7 else 8 .386 9 .model flat 10 _TEXT$00 SEGMENT PARA PUBLIC 'CODE' 11 endif 12 endm 13 14 MY_PROC macro name:req, numParams:req 15 align 16 16 proc_numParams = numParams 17 ifdef x64 18 proc_name equ name 19 else 20 proc_name equ @CatStr(@,name,@, %numParams * 4) 21 endif 22 proc_name PROC 23 endm 24 25 MY_ENDP macro 26 ifdef x64 27 ret 28 else 29 if proc_numParams LT 3 30 ret 31 else 32 ret (proc_numParams - 2) * 4 33 endif 34 endif 35 proc_name ENDP 36 endm 37 38 ifdef x64 39 REG_SIZE equ 8 40 REG_LOGAR_SIZE equ 3 41 else 42 REG_SIZE equ 4 43 REG_LOGAR_SIZE equ 2 44 endif 45 46 x0 equ EAX 47 x1 equ ECX 48 x2 equ EDX 49 x3 equ EBX 50 x4 equ ESP 51 x5 equ EBP 52 x6 equ ESI 53 x7 equ EDI 54 55 x0_L equ AL 56 x1_L equ CL 57 x2_L equ DL 58 x3_L equ BL 59 60 x0_H equ AH 61 x1_H equ CH 62 x2_H equ DH 63 x3_H equ BH 64 65 ifdef x64 66 r0 equ RAX 67 r1 equ RCX 68 r2 equ RDX 69 r3 equ RBX 70 r4 equ RSP 71 r5 equ RBP 72 r6 equ RSI 73 r7 equ RDI 74 x8 equ r8d 75 x9 equ r9d 76 x10 equ r10d 77 x11 equ r11d 78 x12 equ r12d 79 x13 equ r13d 80 x14 equ r14d 81 x15 equ r15d 82 else 83 r0 equ x0 84 r1 equ x1 85 r2 equ x2 86 r3 equ x3 87 r4 equ x4 88 r5 equ x5 89 r6 equ x6 90 r7 equ x7 91 endif 92 93 MY_PUSH_4_REGS macro 94 push r3 95 push r5 96 push r6 97 push r7 98 endm 99 100 MY_POP_4_REGS macro 101 pop r7 102 pop r6 103 pop r5 104 pop r3 105 endm 106