Source code

Revision control

Copy as Markdown

Other Tools

; 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↩