Go to resource overview / Go to function listing
Attention: This page only addresses Filter Factory 3.x for Photoshop/Win32.
The OPER resource contains the assembly code of all functions, operators and so on. At runtime, the formula term will be parsed and the assembly code of each function will be concatenated, so that in the end you have an assembly code for your formula. Alas, this compilation is not saved in a 8bf filter you can generate -- instead, the formula gets written in the 8bf file and will be re-parsed on each use.
The very first element of the assembly code is "prolog".
Condition at "error" or "epilog":
eax contains the output value for the current channel
ebp is restored (was saved by "prolog")
esi is restored (was saved by "prolog")
edi is restored (was saved by "prolog")
esp is restored (was saved by "prolog")
You may edit eax, ebx, ecx, edx, esi, (ebp?)
You may not edit edi
Contains the parameters
pop eax param2 (= [esp])
pop ebx param1 (= [esp+$04])
pop ecx param0 (= [esp+$08])
Syntax of this resource:
struct OPER { _operation[0..n] operations; _operation padding; // must be zeroed } struct _operation { AnsiChar[8] szOperationName; (u?)int16_t asmSize; byte[asmSize] asmX86Code; }
Download dump of Filter Factory 3.0.4 for Photoshop/Windows
Function | Size (dec.) | Assembly code |
error | 3 | 2B C0 C3 |
prolog | 8 | 55 56 57 54 8B 7C 24 14 |
epilog | 6 | 58 5C 5F 5E 5D C3 |
number | 1 | 68 |
, | 1 | 58 |
? | 11 | 58 5B 59 83 F9 00 74 02 8B C3 50 |
! | 9 | 58 83 F8 01 1B C0 F7 D8 50 |
&& | 19 | 58 5B 83 F8 00 B8 00 00 00 00 74 06 83 FB 00 74 01 40 50 |
|| | 19 | 58 5B 83 F8 00 B8 00 00 00 00 75 05 83 FB 00 74 01 40 50 |
~ | 4 | 58 F7 D0 50 |
& | 5 | 58 5B 23 C3 50 |
| | 5 | 58 5B 0B C3 50 |
^ | 5 | 58 5B 33 C3 50 |
== | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 94 C0 50 |
!= | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 95 C0 50 |
< | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 9F C0 50 |
<= | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 9D C0 50 |
> | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 9C C0 50 |
>= | 13 | 58 5B 3B C3 B8 00 00 00 00 0F 9E C0 50 |
<< | 5 | 59 58 D3 E0 50 |
>> | 5 | 59 58 D3 E8 50 |
negate | 4 | 58 F7 D8 50 |
+ | 5 | 58 5B 03 C3 50 |
- | 5 | 5B 58 2B C3 50 |
* | 6 | 58 5B 0F AF C3 50 |
/ | 14 | 5B 58 0B DB 75 04 2B C0 EB 03 99 F7 FB 50 |
% | 14 | 5B 58 0B DB 75 04 2B D2 EB 03 99 F7 FB 52 |
r | 3 | 8B 07 50 |
g | 4 | 8B 47 04 50 |
b | 4 | 8B 47 08 50 |
a | 4 | 8B 47 0C 50 |
c | 10 | 8B 47 58 2B 47 5C 8B 04 87 50 |
i | 55 | 8B 77 04 8D 34 B6 03 F6 8D 34 76 8D 34 B6 8B 4F 08 8B
D1 C1 E1 03 2B CA 8D 0C 8A 03 F1 8B 07 8B C8 8D 04 C0 8D 04 41 8D 04 86 99 81 E2 FF 00 00 00 03 C2 C1 F8 08 50 |
u | 51 | 8B 77 04 8B C6 8D 34 F6 8D 34 B0 F7 DE 8B 07 8B C8 8D
04 C0 8D 04 41 2B F0 8B 47 08 8B C8 C1 E0 03 2B C1 8D 04 C6 99 81 E2 FF 00 00 00 03 C2 C1 F8 08 50 |
v | 39 | 8B 17 8D 14 52 03 D2 8B 4F 04 8D 0C 89 2B D1 2B 57 08
8B C2 8D 14 52 8D 04 90 99 81 E2 FF 00 00 00 03 C2 C1 F8 08 50 |
d | 117 | 8B 47 54 8B 5F 48 2B 47 50 2B 5F 44 D1 E8 D1 EB F7 D8
F7 DB 33 C9 03 47 4C 79 05 F7 D8 80 C9 04 03 5F 40 79 05 F7 DB 80 C9 03 3B C3 7E 04 80 F1 01 93 0B C0 7E 1B C1 E0 0A 99 F7 F3 74 13 66 8B 84 47 76 0D 00 00 C1 E0 09 99 BB 40 24 03 00 F7 FB 66 0F BA E1 00 73 07 F7 D8 05 00 01 00 00 66 0F BA E1 01 73 05 05 00 01 00 00 66 0F BA E1 02 73 02 F7 D8 50 |
m | 77 | 8B 47 44 8B 5F 50 2B 47 48 2B 5F 54 D1 F8 D1 FB 03 47
40 03 5F 4C 8B D0 C1 FA 1F 33 C2 2B C2 8B D3 C1 FA 1F 33 DA 2B DA 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50 |
R | 6 | B8 FF 00 00 00 50 |
G | 6 | B8 FF 00 00 00 50 |
B | 6 | B8 FF 00 00 00 50 |
A | 6 | B8 FF 00 00 00 50 |
I | 6 | B8 FF 00 00 00 50 |
U | 6 | B8 FF 00 00 00 50 |
V | 6 | B8 FF 00 00 00 50 |
C | 6 | B8 FF 00 00 00 50 |
D | 6 | B8 00 04 00 00 50 |
M | 53 |
Version 3.00 (final) and 3.0.4 8B 47 48 8B 5F 54 2B 47 44 2B 5F 50 D1 F8 D1 FB 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50 |
49 |
Version 3.00a (beta version) and 3.00b (internal build) 8B 47 48 8B 5F 54 2B 47 44 2B 5F 50 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50 |
|
x | 4 | 8B 47 40 50 |
y | 4 | 8B 47 4C 50 |
z | 4 | 8B 47 58 50 |
X | 4 | 8B 47 48 50 |
Y | 4 | 8B 47 54 50 |
Z | 4 | 8B 47 60 50 |
xmin | 4 | 8B 47 44 50 (not available in the 3.00a beta version) |
ymin | 4 | 8B 47 50 50 (not available in the 3.00a beta version) |
zmin | 4 | 8B 47 5C 50 (not available in the 3.00a beta version) |
rmin | 3 | 2B C0 50 (not available in the 3.00a beta version) |
tmax | 6 | B8 01 00 00 00 50 (not available in the 3.00a beta version) |
min | 9 | 58 59 3B C1 7C 02 8B C1 50 |
max | 9 | 58 59 3B C1 7F 02 8B C1 50 |
abs | 7 | 58 99 33 C2 2B C2 50 |
add | 12 | 59 5B 58 03 C3 3B C1 7C 02 8B C1 50 |
sub | 12 | 59 5B 58 2B C3 3B C1 7F 02 8B C1 50 |
dif | 10 | 58 5B 2B C3 99 33 C2 2B C2 50 |
mix | 32 | 5B 59 5A 5E 0B DB B8 00 00 00 00 74 12 8B C3 2B C1 F7
EA F7 FB 8B E8 8B C1 F7 EE F7 FB 03 C5 50 |
scl | 39 | 8B 6C 24 08 8B 4C 24 0C 2B E9 8B C5 74 15 8B 04 24 8B
74 24 04 2B C6 8B 54 24 10 2B D1 F7 EA F7 FD 03 C6 83 C4 14 50 |
sqr | 31 | 5B 83 FB 01 7E 18 8B CB D1 EB B8 02 00 00 00 3B D8 7E
0B 8B C1 99 F7 F3 03 D8 D1 EB EB F1 53 |
rnd | 82 |
Version 3.00 (final) and 3.0.4 8D 9F 94 00 00 00 66 8B 43 02 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 43 02 66 8B 03 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 03 0F B7 03 8D 4C 83 04 8B 01 0F B6 53 02 2B 44 93 04 89 01 5E 59 2B F1 79 04 33 C0 EB 08 46 2B D2 F7 F6 8D 04 11 50 |
76 |
Version 3.00a (beta version) and 3.00b (internal build) 8D 9F 94 00 00 00 66 8B 43 02 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 43 02 66 8B 03 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 03 0F B7 03 8D 4C 83 04 8B 01 0F B6 53 02 2B 44 93 04 89 01 5E 59 2B F1 46 2B D2 F7 F6 8D 04 11 50 |
|
rst | 10 | 58 89 87 78 45 00 00 2B C0 50 (not available in the 3.00a beta version) |
ctl | 17 | 5B 2B C0 0B DB 7C 09 83 FB 07 7F 04 8B 44 9F 64 50 |
val | 34 | 59 5E 5B 2B C0 0B DB 7C 18 83 FB 07 7F 13 8B 44 9F 64
2B CE 0F AF C1 B9 FF 00 00 00 99 F7 F9 03 C6 50 |
map | 48 | 58 5B 0B DB 7C 27 83 FB 03 7F 22 0B C0 7D 04 2B C0 EB
0B B9 FF 00 00 00 3B C1 7E 02 8B C1 C1 E3 08 03 DF 0F B6 84 18 78 01 00 00 EB 02 2B C0 50 |
src | 94 |
Version 3.00b (internal build), 3.00 (final), and 3.0.4 5A 59 5B 3B 57 5C 7C 53 3B 57 60 7D 4E 8B 77 44 3B DE 7D 02 8B DE 8B 47 48 3B D8 7C 03 8D 58 FF 8B 47 50 3B C8 7D 02 8B C8 8B 47 54 3B C8 7C 03 8D 48 FF 8B 87 A8 45 00 00 2B 57 5C 03 C2 2B 4F 50 0F AF 8F A0 45 00 00 03 C1 2B DE 8B 57 60 2B 57 5C 0F AF DA 0F B6 04 18 EB 02 2B C0 50 |
109 |
Version 3.00a (beta version) 5A 59 5B 3B 57 5C 7C 62 3B 57 60 7D 5D 8B B7 84 00 00 00 3B DE 7D 02 8B DE 8B 87 8C 00 00 00 3B D8 7C 03 8D 58 FF 8B 87 88 00 00 00 3B C8 7D 02 8B C8 8B 87 90 00 00 00 3B C8 7C 03 8D 48 FF 8B 87 A8 45 00 00 2B 57 5C 03 C2 2B 8F 88 00 00 00 0F AF 8F A0 45 00 00 03 C1 2B DE 8B 57 60 2B 57 5C 0F AF DA 0F B6 04 18 EB 02 2B C0 50 |
|
cnv | 187 |
Version 3.00b (internal build), 3.00 (final), and 3.0.4 8B 04 24 0B C0 0F 84 AC 00 00 00 8B 8F A8 45 00 00 8B 47 58 2B 47 5C 03 C8 8B 47 4C 48 2B 47 50 F7 A7 A0 45 00 00 03 C8 8B 47 40 48 2B 47 44 8B 5F 60 2B 5F 5C F7 E3 03 C8 2B C0 8B D1 0F B6 32 0F AF 74 24 24 03 C6 03 D3 0F B6 32 0F AF 74 24 20 03 C6 03 D3 0F B6 32 0F AF 74 24 1C 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 18 03 C6 03 D3 0F B6 32 0F AF 74 24 14 03 C6 03 D3 0F B6 32 0F AF 74 24 10 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 0C 03 C6 03 D3 0F B6 32 0F AF 74 24 08 03 C6 03 D3 0F B6 32 0F AF 74 24 04 03 C6 99 F7 3C 24 83 C4 28 50 |
193 |
Version 3.00a (beta version) 8B 04 24 0B C0 0F 84 B1 00 00 00 8B 8F A8 45 00 00 8B 47 58 2B 47 5C 03 C8 8B 47 4C 48 2B 87 88 00 00 00 F7 A7 A0 45 00 00 03 C8 8B 47 40 48 2B 87 84 00 00 00 8B 5F 60 2B 5F 5C F7 E3 03 C8 2B C0 8B D1 0F B6 32 0F AF 74 24 24 03 C6 03 D3 0F B6 32 0F AF 74 24 20 03 C6 03 D3 0F B6 32 0F AF 74 24 1C 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 18 03 C6 03 D3 0F B6 32 0F AF 74 24 14 03 C6 03 D3 0F B6 32 0F AF 74 24 10 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 0C 03 C6 03 D3 0F B6 32 0F AF 74 24 08 03 C6 03 D3 0F B6 32 0F AF 74 24 04 03 C6 99 F7 3C 24 83 C4 28 50 |
|
rad | 158 | 5E 8B 04 24 8B 5C 24 04 81 E3 FF 03 00 00 0F BF 9C 5F
78 05 00 00 F7 EB 05 FF 1F 00 00 83 D2 00 8B 4F 48 0F AC D0 0E 2B 4F 44 D1 E9 03 C8 0B C9 7D 04 2B C9 EB 0A 8B 47 48 3B C8 7C 03 8D 48 FF 58 5B 81 EB 00 01 00 00 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 F7 EB 05 FF 1F 00 00 83 D2 00 8B 5F 54 0F AC D0 0E 2B 5F 50 D1 EB 03 D8 0B DB 7D 04 2B DB EB 0A 8B 47 54 3B D8 7C 03 8D 58 FF 8B 57 60 2B 57 5C 03 B7 A8 45 00 00 0F AF 9F A0 45 00 00 0F AF CA 33 C0 03 D9 8A 04 1E 50 |
c2d | 97 | 58 5B 33 C9 0B C0 7D 05 F7 D8 80 C9 04 0B DB 7D 05 F7
DB 80 C9 03 3B C3 7E 04 80 F1 01 93 0B C0 7E 1B C1 E0 0A 99 F7 F3 74 13 66 8B 84 47 76 0D 00 00 C1 E0 09 99 BB 40 24 03 00 F7 FB 66 0F BA E1 00 73 07 F7 D8 05 00 01 00 00 66 0F BA E1 01 73 05 05 00 01 00 00 66 0F BA E1 02 73 02 F7 D8 50 |
c2m | 57 | 5B 58 8B D0 C1 FA 1F 33 C2 2B C2 8B D3 C1 FA 1F 33 DA
2B DA 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50 |
r2x | 31 | 58 5B 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 F7 EB
05 FF 1F 00 00 83 D2 00 0F AC D0 0E 50 |
r2y | 37 | 58 5B 81 EB 00 01 00 00 81 E3 FF 03 00 00 0F BF 9C 5F
78 05 00 00 F7 EB 05 FF 1F 00 00 83 D2 00 0F AC D0 0E 50 |
sin | 32 | 58 2D 00 01 00 00 8B D8 C1 FB 1F 33 C3 2B C3 25 FF 03
00 00 0F BF 84 47 78 05 00 00 C1 F8 05 50 |
cos | 27 | 58 8B D8 C1 FB 1F 33 C3 2B C3 25 FF 03 00 00 0F BF 84 47 78 05 00 00 C1 F8 05 50 |
tan | 60 | 58 8B D8 0B DB 7D 02 F7 DB 81 E3 FF 03 00 00 0F BF 9C
5F 78 05 00 00 2D 00 01 00 00 79 02 F7 D8 25 FF 03 00 00 0F BF 84 47 78 05 00 00 0B DB 75 04 33 C0 EB 06 C1 E0 0A 99 F7 FB 50 |
get | 20 | 58 0B C0 7C 0E 3D FF 00 00 00 7F 07 8B 84 87 78 35 00 00 50 |
put | 21 | 58 5B 0B C0 7C 0E 3D FF 00 00 00 7F 07 89 9C 87 78 35 00 00 53 |
At the page Functions you will find a list of all functions. Click the function to see the disassembly of each function, as well as additional information.
Note: I am using the Delphi ASM syntax. This means that $10 = 10h = 16