=============================================================================== == Instruction Set Summary for the core revision >= 5 microcode == =============================================================================== =============================================================================== Mnemonics | Operands | Description | Operation =============================================================================== Arithmetic and logic instructions: add | A,B,rD | Add | rD=A+B add. | A,B,rD | Add, set Carry | rD=A+B SaveCarry addc | A,B,rD | Add with Carry | rD=A+B+Carry addc. | A,B,rD | Add with Carry, set Carry | rD=A+B+C SaveCarry sub | A,B,rD | Subtract | rD=A-B sub. | A,B,rD | Sub, set Carry | rD=A-B SaveCarry subc | A,B,rD | Sub with Carry | rD=A-B-Carry subc. | A,B,rD | Sub with Carry, set Carry | rD=A-B-C SaveCarry mul | A,B,rD | multiply (rev 11+ only) | spr06d=lsb; rD=msb Branch instructions: jmp | l | Uncond. jump (virtual instr.) | PC=l jand | A,B,l | Jump if binary AND | if(A&B) PC=l jnand | A,B,l | Jump if not binary AND | if(!(A&B)) PC=l js | A,B,l | Jump if all bits set | if((A&B)==A) PC=l jns | A,B,l | Jump if not all bits set | if((A&B)!=A) PC=l je | A,B,l | Jump if equal | if(A==B) PC=l jne | A,B,l | Jump if not equal | if(A!=B) PC=l jls | A,B,l | Jump if less (signed) | if(A=B) PC=l jgs | A,B,l | Jump if greater (signed) | if(A>B) PC=l jles | A,B,l | Jump if less or equal (signed) | if(A<=B) PC=l jl | A,B,l | Jump if less | if(A=B) PC=l jg | A,B,l | Jump if greater | if(A>B) PC=l jle | A,B,l | Jump if less or equal | if(A<=B) PC=l jdn | A,B,l | Jump if diff is < 0, no carry | if(nc(A-B)<0) PC=l jdpz | A,B,l | Jump if diff is >= 0, no carry | if(nc(A-B)>=0) PC=l jdp | A,B,l | Jump if diff is > 0, no carry | if(nc(A-B)>0) PC=l jdnz | A,B,l | Jump if diff is <= 0, no carry | if(nc(A-B)<=0) PC=l call | lrX,l | Store PC, call function | lrX=PC; PC=l calls | l | Store PC, call function | PC->stack; PC=l ret | lrX,lrY | Store PC, ret from func | lrX=PC; PC=lrY rets | | ret from function | stack->PC jzx | M,S,A,B,l | Jump if zero after shift + mask | jnzx | M,S,A,B,l | Jump if nonzero after shift+msk | jext | E,A,B,l | Jump if External Condition true | if(E) PC=l jnext | E,A,B,l | Jump if External Condition false| if(!E) PC=l Data transfer instructions: mov | A,rD | Copy data (virtual instruction) | rD=A tkiph | A,rD | TKIP S-Box lookup high | rD=SBOX[hi8(A)] tkiphs | A,rD | TKIP S-Box lkup hi swap'd | rD=byteswap(tkiph) tkipl | A,rD | TKIP S-Box lookup low | rD=SBOX[lo8(A)] tkipls | A,rD | TKIP S-Box lkup lo swap'd | rD=byteswap(tkipl) Bitwise instructions: sra | A,B,rD | Arithmetic rightshift | rD=A>>B fillup sign or | A,B,rD | Bitwise OR | rD=A|B and | A,B,rD | Bitwise AND | rD=A&B xor | A,B,rD | Bitwise XOR | rD=A^B sr | A,B,rD | Rightshift | rD=A>>B sl | A,B,rD | Leftshift | rD=A<