You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
2.0 KiB
148 lines
2.0 KiB
; 7zAsm.asm -- ASM macros
|
|
; 2018-02-03 : Igor Pavlov : Public domain
|
|
|
|
MY_ASM_START macro
|
|
ifdef x64
|
|
.code
|
|
else
|
|
.386
|
|
.model flat
|
|
_TEXT$00 SEGMENT PARA PUBLIC 'CODE'
|
|
endif
|
|
endm
|
|
|
|
MY_PROC macro name:req, numParams:req
|
|
align 16
|
|
proc_numParams = numParams
|
|
ifdef x64
|
|
proc_name equ name
|
|
else
|
|
proc_name equ @CatStr(@,name,@, %numParams * 4)
|
|
endif
|
|
proc_name PROC
|
|
endm
|
|
|
|
MY_ENDP macro
|
|
ifdef x64
|
|
ret
|
|
else
|
|
if proc_numParams LT 3
|
|
ret
|
|
else
|
|
ret (proc_numParams - 2) * 4
|
|
endif
|
|
endif
|
|
proc_name ENDP
|
|
endm
|
|
|
|
ifdef x64
|
|
REG_SIZE equ 8
|
|
REG_LOGAR_SIZE equ 3
|
|
else
|
|
REG_SIZE equ 4
|
|
REG_LOGAR_SIZE equ 2
|
|
endif
|
|
|
|
x0 equ EAX
|
|
x1 equ ECX
|
|
x2 equ EDX
|
|
x3 equ EBX
|
|
x4 equ ESP
|
|
x5 equ EBP
|
|
x6 equ ESI
|
|
x7 equ EDI
|
|
|
|
x0_W equ AX
|
|
x1_W equ CX
|
|
x2_W equ DX
|
|
x3_W equ BX
|
|
|
|
x5_W equ BP
|
|
x6_W equ SI
|
|
x7_W equ DI
|
|
|
|
x0_L equ AL
|
|
x1_L equ CL
|
|
x2_L equ DL
|
|
x3_L equ BL
|
|
|
|
x0_H equ AH
|
|
x1_H equ CH
|
|
x2_H equ DH
|
|
x3_H equ BH
|
|
|
|
ifdef x64
|
|
x5_L equ BPL
|
|
x6_L equ SIL
|
|
x7_L equ DIL
|
|
|
|
r0 equ RAX
|
|
r1 equ RCX
|
|
r2 equ RDX
|
|
r3 equ RBX
|
|
r4 equ RSP
|
|
r5 equ RBP
|
|
r6 equ RSI
|
|
r7 equ RDI
|
|
x8 equ r8d
|
|
x9 equ r9d
|
|
x10 equ r10d
|
|
x11 equ r11d
|
|
x12 equ r12d
|
|
x13 equ r13d
|
|
x14 equ r14d
|
|
x15 equ r15d
|
|
else
|
|
r0 equ x0
|
|
r1 equ x1
|
|
r2 equ x2
|
|
r3 equ x3
|
|
r4 equ x4
|
|
r5 equ x5
|
|
r6 equ x6
|
|
r7 equ x7
|
|
endif
|
|
|
|
MY_PUSH_4_REGS macro
|
|
push r3
|
|
push r5
|
|
push r6
|
|
push r7
|
|
endm
|
|
|
|
MY_POP_4_REGS macro
|
|
pop r7
|
|
pop r6
|
|
pop r5
|
|
pop r3
|
|
endm
|
|
|
|
|
|
ifdef x64
|
|
|
|
; for WIN64-x64 ABI:
|
|
|
|
REG_PARAM_0 equ r1
|
|
REG_PARAM_1 equ r2
|
|
REG_PARAM_2 equ r8
|
|
REG_PARAM_3 equ r9
|
|
|
|
MY_PUSH_PRESERVED_REGS macro
|
|
MY_PUSH_4_REGS
|
|
push r12
|
|
push r13
|
|
push r14
|
|
push r15
|
|
endm
|
|
|
|
|
|
MY_POP_PRESERVED_REGS macro
|
|
pop r15
|
|
pop r14
|
|
pop r13
|
|
pop r12
|
|
MY_POP_4_REGS
|
|
endm
|
|
|
|
endif
|