663 lines
8.0 KiB
NASM
663 lines
8.0 KiB
NASM
.386
|
|
.model flat
|
|
|
|
OPTION PROLOGUE:NONE
|
|
OPTION EPILOGUE:NONE
|
|
|
|
.data
|
|
_TEXT$00 SEGMENT PARA PUBLIC 'CODE'
|
|
|
|
|
|
PUSHREG macro
|
|
push EBP
|
|
push EBX
|
|
push ESI
|
|
push EDI
|
|
endm
|
|
|
|
POPREG macro
|
|
pop EDI
|
|
pop ESI
|
|
pop EBX
|
|
pop EBP
|
|
endm
|
|
|
|
offs equ 4 * 4
|
|
a0$ = (offs + 4)
|
|
a1$ = (a0$ + 4)
|
|
a2$ = (a1$ + 4)
|
|
a3$ = (a2$ + 4)
|
|
a4$ = (a3$ + 4)
|
|
a5$ = (a4$ + 4)
|
|
|
|
align 16
|
|
@WalkSum@8 PROC
|
|
|
|
PUSHREG
|
|
xor EAX, EAX
|
|
xor EBX, EBX
|
|
xor ESI, ESI
|
|
xor EDI, EDI
|
|
shr EDX, 4
|
|
align 16
|
|
@@:
|
|
ttt = 0
|
|
rept 4
|
|
add EAX, DWORD PTR [ECX + ttt + 0]
|
|
add EBX, DWORD PTR [ECX + ttt + 4]
|
|
add ESI, DWORD PTR [ECX + ttt + 8]
|
|
add EDI, DWORD PTR [ECX + ttt + 12]
|
|
ttt = ttt + 16
|
|
endm
|
|
|
|
add ECX, 64
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
POPREG
|
|
ret 0
|
|
@WalkSum@8 ENDP
|
|
|
|
|
|
align 16
|
|
@WalkWrite@8 PROC
|
|
|
|
PUSHREG
|
|
xor EAX, EAX
|
|
shr EDX, 4
|
|
align 16
|
|
@@:
|
|
ttt = 0
|
|
rept 16
|
|
mov DWORD PTR [ECX + ttt], EAX
|
|
ttt = ttt + 4
|
|
endm
|
|
|
|
add ECX, 64
|
|
dec EDX
|
|
jne @B
|
|
|
|
POPREG
|
|
ret 0
|
|
@WalkWrite@8 ENDP
|
|
|
|
align 16
|
|
@WalkSum2@12 PROC
|
|
|
|
PUSHREG
|
|
mov ESI, DWORD PTR a0$[ESP]
|
|
shl ESI, 2
|
|
mov EDI, ESI
|
|
shl EDI, 1
|
|
xor EAX, EAX
|
|
xor EBX, EBX
|
|
shl EDX, 2
|
|
add EDX, ECX
|
|
align 16
|
|
@@:
|
|
add EAX, DWORD PTR [ECX]
|
|
add EBX, DWORD PTR [ECX + ESI]
|
|
add ECX, EDI
|
|
|
|
cmp ECX, EDX
|
|
jb @B
|
|
|
|
add EAX, EBX
|
|
POPREG
|
|
ret 4
|
|
@WalkSum2@12 ENDP
|
|
|
|
align 16
|
|
@WalkWrite2@12 PROC
|
|
|
|
PUSHREG
|
|
mov ESI, DWORD PTR a0$[ESP]
|
|
shl ESI, 2
|
|
mov EDI, ESI
|
|
mov EBX, ESI
|
|
add EBX, ESI
|
|
add EBX, ESI
|
|
shl EDI, 2
|
|
xor EAX, EAX
|
|
shl EDX, 2
|
|
add EDX, ECX
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov DWORD PTR [ECX], EAX
|
|
mov DWORD PTR [ECX + ESI], EAX
|
|
mov DWORD PTR [ECX + ESI * 2], EAX
|
|
mov DWORD PTR [ECX + EBX], EAX
|
|
add ECX, EDI
|
|
endm
|
|
|
|
cmp ECX, EDX
|
|
jb @B
|
|
|
|
POPREG
|
|
ret 4
|
|
@WalkWrite2@12 ENDP
|
|
|
|
align 16
|
|
@Walk1Add@12 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
shr EDX, 3
|
|
align 16
|
|
@@:
|
|
rept 8
|
|
add EAX, DWORD PTR [ECX + EAX*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk1Add@12 ENDP
|
|
|
|
|
|
|
|
align 16
|
|
@Walk1Nop@12 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
xor EBX, EBX
|
|
align 16
|
|
@@:
|
|
rept 40
|
|
add EAX, EBX
|
|
endm
|
|
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk1Nop@12 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk1@12 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
shr EDX, 3
|
|
align 16
|
|
@@:
|
|
rept 8
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk1@12 ENDP
|
|
|
|
PPP macro x, y
|
|
mov x, DWORD PTR [ECX + y * 4]
|
|
endm
|
|
|
|
QQQ macro x, y
|
|
mov DWORD PTR [ECX + y * 4], x
|
|
endm
|
|
|
|
align 16
|
|
@Walk1w@12 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
shr EDX, 3
|
|
align 16
|
|
@@:
|
|
rept 4
|
|
PPP ESI, EAX
|
|
QQQ ESI, EAX
|
|
PPP EAX, ESI
|
|
QQQ EAX, ESI
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk1w@12 ENDP
|
|
|
|
align 16
|
|
@Walk2@16 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
mov EBX, DWORD PTR a1$[ESP]
|
|
shr EDX, 2
|
|
align 16
|
|
@@:
|
|
rept 4
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
mov EBX, DWORD PTR [ECX + EBX*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
|
|
POPREG
|
|
ret 8
|
|
@Walk2@16 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk2w@16 PROC
|
|
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
mov EBX, DWORD PTR a1$[ESP]
|
|
shr EDX, 2
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
|
|
PPP ESI, EAX
|
|
PPP EDI, EBX
|
|
|
|
QQQ ESI, EAX
|
|
QQQ EDI, EBX
|
|
|
|
PPP EAX, ESI
|
|
PPP EBX, EDI
|
|
|
|
QQQ EAX, ESI
|
|
QQQ EBX, EDI
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
|
|
POPREG
|
|
ret 8
|
|
@Walk2w@16 ENDP
|
|
|
|
align 16
|
|
@Walk3@20 PROC
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
mov EBX, DWORD PTR a1$[ESP]
|
|
mov ESI, DWORD PTR a2$[ESP]
|
|
shr EDX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
mov EBX, DWORD PTR [ECX + EBX*4]
|
|
mov ESI, DWORD PTR [ECX + ESI*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
|
|
POPREG
|
|
ret 12
|
|
@Walk3@20 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk4@24 PROC
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
mov EBX, DWORD PTR a1$[ESP]
|
|
mov ESI, DWORD PTR a2$[ESP]
|
|
mov EDI, DWORD PTR a3$[ESP]
|
|
shr EDX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
mov EBX, DWORD PTR [ECX + EBX*4]
|
|
mov ESI, DWORD PTR [ECX + ESI*4]
|
|
mov EDI, DWORD PTR [ECX + EDI*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
|
|
POPREG
|
|
ret 16
|
|
@Walk4@24 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk5@28 PROC
|
|
PUSHREG
|
|
mov EAX, DWORD PTR a0$[ESP]
|
|
mov EBX, DWORD PTR a1$[ESP]
|
|
mov ESI, DWORD PTR a2$[ESP]
|
|
mov EDI, DWORD PTR a3$[ESP]
|
|
mov EBP, DWORD PTR a4$[ESP]
|
|
shr EDX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EAX, DWORD PTR [ECX + EAX*4]
|
|
mov EBX, DWORD PTR [ECX + EBX*4]
|
|
mov ESI, DWORD PTR [ECX + ESI*4]
|
|
mov EDI, DWORD PTR [ECX + EDI*4]
|
|
mov EBP, DWORD PTR [ECX + EBP*4]
|
|
endm
|
|
|
|
dec EDX
|
|
jne @B
|
|
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
add EAX, EBP
|
|
|
|
POPREG
|
|
ret 20
|
|
@Walk5@28 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk1d@8 PROC
|
|
|
|
PUSHREG
|
|
xor EAX, EAX
|
|
shr ECX, 3
|
|
align 16
|
|
@@:
|
|
rept 8
|
|
mov EDX, DWORD PTR [EDX]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
|
|
POPREG
|
|
ret 0
|
|
@Walk1d@8 ENDP
|
|
|
|
|
|
MMM macro x, y
|
|
mov x, DWORD PTR [y]
|
|
endm
|
|
|
|
NNN macro x, y
|
|
mov DWORD PTR [y], x
|
|
endm
|
|
|
|
|
|
align 16
|
|
@Walk1wd@8 PROC
|
|
|
|
PUSHREG
|
|
xor EAX, EAX
|
|
shr ECX, 3
|
|
align 16
|
|
@@:
|
|
rept 4
|
|
|
|
MMM ESI, EDX
|
|
|
|
NNN ESI, EDX
|
|
|
|
MMM EDX, ESI
|
|
|
|
NNN EDX, ESI
|
|
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
|
|
POPREG
|
|
ret 0
|
|
@Walk1wd@8 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk2d@12 PROC
|
|
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
shr ECX, 2
|
|
align 16
|
|
@@:
|
|
rept 4
|
|
mov EDX, DWORD PTR [EDX]
|
|
mov EBX, DWORD PTR [EBX]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
add EAX, EBX
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk2d@12 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk2wd@12 PROC
|
|
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
shr ECX, 2
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
|
|
MMM ESI, EDX
|
|
MMM EDI, EBX
|
|
|
|
NNN ESI, EDX
|
|
NNN EDI, EBX
|
|
|
|
MMM EDX, ESI
|
|
MMM EBX, EDI
|
|
|
|
NNN EDX, ESI
|
|
NNN EBX, EDI
|
|
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
add EAX, EBX
|
|
|
|
POPREG
|
|
ret 4
|
|
@Walk2wd@12 ENDP
|
|
|
|
align 16
|
|
@Walk3d@16 PROC
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
mov ESI, DWORD PTR a1$[ESP]
|
|
shr ECX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EDX, DWORD PTR [EDX]
|
|
mov EBX, DWORD PTR [EBX]
|
|
mov ESI, DWORD PTR [ESI]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
|
|
POPREG
|
|
ret 8
|
|
@Walk3d@16 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk3wd@16 PROC
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
mov EAX, DWORD PTR a1$[ESP]
|
|
shr ECX, 1
|
|
align 16
|
|
@@:
|
|
rept 1
|
|
|
|
MMM ESI, EDX
|
|
MMM EDI, EBX
|
|
MMM EBP, EAX
|
|
|
|
NNN ESI, EDX
|
|
NNN EDI, EBX
|
|
NNN EBP, EAX
|
|
|
|
MMM EDX, ESI
|
|
MMM EBX, EDI
|
|
MMM EAX, EBP
|
|
|
|
NNN EDX, ESI
|
|
NNN EBX, EDI
|
|
NNN EAX, EBP
|
|
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
add EAX, EDX
|
|
add EAX, EBX
|
|
|
|
POPREG
|
|
ret 8
|
|
@Walk3wd@16 ENDP
|
|
|
|
align 16
|
|
@Walk4d@20 PROC
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
mov ESI, DWORD PTR a1$[ESP]
|
|
mov EDI, DWORD PTR a2$[ESP]
|
|
shr ECX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EDX, DWORD PTR [EDX]
|
|
mov EBX, DWORD PTR [EBX]
|
|
mov ESI, DWORD PTR [ESI]
|
|
mov EDI, DWORD PTR [EDI]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
|
|
POPREG
|
|
ret 12
|
|
@Walk4d@20 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk5d@24 PROC
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
mov ESI, DWORD PTR a1$[ESP]
|
|
mov EDI, DWORD PTR a2$[ESP]
|
|
mov EBP, DWORD PTR a3$[ESP]
|
|
shr ECX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EDX, DWORD PTR [EDX]
|
|
mov EBX, DWORD PTR [EBX]
|
|
mov ESI, DWORD PTR [ESI]
|
|
mov EDI, DWORD PTR [EDI]
|
|
mov EBP, DWORD PTR [EBP]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
mov EAX, EDX
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
add EAX, EBP
|
|
|
|
POPREG
|
|
ret 16
|
|
@Walk5d@24 ENDP
|
|
|
|
|
|
align 16
|
|
@Walk6d@28 PROC
|
|
PUSHREG
|
|
mov EBX, DWORD PTR a0$[ESP]
|
|
mov ESI, DWORD PTR a1$[ESP]
|
|
mov EDI, DWORD PTR a2$[ESP]
|
|
mov EBP, DWORD PTR a3$[ESP]
|
|
mov EAX, DWORD PTR a4$[ESP]
|
|
shr ECX, 1
|
|
align 16
|
|
@@:
|
|
rept 2
|
|
mov EDX, DWORD PTR [EDX]
|
|
mov EBX, DWORD PTR [EBX]
|
|
mov ESI, DWORD PTR [ESI]
|
|
mov EDI, DWORD PTR [EDI]
|
|
mov EBP, DWORD PTR [EBP]
|
|
mov EAX, DWORD PTR [EAX]
|
|
endm
|
|
|
|
dec ECX
|
|
jne @B
|
|
|
|
add EAX, EDX
|
|
add EAX, EBX
|
|
add EAX, ESI
|
|
add EAX, EDI
|
|
add EAX, EBP
|
|
|
|
POPREG
|
|
ret 20
|
|
@Walk6d@28 ENDP
|
|
|
|
|
|
|
|
_TEXT$00 ENDS
|
|
|
|
|
|
end
|