65c816 instructions

From SMWiki
Jump to: navigation, search

There are approximately 91 opcodes in ASM. They are divided into different categories.


Loading instructions

These instructions load an 8-bit or a 16-bit value into one of the three registers.

Instruction Description
LDA Load into accumulator from memory
LDX Load into X from memory
LDY Load into Y from memory

Compare instructions

These instructions, usually used with branch commands, compare one of the three registers with a value or memory. (They essentially subtract the value following the compare instruction from the value in the register, affecting the processor flags but not the register itself.)

Instruction Description
CMP Compare accumulator with memory
CPY Compare Y with memory
CPX Compare X with memory

Storage instructions

These instructions store various values from a register into memory.

   STA - Store Accumulator to Memory
   STX - Store X to Memory
   STY - Store Y to Memory
   STZ - Store Zero to Memory

Branching instructions

These instructions branch depending on the processor flags' status, except BRA and BRL, which always branch regardless of the processor flags.

   BCC - Branch if Carry Clear
   BCS - Branch if Carry Set
   BPL - Branch if Plus value
   BMI - Branch if Minus value
   BNE - Branch if not Equal/Branch if not zero
   BEQ - Branch if Equal/Branch if zero
   BVC - Branch if Overflow Clear
   BVS - Branch if Overflow Set
   BRL - Branch Always Long
   BRA - Branch Always

Mathematical instructions

These instructions perform addition and subtraction with the registers and memory. (Note that there are no opcodes for multiplication and division; special registers must be used for those.)

   ADC - Add with carry
   SBC - Subtract with Carry
   INC - Increment Accumulator or Memory
   INX - Increment X
   INY - Increment Y
   DEC - Decrement Accumulator or Memory
   DEX - Decrement X
   DEY - Decrement Y

Processor flag instructions

These instructions set or clear various processor flags of the SNES.

   SEP - Set Processor Status Flag
   REP - Reset Processor Status Flag
   SEC - Set Carry Flag
   SED - Set Decimal Flag
   SEI - Set Interrupt Flag
   CLC - Clear Carry Flag
   CLD - Clear Decimal Flag
   CLI - Clear Interrupt Flag
   CLV - Clear Overflow Flag
   XCE - Exchange Carry and Emulation (swaps bits of emulation flag and carry flag, toggling emulation mode on/off)

Stack instructions

These instructions push and pull various bytes on/from the stack, a special designated area of RAM that is located at $01FF-$010B in SMW.

   PEA - Push Effective Address (Simply push a 16-bit absolute value on the stack)
   PEI - Push Effective Indirect Address
   PER - Push Program Counter Relative
   PHA - Push Accumulator
   PHB - Push Data Bank Register
   PHD - Push Direct Page Register
   PHK - Push Program Bank Register
   PHP - Push Processor Status Flags
   PHX - Push X
   PHY - Push Y
   PLA - Pull Accumulator
   PLB - Pull Data Bank Register
   PLD - Pull Direct Page Register
   PLP - Pull Processor Status Flags
   PLX - Pull X
   PLY - Pull Y

Bitwise instructions

These operations affect the individual bits of A and/or memory.

   AND - AND Accumulator with Memory
   ASL - Left Shift Accumulator or Memory
   BIT - Bit Test
   EOR - Exclusive OR Accumulator with Memory
   LSR - Shift Right Accumulator or Memory
   ORA - OR Accumulator with Memory
   ROL - Rotate Left Accumulator or Memory
   ROR - Rotate Right Accumulator or Memory
   TRB - Test and Reset Bit
   TSB - Test and Set Bit

Transfer instructions

These opcodes transfer values from register to register (or, in the case of MVN and MVP, from memory to memory).

   TAX - Transfer Accumulator to X
   TAY - Transfer Accumulator to Y
   TCD - Transfer Accumulator to Direct Page
   TCS - Transfer Accumulator to Stack pointer
   TDC - Transfer Direct Page to Accumulator
   TSC - Transfer Stack Pointer to Accumulator
   TSX - Transfer Stack Pointer to X
   TXA - Transfer X to Accumulator
   TXS - Transfer X to Stack Pointer
   TXY - Transfer X to Y
   TYA - Transfer Y to Accumulator
   TYX - Transfer Y to X
   MVN - Block Move Negative
   MVP - Block Move Positive

Program flow instructions

These instructions jump into some other part of the ROM/RAM.

   JML - Jump Long
   JMP - Jump
   JSL - Jump to Subroutine Long
   JSR - Jump to Subroutine
   RTI - Return from Interrupt
   RTL - Return from Subroutine Long
   RTS - Return from Subroutine

Other instructions

These are other misc. opcodes.

   BRK - Software Break (Sets the B flag in emulation mode, interrupt in native)
   COP - Coprocessor Empowerment (interrupt)
   NOP - No operation (does absolutely nothing except waste a cycle of processing time)
   STP - Stop the Clock (freezes the SNES's processor)
   WAI - Wait for Interrupt
   XBA - Exchanges low and high byte of the A register

External Links

List of all opcodes, their hexadecimal equivalents and the amount of cycles they take.

Personal tools