Assembler Opcodes

Here is a list of the opcodes that are available to use in the Assembler module:

SSEOpcodeDescriptionNote
-add reg,reg/var/integer integer add
1addps xmmReg,xmmReg/sseVaradd packed single precision float values
-and reg,integerlogical AND
1andps xmmReg,xmmReg/sseVarlogical AND of packed single precision float values
-call regcall procedure
-cmp reg,regcompare
1cmpps xmmReg,xmmReg/sseVar,typecompare packed single precision float values
2cvtdq2ps xmmReg,xmmReg/sseVar convert doubleword ints to packed single precision floats
2cvtps2dq xmmReg,xmmReg/sseVarconvert packed single precision floats to doubleword ints
1divps xmmReg,xmmReg/sseVardivide packed single precision float values
-f2xm12x-1, where x is a float value
-faddadd float value1.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
-fld1load +1.0
-fldlg2load log102
-fmulmultiply float value
-fprempartial remainder ST0/ST1 (=stack elements)rounds to 0
-fptanpartial tangent
-frndintBanker’s rounding to intslow
-fscalescales a number by a power of 2
-fsinsine
-fsincossine and cosine
-fst sseVar[channel]store ST0 into given memory location
-fstp [reg]/sseVar[channel]/sseVar[eax]fst then pops register stack
-fsubsubtract float value
-fxchoperand:exchange with ST0, no-operand: exchange ST0 w/ ST1
-fyl2xy*log2x
-inc [reg]increment
-jz labeljump if zero
-jz labeljump if zero
-jg labeljump if greater than
-jl labeljump if less than
-jnz integer/labeljump if not zero
-jng labeljump if not greater than
-jnl labeljump if not less than
1maxps xmmReg,sseVarthe maximum of packed single precision float values
1minps xmmReg,sseVar/[eax]the minimum of packed single precision float values
-mov [reg],integer/regmove 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
1movaps [eax],xmmReg move four aligned packed single precision float values
1movaps sseVar,xmmReg move four aligned packed single precision float values
1movaps sseVar[eax],xmmReg move four aligned packed single precision float values
1movaps xmmReg,xmmReg/sseVar move four aligned packed single precision float values
1movaps xmmReg,[eax]/sseVar[eax] move four aligned packed single precision float values
1mulps xmmReg,xmmReg/sseVar multiply packed single precision float values
-or reg,reg logical inclusive or
1orps xmmReg,xmmReg/sseVar logical or of packed single precision float values
1paddd xmmReg,xmmReg/seeVar add packed doubleword integers
1pand xmmReg,sseVar logical AND of packed integer values
1pslld 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
1rcpps xmmReg,xmmRegreciprocal 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
1shufps xmmReg,xmmReg/integer shuffles channels of packed single precision float values
1sqrtps xmmReg,xmmReg/seeVar square roots of packed single precision float values
-sub reg,integer subtract
1subps xmmReg,xmmReg/sseVar subtract packed single precision float values

Footnotes

SSE2 is available only on subset of SSE-compatible CPUs

See Also

Assembly links to learn more
NASM manual
thanks to - Rudolf Lindner, infuzion, theun

component_reference/assembler/list_of_opcodes.txt · Last modified: 2011/09/09 12:05 by infuzion