






Here is a list of the opcodes that are available to use in the Assembler module:
| SSE | Opcode | Description | Note |
|---|---|---|---|
| - | add reg,reg/var/integer | integer add | |
| 1 | addps xmmReg,xmmReg/sseVar | add packed single precision float values | |
| - | and reg,integer | logical AND | |
| 1 | andps xmmReg,xmmReg/sseVar | logical AND of packed single precision float values | |
| - | call reg | call procedure | |
| - | cmp reg,reg | compare | |
| 1 | cmpps xmmReg,xmmReg/sseVar,type | compare packed single precision float values | |
| 2 | cvtdq2ps xmmReg,xmmReg/sseVar | convert doubleword ints to packed single precision floats | |
| 2 | cvtps2dq xmmReg,xmmReg/sseVar | convert packed single precision floats to doubleword ints | |
| 1 | divps xmmReg,xmmReg/sseVar | divide packed single precision float values | |
| - | f2xm1 | 2x-1, where x is a float value | |
| - | fadd | add float value | 1.1.2=faddp opcode, arguments=crash |
| - | fild sseVar[channel] | load integer | |
| - | fist sseVar[channel] | store integer | |
| - | fistp sseVar[channel] | store integer and pop | syntax coloring bug |
| - | fld [reg]/sseVar[channel]/sseVar[eax] | load float value | |
| - | fld1 | load +1.0 | |
| - | fldlg2 | load log102 | |
| - | fmul | multiply float value | |
| - | fprem | partial remainder ST0/ST1 (=stack elements) | rounds to 0 |
| - | fptan | partial tangent | |
| - | frndint | Banker’s rounding to int | slow |
| - | fscale | scales a number by a power of 2 | |
| - | fsin | sine | |
| - | fsincos | sine and cosine | |
| - | fst sseVar[channel] | store ST0 into given memory location | |
| - | fstp [reg]/sseVar[channel]/sseVar[eax] | fst then pops register stack | |
| - | fsub | subtract float value | |
| - | fxch | operand:exchange with ST0, no-operand: exchange ST0 w/ ST1 | |
| - | fyl2x | y*log2x | |
| - | inc [reg] | increment | |
| - | jz label | jump if zero | |
| - | jz label | jump if zero | |
| - | jg label | jump if greater than | |
| - | jl label | jump if less than | |
| - | jnz integer/label | jump if not zero | |
| - | jng label | jump if not greater than | |
| - | jnl label | jump if not less than | |
| 1 | maxps xmmReg,sseVar | the maximum of packed single precision float values | |
| 1 | minps xmmReg,sseVar/[eax] | the minimum of packed single precision float values | |
| - | mov [reg],integer/reg | move data | |
| - | mov eax,[ebp+integer] | move data | |
| - | mov reg,reg/[reg]/integer/sseVar[channel] | move data | |
| - | mov sseVar[channel],reg | move data | |
| - | movd eax,xmmReg | move doubleword data | |
| 1 | movaps [eax],xmmReg | move four aligned packed single precision float values | |
| 1 | movaps sseVar,xmmReg | move four aligned packed single precision float values | |
| 1 | movaps sseVar[eax],xmmReg | move four aligned packed single precision float values | |
| 1 | movaps xmmReg,xmmReg/sseVar | move four aligned packed single precision float values | |
| 1 | movaps xmmReg,[eax]/sseVar[eax] | move four aligned packed single precision float values | |
| 1 | mulps xmmReg,xmmReg/sseVar | multiply packed single precision float values | |
| - | or reg,reg | logical inclusive or | |
| 1 | orps xmmReg,xmmReg/sseVar | logical or of packed single precision float values | |
| 1 | paddd xmmReg,xmmReg/seeVar | add packed doubleword integers | |
| 1 | pand xmmReg,sseVar | logical AND of packed integer values | |
| 1 | pslld xmmReg,integer | logical shift left packed single precision float values | can be used to do power of 2 multiplications on integers |
| - | pop reg | pop off of stack | |
| - | push reg | push onto stack | |
| 1 | rcpps xmmReg,xmmReg | reciprocal of packed single precision float values | =1/x |
| - | rdtsc | read time stamp counter | |
| - | ret; | return from procedure | |
| - | shl reg,integer | shift logical left | |
| - | shr reg,integer | shift logical right | |
| 1 | shufps xmmReg,xmmReg/integer | shuffles channels of packed single precision float values | |
| 1 | sqrtps xmmReg,xmmReg/seeVar | square roots of packed single precision float values | |
| - | sub reg,integer | subtract | |
| 1 | subps xmmReg,xmmReg/sseVar | subtract packed single precision float values |
SSE2 is available only on subset of SSE-compatible CPUs
Assembly links to learn more
NASM manual
thanks to - Rudolf Lindner, infuzion, theun