※このページではEmulation Mode(e=1)の解説を割愛しています
ニーモニック早見表
+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ |Opcode.|| + 0 | + 1 | + 2 | + 3 || + 4 | + 5 | + 6 | + 7 || + 8 | + 9 | + A | + B || + C | + D | + E | + F | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ | $0n || BRK 2 | ORA 2 | COP 2 | ORA 2 || TSB 2 | ORA 2 | ASL 2 | ORA 2 || PHP 1 |*ORA 2+| ASL 1 | PHD 1 || TSB 3 | ORA 3 | ASL 3 | ORA 4 | | $1n || BPL 2 | ORA 2 | ORA 2 | ORA 2 || TRB 2 | ORA 2 | ASL 2 | ORA 2 || CLC 1 | ORA 3 | INC 1 | TCS 1 || TRB 3 | ORA 3 | ASL 3 | ORA 4 | | $2n || JSR 3 | AND 2 | JSL 4 | AND 2 || BIT 2 | AND 2 | ROL 2 | AND 2 || PLP 1 |*AND 2+| ROL 1 | PLD 1 || BIT 3 | AND 3 | ROL 3 | AND 4 | | $3n || BMI 2 | AND 2 | AND 2 | AND 2 || BIT 2 | AND 2 | ROL 2 | AND 2 || SEC 1 | AND 3 | DEC 1 | TSC 1 || BIT 3 | AND 3 | ROL 3 | AND 4 | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ | $4n || RTI 1 | EOR 2 |(WDM -)| EOR 2 || MVP 3 | EOR 2 | LSR 2 | EOR 2 || PHA 1 |*EOR 2+| LSR 1 | PHK 1 || JMP 3 | EOR 3 | LSR 3 | EOR 4 | | $5n || BVC 2 | EOR 2 | EOR 2 | EOR 2 || MVN 3 | EOR 2 | LSR 2 | EOR 2 || CLI 1 | EOR 3 | PHY 1 | TCD 1 || JML 4 | EOR 3 | LSR 3 | EOR 4 | | $6n || RTS 1 | ADC 2 | PER 3 | ADC 2 || STZ 2 | ADC 2 | ROR 2 | ADC 2 || PLA 1 |*ADC 2+| ROR 1 | RTL 1 || JMP 3 | ADC 3 | ROR 3 | ADC 4 | | $7n || BVS 2 | ADC 2 | ADC 2 | ADC 2 || STZ 2 | ADC 2 | ROR 2 | ADC 2 || SEI 1 | ADC 3 | PLY 1 | TDC 1 || JMP 3 | ADC 3 | ROR 3 | ADC 4 | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ | $8n || BRA 2 | STA 2 | BRL 3 | STA 2 || STY 2 | STA 2 | STX 2 | STA 2 || DEY 1 |*BIT 2+| TXA 1 | PHB 1 || STY 3 | STA 3 | STX 3 | STA 4 | | $9n || BCC 2 | STA 2 | STA 2 | STA 2 || STY 2 | STA 2 | STX 2 | STA 2 || TYA 1 | STA 3 | TXS 1 | TXY 1 || STZ 3 | STA 3 | STZ 3 | STA 4 | | $An ||*LDY 2+| LDA 2 |*LDX 2+| LDA 2 || LDY 2 | LDA 2 | LDX 2 | LDA 2 || TAY 1 |*LDA 2+| TAX 1 | PLB 1 || LDY 3 | LDA 3 | LDX 3 | LDA 4 | | $Bn || BCS 2 | LDA 2 | LDA 2 | LDA 2 || LDY 2 | LDA 2 | LDX 2 | LDA 2 || CLV 1 | LDA 3 | TSX 1 | TYX 1 || LDY 3 | LDA 3 | LDX 3 | LDA 4 | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ | $Cn ||*CPY 2+| CMP 2 | REP 2 | CMP 2 || CPY 2 | CMP 2 | DEC 2 | CMP 2 || INY 1 |*CMP 2+| DEX 1 | WAI 1 || CPY 3 | CMP 3 | DEC 3 | CMP 4 | | $Dn || BNE 2 | CMP 2 | CMP 2 | CMP 2 || PEI 2 | CMP 2 | DEC 2 | CMP 2 || CLD 1 | CMP 3 | PHX 1 | STP 1 || JML 3 | CMP 3 | DEC 3 | CMP 4 | | $En ||*CPX 2+| SBC 2 | SEP 2 | SBC 2 || CPX 2 | SBC 2 | INC 2 | SBC 2 || INX 1 |*SBC 2+| NOP 1 | XBA 1 || CPX 3 | SBC 3 | INC 3 | SBC 4 | | $Fn || BEQ 2 | SBC 2 | SBC 2 | SBC 2 || PEA 3 | SBC 2 | INC 2 | SBC 2 || SED 1 | SBC 3 | PLX 1 | XCE 1 || JSR 3 | SBC 3 | INC 3 | SBC 4 | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ |Opcode.|| + 0 | + 1 | + 2 | + 3 || + 4 | + 5 | + 6 | + 7 || + 8 | + 9 | + A | + B || + C | + D | + E | + F | +-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------++-------+-------+-------+-------+ | $42xx || NOP 2 | xx = Anything || Opcode右の数字は総byte数(*印は16bit Mode時+1) +-------++-------+-------+-------+-------++
用途別
レジスタ・スタック
フラグ操作
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
194 | $C2 | vv | REP #$vv | 2 | n | v | m | x | d | i | z | c | 3 | P=P&!I (指定bitをクリア) | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
226 | $E2 | vv | SEP #$vv | 2 | n | v | m | x | d | i | z | c | 3 | P=P|I (指定bitをセット) | Immediate |
024 | $18 | -- | CLC | 1 | - | - | - | - | - | - | - | c | 2 | c=0 | Implied |
056 | $38 | -- | SEC | 1 | - | - | - | - | - | - | - | c | 2 | c=1 | Implied |
088 | $58 | -- | CLI | 1 | - | - | - | - | - | i | - | - | 2 | i=0 (IRQ割込許可) | Implied |
120 | $78 | -- | SEI | 1 | - | - | - | - | - | i | - | - | 2 | i=1 (IRQ割込禁止) | Implied |
216 | $D8 | -- | CLD | 1 | - | - | - | - | d | - | - | - | 2 | d=0 (HEX) | Implied |
248 | $F8 | -- | SED | 1 | - | - | - | - | d | - | - | - | 2 | d=1 (BCD) ※BCDモードは算術演算(ADC/SBC)のみ有効 | Implied |
184 | $B8 | -- | CLV | 1 | - | v | - | - | - | - | - | - | 2 | v=0 | Implied |
251 | $FB | -- | XCE | 1 | - | - | m | x | - | - | - | e | 2 | cとeを入替 | Implied |
[NOTE] 比較・テストによるフラグ操作 (Cycle: Immediate=2+, DP=3+, 他=4+) PSR[n-zc]: CMP #$00 ... n=Aのbit7, z=Aが0なら1, c=常に1 PSR[n-zc]: CMP #$FF ... n=Aが#$7F~#$FEなら1, zc=Aが#$FFなら共に1 PSR[--z-]: BIT #$00 ... z=常に1 PSR[nvz-]: BIT メモリ ... nv=メモリ値の上2bit(演算結果は関係なし), z=(M & A)が0なら1
レジスタ間転送
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
027 | $1B | -- | TCS | 1 | - | - | - | - | - | - | - | - | 2 | S=C (常に16bit転送) | Implied |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
091 | $5B | -- | TCD | 1 | n | - | - | - | - | - | z | - | 2 | D=C (常に16bit転送) | Implied |
168 | $A8 | -- | TAY | 1 | n | - | - | - | - | - | z | - | 2 | Y=C (常に16bit転送、x=1時はYH=#0) | Implied |
170 | $AA | -- | TAX | 1 | n | - | - | - | - | - | z | - | 2 | X=C (常に16bit転送、x=1時はXH=#0) | Implied |
154 | $9A | -- | TXS | 1 | - | - | - | - | - | - | - | - | 2 | S=X (x=1時はSH,SL=#0,XL) | Implied |
138 | $8A | -- | TXA | 1 | n | - | - | - | - | - | z | - | 2 | A=X(mx=%01/ %10: B=#0/ 不変) | Implied |
155 | $9B | -- | TXY | 1 | n | - | - | - | - | - | z | - | 2 | Y=X | Implied |
152 | $98 | -- | TYA | 1 | n | - | - | - | - | - | z | - | 2 | A=Y (mx=%01/ %10: B=#0/ 不変) | Implied |
187 | $BB | -- | TYX | 1 | n | - | - | - | - | - | z | - | 2 | X=Y | Implied |
186 | $BA | -- | TSX | 1 | n | - | - | - | - | - | z | - | 2 | X=S (x=1時はXH,XL=#0,SL) | Implied |
059 | $3B | -- | TSC | 1 | n | - | - | - | - | - | z | - | 2 | C=S (常に16bit転送) | Implied |
123 | $7B | -- | TDC | 1 | n | - | - | - | - | - | z | - | 2 | C=D (常に16bit転送) | Implied |
スタック操作
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
072 | $48 | -- | PHA | 1 | - | - | - | - | - | - | - | - | 3+ | SA <= A (m=0: 16bit, m=1: 8bit) | Stack (Push) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
090 | $5A | -- | PHY | 1 | - | - | - | - | - | - | - | - | 3+ | SA <= Y (x=0: 16bit, x=1: 8bit) | Stack (Push) |
218 | $DA | -- | PHX | 1 | - | - | - | - | - | - | - | - | 3+ | SA <= X (x=0: 16bit, x=1: 8bit) | Stack (Push) |
011 | $0B | -- | PHD | 1 | - | - | - | - | - | - | - | - | 4 | SA <= D (16bit) | Stack (Push) |
008 | $08 | -- | PHP | 1 | - | - | - | - | - | - | - | - | 3 | SA <= P (8bit) | Stack (Push) |
139 | $8B | -- | PHB | 1 | - | - | - | - | - | - | - | - | 3 | SA <= DB (8bit) | Stack (Push) |
075 | $4B | -- | PHK | 1 | - | - | - | - | - | - | - | - | 3 | SA <= PB (8bit) | Stack (Push) |
098 | $62 | rr hh | PER {far} | 3 | - | - | - | - | - | - | - | - | 6 | SA <= PC + I (16bit) | Stack (Push, PC Relative Long) |
212 | $D4 | nn | PEI ($nn) | 2 | - | - | - | - | - | - | - | - | 6 | SA <= M (16bit) | Stack (Push, DP Indirect) |
244 | $F4 | vv hh | PEA #$hhvv | 3 | - | - | - | - | - | - | - | - | 5 | SA <= I (16bit) | Stack (Push, Immediate / Absolute) |
104 | $68 | -- | PLA | 1 | n | - | - | - | - | - | z | - | 4+ | SA => A (m=0: 16bit, m=1: 8bit) | Stack (Pull) |
122 | $7A | -- | PLY | 1 | n | - | - | - | - | - | z | - | 4+ | SA => Y (x=0: 16bit, x=1: 8bit) | Stack (Pull) |
250 | $FA | -- | PLX | 1 | n | - | - | - | - | - | z | - | 4+ | SA => X (x=0: 16bit, x=1: 8bit) | Stack (Pull) |
043 | $2B | -- | PLD | 1 | n | - | - | - | - | - | z | - | 5 | SA => D (16bit) | Stack (Pull) |
040 | $28 | -- | PLP | 1 | n | v | m | x | d | i | z | c | 4 | SA => P (8bit) | Stack (Pull) |
171 | $AB | -- | PLB | 1 | n | - | - | - | - | - | z | - | 4 | SA => DB (8bit) | Stack (Pull) |
[NOTE] 16bit値はH/Lの順に積み(S--)、L/Hの順で取り出す(S++)
比較/ロード(Y)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
192 | $C0 | vv hh | CPY #$hhvv | 3 | n | - | - | - | - | - | z | c | 2+ | P <= Y‐I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | CPY #$vv | 2 | |||||||||||||
160 | $A0 | vv hh | LDY #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | Y=I | Immediate |
vv | LDY #$vv | 2 | |||||||||||||
196 | $C4 | nn | CPY $nn | 2 | n | - | - | - | - | - | z | c | 3+ | P <= Y‐M | Direct Page (DP) |
164 | $A4 | nn | LDY $nn | 2 | n | - | - | - | - | - | z | - | 3+ | Y=M | Direct Page (DP) |
180 | $B4 | nn | LDY $nn,X | 2 | n | - | - | - | - | - | z | - | 4+ | Y=M | DP Indexed, X |
204 | $CC | qq pp | CPY $ppqq | 3 | n | - | - | - | - | - | z | c | 4+ | P <= Y‐M | Absolute |
172 | $AC | qq pp | LDY $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | Y=M | Absolute |
188 | $BC | qq pp | LDY $ppqq,X | 3 | n | - | - | - | - | - | z | - | 4+ | Y=M | Absolute Indexed, X |
比較/ロード(X)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
224 | $E0 | vv hh | CPX #$hhvv | 3 | n | - | - | - | - | - | z | c | 2+ | P <= X‐I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | CPX #$vv | 2 | |||||||||||||
162 | $A2 | vv hh | LDX #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | X=I | Immediate |
vv | LDX #$vv | 2 | |||||||||||||
228 | $E4 | nn | CPX $nn | 2 | n | - | - | - | - | - | z | c | 3+ | P <= X‐M | Direct Page (DP) |
166 | $A6 | nn | LDX $nn | 2 | n | - | - | - | - | - | z | - | 3+ | X=M | Direct Page (DP) |
182 | $B6 | nn | LDX $nn,Y | 2 | n | - | - | - | - | - | z | - | 4+ | X=M | DP Indexed, Y |
236 | $EC | qq pp | CPX $ppqq | 3 | n | - | - | - | - | - | z | c | 4+ | P <= X‐M | Absolute |
174 | $AE | qq pp | LDX $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | X=M | Absolute |
190 | $BE | qq pp | LDX $ppqq,Y | 3 | n | - | - | - | - | - | z | - | 4+ | X=M | Absolute Indexed, Y |
レジスタ操作(インデックス増減/アキュムレータ操作)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
200 | $C8 | -- | INY | 1 | n | - | - | - | - | - | z | - | 2 | Yを+1 | Implied |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
136 | $88 | -- | DEY | 1 | n | - | - | - | - | - | z | - | 2 | Yを-1 | Implied |
232 | $E8 | -- | INX | 1 | n | - | - | - | - | - | z | - | 2 | Xを+1 | Implied |
202 | $CA | -- | DEX | 1 | n | - | - | - | - | - | z | - | 2 | Xを-1 | Implied |
235 | $EB | -- | XBA | 1 | n | - | - | - | - | - | z | - | 3 | Cの上位(B)と下位(A)を入替 | Implied |
026 | $1A | -- | INC A | 1 | n | - | - | - | - | - | z | - | 2 | Aを+1 | Accumulator |
058 | $3A | -- | DEC A | 1 | n | - | - | - | - | - | z | - | 2 | Aを-1 | Accumulator |
010 | $0A | -- | ASL A | 1 | n | - | - | - | - | - | z | c | 2 | Aを算術左シフト | Accumulator |
042 | $2A | -- | ROL A | 1 | n | - | - | - | - | - | z | c | 2 | Aを左ローテート | Accumulator |
074 | $4A | -- | LSR A | 1 | n | - | - | - | - | - | z | c | 2 | Aを論理右シフト | Accumulator |
106 | $6A | -- | ROR A | 1 | n | - | - | - | - | - | z | c | 2 | Aを右ローテート | Accumulator |
[NOTE] H=シフト実行前のn, Z=シフト実行前のbit0, +=シフト実行前のc, *=#0 ASL: %[ FEDC.BA98.7654.3210 ] => %[EDCB.A987.6543.210*], c=H ROL: %[ FEDC.BA98.7654.3210.c] => %[EDCB.A987.6543.210+], c=H (m=1: %[7654.3210.c] => %[6543.210+]) LSR: %[ FEDC.BA98.7654.3210 ] => %[*FED.CBA9.8765.4321], c=Z, n=0 ROR: %[c.FEDC.BA98.7654.3210 ] => %[+FED.CBA9.8765.4321], c=Z (m=1: %[c.7654.3210] => %[+765.4321])
メモリ操作
いずれも操作元レジスタ値は不変 TRB/TSB: 操作対象bitが操作前にすべて0ならz=1 STY/STX: 書込サイズはxフラグの影響を受ける STA/STZ: 書込サイズはmフラグの影響を受ける(m=0時のSTZは#$0000をストア)
テスト/ビット操作(ダイレクトページ)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
020 | $14 | nn | TRB $nn | 2 | - | - | - | - | - | - | z | - | 5++ | M=M&!A(指定bitをクリア) | Direct Page (DP) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
004 | $04 | nn | TSB $nn | 2 | - | - | - | - | - | - | z | - | 5++ | M=M|A(指定bitをセット) | Direct Page (DP) |
230 | $E6 | nn | INC $nn | 2 | n | - | - | - | - | - | z | - | 5++ | Mを+1 | Direct Page (DP) |
198 | $C6 | nn | DEC $nn | 2 | n | - | - | - | - | - | z | - | 5++ | Mを-1 | Direct Page (DP) |
006 | $06 | nn | ASL $nn | 2 | n | - | - | - | - | - | z | c | 5++ | Mを算術左シフト | Direct Page (DP) |
038 | $26 | nn | ROL $nn | 2 | n | - | - | - | - | - | z | c | 5++ | Mを左ローテート | Direct Page (DP) |
070 | $46 | nn | LSR $nn | 2 | n | - | - | - | - | - | z | c | 5++ | Mを論理右シフト | Direct Page (DP) |
102 | $66 | nn | ROR $nn | 2 | n | - | - | - | - | - | z | c | 5++ | Mを右ローテート | Direct Page (DP) |
246 | $F6 | nn | INC $nn,X | 2 | n | - | - | - | - | - | z | - | 6++ | Mを+1 | DP Indexed, X |
214 | $D6 | nn | DEC $nn,X | 2 | n | - | - | - | - | - | z | - | 6++ | Mを-1 | DP Indexed, X |
022 | $16 | nn | ASL $nn,X | 2 | n | - | - | - | - | - | z | c | 6++ | Mを算術左シフト | DP Indexed, X |
054 | $36 | nn | ROL $nn,X | 2 | n | - | - | - | - | - | z | c | 6++ | Mを左ローテート | DP Indexed, X |
086 | $56 | nn | LSR $nn,X | 2 | n | - | - | - | - | - | z | c | 6++ | Mを論理右シフト | DP Indexed, X |
118 | $76 | nn | ROR $nn,X | 2 | n | - | - | - | - | - | z | c | 6++ | Mを右ローテート | DP Indexed, X |
テスト/ビット操作(アブソリュート)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
026 | $1C | qq pp | TRB $ppqq | 3 | - | - | - | - | - | - | z | - | 6++ | M=M&!A(指定bitをクリア) | Absolute |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
012 | $0C | qq pp | TSB $ppqq | 3 | - | - | - | - | - | - | z | - | 6++ | M=M|A(指定bitをセット) | Absolute |
238 | $EE | qq pp | INC $ppqq | 3 | n | - | - | - | - | - | z | - | 6++ | Mを+1 | Absolute |
206 | $CE | qq pp | DEC $ppqq | 3 | n | - | - | - | - | - | z | - | 6++ | Mを-1 | Absolute |
014 | $0E | qq pp | ASL $ppqq | 3 | n | - | - | - | - | - | z | c | 6++ | Mを算術左シフト | Absolute |
046 | $2E | qq pp | ROL $ppqq | 3 | n | - | - | - | - | - | z | c | 6++ | Mを左ローテート | Absolute |
078 | $4E | qq pp | LSR $ppqq | 3 | n | - | - | - | - | - | z | c | 6++ | Mを論理右シフト | Absolute |
110 | $6E | qq pp | ROR $ppqq | 3 | n | - | - | - | - | - | z | c | 6++ | Mを右ローテート | Absolute |
254 | $FE | qq pp | INC $ppqq,X | 3 | n | - | - | - | - | - | z | - | 7++ | Mを+1 | Absolute Indexed, X |
222 | $DE | qq pp | DEC $ppqq,X | 3 | n | - | - | - | - | - | z | - | 7++ | Mを-1 | Absolute Indexed, X |
030 | $1E | qq pp | ASL $ppqq,X | 3 | n | - | - | - | - | - | z | c | 7++ | Mを算術左シフト | Absolute Indexed, X |
062 | $3E | qq pp | ROL $ppqq,X | 3 | n | - | - | - | - | - | z | c | 7++ | Mを左ローテート | Absolute Indexed, X |
094 | $5E | qq pp | LSR $ppqq,X | 3 | n | - | - | - | - | - | z | c | 7++ | Mを論理右シフト | Absolute Indexed, X |
126 | $7E | qq pp | ROR $ppqq,X | 3 | n | - | - | - | - | - | z | c | 7++ | Mを右ローテート | Absolute Indexed, X |
ストア
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
100 | $64 | nn | STZ $nn | 2 | - | - | - | - | - | - | - | - | 3+ | M=#0 | Direct Page (DP) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
133 | $85 | nn | STA $nn | 2 | - | - | - | - | - | - | - | - | 3+ | M=A | Direct Page (DP) |
132 | $84 | nn | STY $nn | 2 | - | - | - | - | - | - | - | - | 3+ | M=Y | Direct Page (DP) |
134 | $86 | nn | STX $nn | 2 | - | - | - | - | - | - | - | - | 3+ | M=X | Direct Page (DP) |
116 | $74 | nn | STZ $nn,X | 2 | - | - | - | - | - | - | - | - | 4+ | M=#0 | DP Indexed, X |
149 | $95 | nn | STA $nn,X | 2 | - | - | - | - | - | - | - | - | 4+ | M=A | DP Indexed, X |
148 | $94 | nn | STY $nn,X | 2 | - | - | - | - | - | - | - | - | 4+ | M=Y | DP Indexed, X |
150 | $96 | nn | STX $nn,Y | 2 | - | - | - | - | - | - | - | - | 4+ | M=X | DP Indexed, Y |
156 | $9C | qq pp | STZ $ppqq | 3 | - | - | - | - | - | - | - | - | 4+ | M=#0 | Absolute |
141 | $8D | qq pp | STA $ppqq | 3 | - | - | - | - | - | - | - | - | 4+ | M=A | Absolute |
140 | $8C | qq pp | STY $ppqq | 3 | - | - | - | - | - | - | - | - | 4+ | M=Y | Absolute |
142 | $8E | qq pp | STX $ppqq | 3 | - | - | - | - | - | - | - | - | 4+ | M=X | Absolute |
158 | $9E | qq pp | STZ $ppqq,X | 3 | - | - | - | - | - | - | - | - | 5+ | M=#0 | Absolute Indexed, X |
157 | $9D | qq pp | STA $ppqq,X | 3 | - | - | - | - | - | - | - | - | 5+ | M=A | Absolute Indexed, X |
153 | $99 | qq pp | STA $ppqq,Y | 3 | - | - | - | - | - | - | - | - | 5+ | M=A | Absolute Indexed, Y |
143 | $8F | qq pp uu | STA $uu:ppqq | 4 | - | - | - | - | - | - | - | - | 5+ | M=A | Absolute Long |
159 | $9F | qq pp uu | STA $uu:ppqq,X | 4 | - | - | - | - | - | - | - | - | 5+ | M=A | Absolute Long Indexed, X |
146 | $92 | nn | STA ($nn) | 2 | - | - | - | - | - | - | - | - | 5+ | M=A | DP Indirect |
145 | $91 | nn | STA ($nn),Y | 2 | - | - | - | - | - | - | - | - | 6+ | M=A | DP Indirect Indexed, Y |
129 | $81 | nn | STA ($nn,X) | 2 | - | - | - | - | - | - | - | - | 6+ | M=A | DP Indexed Indirect, X |
135 | $87 | nn | STA [$nn] | 2 | - | - | - | - | - | - | - | - | 6+ | M=A | DP Indirect Long |
151 | $97 | nn | STA [$nn],Y | 2 | - | - | - | - | - | - | - | - | 6+ | M=A | DP Indirect Long Indexed, Y |
131 | $83 | rr | STA $rr,S | 2 | - | - | - | - | - | - | - | - | 4+ | M=A | Stack Relative (SR) |
147 | $93 | rr | STA ($rr,S),Y | 2 | - | - | - | - | - | - | - | - | 7+ | M=A | SR Indirect Indexed, Y |
アキュムレータ演算
ビットテスト
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
137 | $89 | vv hh | BIT #$hhvv | 3 | - | - | - | - | - | - | z | - | 2+ | P <= A&I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | BIT #$vv | 2 | |||||||||||||
036 | $24 | nn | BIT $nn | 2 | n | v | - | - | - | - | z | - | 3+ | P <= A&M | Direct Page (DP) |
052 | $34 | nn | BIT $nn,X | 2 | n | v | - | - | - | - | z | - | 4+ | P <= A&M | DP Indexed, X |
042 | $2C | qq pp | BIT $ppqq | 3 | n | v | - | - | - | - | z | - | 4+ | P <= A&M | Absolute |
060 | $3C | qq pp | BIT $ppqq,X | 3 | n | v | - | - | - | - | z | - | 4+ | P <= A&M | Absolute Indexed, X |
[NOTE] PSR[nv]: 演算結果に関係なくメモリ値の上位2bitが入る
比較
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
201 | $C9 | vv hh | CMP #$hhvv | 3 | n | - | - | - | - | - | z | c | 2+ | P <= A‐I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | CMP #$vv | 2 | |||||||||||||
197 | $C5 | nn | CMP $nn | 2 | n | - | - | - | - | - | z | c | 3+ | P <= A‐M | Direct Page (DP) |
213 | $D5 | nn | CMP $nn,X | 2 | n | - | - | - | - | - | z | c | 4+ | P <= A‐M | DP Indexed, X |
205 | $CD | qq pp | CMP $ppqq | 3 | n | - | - | - | - | - | z | c | 4+ | P <= A‐M | Absolute |
221 | $DD | qq pp | CMP $ppqq,X | 3 | n | - | - | - | - | - | z | c | 4+ | P <= A‐M | Absolute Indexed, X |
217 | $D9 | qq pp | CMP $ppqq,Y | 3 | n | - | - | - | - | - | z | c | 4+ | P <= A‐M | Absolute Indexed, Y |
207 | $CF | qq pp uu | CMP $uu:ppqq | 4 | n | - | - | - | - | - | z | c | 5+ | P <= A‐M | Absolute Long |
223 | $DF | qq pp uu | CMP $uu:ppqq,X | 4 | n | - | - | - | - | - | z | c | 5+ | P <= A‐M | Absolute Long Indexed, X |
210 | $D2 | nn | CMP ($nn) | 2 | n | - | - | - | - | - | z | c | 5+ | P <= A‐M | DP Indirect |
209 | $D1 | nn | CMP ($nn),Y | 2 | n | - | - | - | - | - | z | c | 5+ | P <= A‐M | DP Indirect Indexed, Y |
193 | $C1 | nn | CMP ($nn,X) | 2 | n | - | - | - | - | - | z | c | 6+ | P <= A‐M | DP Indexed Indirect, X |
199 | $C7 | nn | CMP [$nn] | 2 | n | - | - | - | - | - | z | c | 6+ | P <= A‐M | DP Indirect Long |
215 | $D7 | nn | CMP [$nn],Y | 2 | n | - | - | - | - | - | z | c | 6+ | P <= A‐M | DP Indirect Long Indexed, Y |
195 | $C3 | rr | CMP $rr,S | 2 | n | - | - | - | - | - | z | c | 4+ | P <= A‐SA[ S+I ] | Stack Relative (SR) |
211 | $D3 | rr | CMP ($rr,S),Y | 2 | n | - | - | - | - | - | z | c | 7+ | P <= A‐SA[ R(S+I)+Y ] | SR Indirect Indexed, Y |
[NOTE] 演算によるフラグ変化を取得(CPX/CPYも同様) PSR[n]: 演算結果の最上位bit PSR[z]: レジスタ値≠オペランド値ならz=0, 等価ならz=1 PSR[c]: レジスタ値<オペランド値ならc=0, 以上ならc=1
ロード
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
169 | $A9 | vv hh | LDA #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | A=I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | LDA #$vv | 2 | |||||||||||||
165 | $A5 | nn | LDA $nn | 2 | n | - | - | - | - | - | z | - | 3+ | A=M | Direct Page (DP) |
181 | $B5 | nn | LDA $nn,X | 2 | n | - | - | - | - | - | z | - | 4+ | A=M | DP Indexed, X |
173 | $AD | qq pp | LDA $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | A=M | Absolute |
189 | $BD | qq pp | LDA $ppqq,X | 3 | n | - | - | - | - | - | z | - | 4+ | A=M | Absolute Indexed, X |
185 | $B9 | qq pp | LDA $ppqq,Y | 3 | n | - | - | - | - | - | z | - | 4+ | A=M[ I +Y] | Absolute Indexed, Y |
175 | $AF | qq pp uu | LDA $uu:ppqq | 4 | n | - | - | - | - | - | z | - | 5+ | A=M | Absolute Long |
191 | $BF | qq pp uu | LDA $uu:ppqq,X | 4 | n | - | - | - | - | - | z | - | 5+ | A=M | Absolute Long Indexed, X |
178 | $B2 | nn | LDA ($nn) | 2 | n | - | - | - | - | - | z | - | 5+ | A=M | DP Indirect |
177 | $B1 | nn | LDA ($nn),Y | 2 | n | - | - | - | - | - | z | - | 5+ | A=M | DP Indirect Indexed, Y |
161 | $A1 | nn | LDA ($nn,X) | 2 | n | - | - | - | - | - | z | - | 6+ | A=M | DP Indexed Indirect, X |
167 | $A7 | nn | LDA [$nn] | 2 | n | - | - | - | - | - | z | - | 6+ | A=M | DP Indirect Long |
183 | $B7 | nn | LDA [$nn],Y | 2 | n | - | - | - | - | - | z | - | 6+ | A=M | DP Indirect Long Indexed, Y |
163 | $A3 | rr | LDA $rr,S | 2 | n | - | - | - | - | - | z | - | 4+ | A=SA[ S+I ] | Stack Relative (SR) |
179 | $B3 | rr | LDA ($rr,S),Y | 2 | n | - | - | - | - | - | z | - | 7+ | A=SA[ R(S+I)+Y ] | SR Indirect Indexed, Y |
ビット演算(論理積)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
041 | $29 | vv hh | AND #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | A=A&I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | AND #$vv | 2 | |||||||||||||
037 | $25 | nn | AND $nn | 2 | n | - | - | - | - | - | z | - | 3+ | A=A&M | Direct Page (DP) |
053 | $35 | nn | AND $nn,X | 2 | n | - | - | - | - | - | z | - | 4+ | A=A&M | DP Indexed, X |
045 | $2D | qq pp | AND $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | A=A&M | Absolute |
061 | $3D | qq pp | AND $ppqq,X | 3 | n | - | - | - | - | - | z | - | 4+ | A=A&M | Absolute Indexed, X |
057 | $39 | qq pp | AND $ppqq,Y | 3 | n | - | - | - | - | - | z | - | 4+ | A=A&M | Absolute Indexed, Y |
047 | $2F | qq pp uu | AND $uu:ppqq | 4 | n | - | - | - | - | - | z | - | 5+ | A=A&M | Absolute Long |
063 | $3F | qq pp uu | AND $uu:ppqq,X | 4 | n | - | - | - | - | - | z | - | 5+ | A=A&M | Absolute Long Indexed, X |
050 | $32 | nn | AND ($nn) | 2 | n | - | - | - | - | - | z | - | 5+ | A=A&M | DP Indirect |
049 | $31 | nn | AND ($nn),Y | 2 | n | - | - | - | - | - | z | - | 5+ | A=A&M | DP Indirect Indexed, Y |
033 | $21 | nn | AND ($nn,X) | 2 | n | - | - | - | - | - | z | - | 6+ | A=A&M | DP Indexed Indirect, X |
039 | $27 | nn | AND [$nn] | 2 | n | - | - | - | - | - | z | - | 6+ | A=A&M | DP Indirect Long |
055 | $37 | nn | AND [$nn],Y | 2 | n | - | - | - | - | - | z | - | 6+ | A=A&M | DP Indirect Long Indexed, Y |
035 | $23 | rr | AND $rr,S | 2 | n | - | - | - | - | - | z | - | 4+ | A=A&SA[ S+I ] | Stack Relative (SR) |
051 | $33 | rr | AND ($rr,S),Y | 2 | n | - | - | - | - | - | z | - | 7+ | A=A&SA[ R(S+I)+Y ] | SR Indirect Indexed, Y |
ビット演算(論理和)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
009 | $09 | vv hh | ORA #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | A=A|I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | ORA #$vv | 2 | |||||||||||||
005 | $05 | nn | ORA $nn | 2 | n | - | - | - | - | - | z | - | 3+ | A=A|M | Direct Page (DP) |
021 | $15 | nn | ORA $nn,X | 2 | n | - | - | - | - | - | z | - | 4+ | A=A|M | DP Indexed, X |
013 | $0D | qq pp | ORA $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | A=A|M | Absolute |
029 | $1D | qq pp | ORA $ppqq,X | 3 | n | - | - | - | - | - | z | - | 4+ | A=A|M | Absolute Indexed, X |
025 | $19 | qq pp | ORA $ppqq,Y | 3 | n | - | - | - | - | - | z | - | 4+ | A=A|M | Absolute Indexed, Y |
015 | $0F | qq pp uu | ORA $uu:ppqq | 4 | n | - | - | - | - | - | z | - | 5+ | A=A|M | Absolute Long |
031 | $1F | qq pp uu | ORA $uu:ppqq,X | 4 | n | - | - | - | - | - | z | - | 5+ | A=A|M | Absolute Long Indexed, X |
018 | $12 | nn | ORA ($nn) | 2 | n | - | - | - | - | - | z | - | 5+ | A=A|M | DP Indirect |
017 | $11 | nn | ORA ($nn),Y | 2 | n | - | - | - | - | - | z | - | 5+ | A=A|M | DP Indirect Indexed, Y |
001 | $01 | nn | ORA ($nn,X) | 2 | n | - | - | - | - | - | z | - | 6+ | A=A|M | DP Indexed Indirect, X |
007 | $07 | nn | ORA [$nn] | 2 | n | - | - | - | - | - | z | - | 6+ | A=A|M | DP Indirect Long |
023 | $17 | nn | ORA [$nn],Y | 2 | n | - | - | - | - | - | z | - | 6+ | A=A|M | DP Indirect Long Indexed, Y |
003 | $03 | rr | ORA $rr,S | 2 | n | - | - | - | - | - | z | - | 4+ | A=A|SA[ S+I ] | Stack Relative (SR) |
019 | $13 | rr | ORA ($rr,S),Y | 2 | n | - | - | - | - | - | z | - | 7+ | A=A|SA[ R(S+I)+Y ] | SR Indirect Indexed, Y |
ビット演算(排他的論理和)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
073 | $49 | vv hh | EOR #$hhvv | 3 | n | - | - | - | - | - | z | - | 2+ | A=A@I | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | EOR #$vv | 2 | |||||||||||||
069 | $45 | nn | EOR $nn | 2 | n | - | - | - | - | - | z | - | 3+ | A=A@M | Direct Page (DP) |
085 | $55 | nn | EOR $nn,X | 2 | n | - | - | - | - | - | z | - | 4+ | A=A@M | DP Indexed, X |
077 | $4D | qq pp | EOR $ppqq | 3 | n | - | - | - | - | - | z | - | 4+ | A=A@M | Absolute |
093 | $5D | qq pp | EOR $ppqq,X | 3 | n | - | - | - | - | - | z | - | 4+ | A=A@M | Absolute Indexed, X |
089 | $59 | qq pp | EOR $ppqq,Y | 3 | n | - | - | - | - | - | z | - | 4+ | A=A@M | Absolute Indexed, Y |
079 | $4F | qq pp uu | EOR $uu:ppqq | 4 | n | - | - | - | - | - | z | - | 5+ | A=A@M | Absolute Long |
095 | $5F | qq pp uu | EOR $uu:ppqq,X | 4 | n | - | - | - | - | - | z | - | 5+ | A=A@M | Absolute Long Indexed, X |
082 | $52 | nn | EOR ($nn) | 2 | n | - | - | - | - | - | z | - | 5+ | A=A@M | DP Indirect |
081 | $51 | nn | EOR ($nn),Y | 2 | n | - | - | - | - | - | z | - | 5+ | A=A@M | DP Indirect Indexed, Y |
065 | $41 | nn | EOR ($nn,X) | 2 | n | - | - | - | - | - | z | - | 6+ | A=A@M | DP Indexed Indirect, X |
071 | $47 | nn | EOR [$nn] | 2 | n | - | - | - | - | - | z | - | 6+ | A=A@M | DP Indirect Long |
087 | $57 | nn | EOR [$nn],Y | 2 | n | - | - | - | - | - | z | - | 6+ | A=A@M | DP Indirect Long Indexed, Y |
067 | $43 | rr | EOR $rr,S | 2 | n | - | - | - | - | - | z | - | 4+ | A=A@SA[ S+I ] | Stack Relative (SR) |
083 | $53 | rr | EOR ($rr,S),Y | 2 | n | - | - | - | - | - | z | - | 7+ | A=A@SA[ R(S+I)+Y ] | SR Indirect Indexed, Y |
算術演算(キャリー付加算)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
105 | $69 | vv hh | ADC #$hhvv | 3 | n | v | - | - | - | - | z | c | 2+ | A=A+I+c | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | ADC #$vv | 2 | |||||||||||||
101 | $65 | nn | ADC $nn | 2 | n | v | - | - | - | - | z | c | 3+ | A=A+M+c | Direct Page (DP) |
117 | $75 | nn | ADC $nn,X | 2 | n | v | - | - | - | - | z | c | 4+ | A=A+M+c | DP Indexed, X |
109 | $6D | qq pp | ADC $ppqq | 3 | n | v | - | - | - | - | z | c | 4+ | A=A+M+c | Absolute |
125 | $7D | qq pp | ADC $ppqq,X | 3 | n | v | - | - | - | - | z | c | 4+ | A=A+M+c | Absolute Indexed, X |
121 | $79 | qq pp | ADC $ppqq,Y | 3 | n | v | - | - | - | - | z | c | 4+ | A=A+M+c | Absolute Indexed, Y |
111 | $6F | qq pp uu | ADC $uu:ppqq | 4 | n | v | - | - | - | - | z | c | 5+ | A=A+M+c | Absolute Long |
127 | $7F | qq pp uu | ADC $uu:ppqq,X | 4 | n | v | - | - | - | - | z | c | 5+ | A=A+M+c | Absolute Long Indexed, X |
114 | $72 | nn | ADC ($nn) | 2 | n | v | - | - | - | - | z | c | 5+ | A=A+M+c | DP Indirect |
113 | $71 | nn | ADC ($nn),Y | 2 | n | v | - | - | - | - | z | c | 5+ | A=A+M+c | DP Indirect Indexed, Y |
097 | $61 | nn | ADC ($nn,X) | 2 | n | v | - | - | - | - | z | c | 6+ | A=A+M+c | DP Indexed Indirect, X |
103 | $67 | nn | ADC [$nn] | 2 | n | v | - | - | - | - | z | c | 6+ | A=A+M+c | DP Indirect Long |
119 | $77 | nn | ADC [$nn],Y | 2 | n | v | - | - | - | - | z | c | 6+ | A=A+M+c | DP Indirect Long Indexed, Y |
099 | $63 | rr | ADC $rr,S | 2 | n | v | - | - | - | - | z | c | 4+ | A=A+SA[ S+I ]+c | Stack Relative (SR) |
115 | $73 | rr | ADC ($rr,S),Y | 2 | n | v | - | - | - | - | z | c | 7+ | A=A+SA[ R(S+I)+Y ]+c | SR Indirect Indexed, Y |
[NOTE] 実行時にc=1なら演算結果を更に+1, 演算後に最上位bitへの繰上げ発生(nが0→1と変化)すればv=1、しなければv=0
算術演算(キャリー付減算)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
233 | $E9 | vv hh | SBC #$hhvv | 3 | n | v | - | - | - | - | z | c | 2+ | A=A‐I-!c | Immediate |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
vv | SBC #$vv | 2 | |||||||||||||
229 | $E5 | nn | SBC $nn | 2 | n | v | - | - | - | - | z | c | 3+ | A=A‐M-!c | Direct Page (DP) |
245 | $F5 | nn | SBC $nn,X | 2 | n | v | - | - | - | - | z | c | 4+ | A=A‐M-!c | DP Indexed, X |
237 | $ED | qq pp | SBC $ppqq | 3 | n | v | - | - | - | - | z | c | 4+ | A=A‐M-!c | Absolute |
253 | $FD | qq pp | SBC $ppqq,X | 3 | n | v | - | - | - | - | z | c | 4+ | A=A‐M-!c | Absolute Indexed, X |
249 | $F9 | qq pp | SBC $ppqq,Y | 3 | n | v | - | - | - | - | z | c | 4+ | A=A‐M-!c | Absolute Indexed, Y |
239 | $EF | qq pp uu | SBC $uu:ppqq | 4 | n | v | - | - | - | - | z | c | 5+ | A=A‐M-!c | Absolute Long |
255 | $FF | qq pp uu | SBC $uu:ppqq,X | 4 | n | v | - | - | - | - | z | c | 5+ | A=A‐M-!c | Absolute Long Indexed, X |
242 | $F2 | nn | SBC ($nn) | 2 | n | v | - | - | - | - | z | c | 5+ | A=A‐M[ R( D+I) ]-!c | DP Indirect |
241 | $F1 | nn | SBC ($nn),Y | 2 | n | v | - | - | - | - | z | c | 5+ | A=A‐M-!c | DP Indirect Indexed, Y |
225 | $E1 | nn | SBC ($nn,X) | 2 | n | v | - | - | - | - | z | c | 6+ | A=A‐M[ R( D+I+X) ]-!c | DP Indexed Indirect, X |
231 | $E7 | nn | SBC [$nn] | 2 | n | v | - | - | - | - | z | c | 6+ | A=A‐M-!c | DP Indirect Long |
247 | $F7 | nn | SBC [$nn],Y | 2 | n | v | - | - | - | - | z | c | 6+ | A=A‐M-!c | DP Indirect Long Indexed, Y |
227 | $E3 | rr | SBC $rr,S | 2 | n | v | - | - | - | - | z | c | 4+ | A=A‐SA[ S+I ]-!c | Stack Relative (SR) |
243 | $F3 | rr | SBC ($rr,S),Y | 2 | n | v | - | - | - | - | z | c | 7+ | A=A‐SA[ R(S+I)+Y ]-!c | SR Indirect Indexed, Y |
[NOTE] 実行時にc=0なら演算結果を更に-1, 演算後に最上位bitからの繰下げ発生(nが1→0と変化)すればv=1、しなければv=0
プログラムカウンタ
条件分岐(相対ジャンプ)
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
016 | $10 | rr | BPL {near} | 2 | - | - | - | - | - | - | - | - | 3 | n=0なら分岐(直前結果が0以上) | Program Counter Relative |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
048 | $30 | rr | BMI {near} | 2 | - | - | - | - | - | - | - | - | 3 | n=1なら分岐(直前結果が0未満) | Program Counter Relative |
080 | $50 | rr | BVC {near} | 2 | - | - | - | - | - | - | - | - | 3 | v=0なら分岐(直前結果が正常) | Program Counter Relative |
112 | $70 | rr | BVS {near} | 2 | - | - | - | - | - | - | - | - | 3 | v=1なら分岐(直前結果が範囲超過) | Program Counter Relative |
144 | $90 | rr | BCC {near} | 2 | - | - | - | - | - | - | - | - | 3 | c=0なら分岐(キャリーなし) | Program Counter Relative |
176 | $B0 | rr | BCS {near} | 2 | - | - | - | - | - | - | - | - | 3 | c=1なら分岐(キャリー発生) | Program Counter Relative |
208 | $D0 | rr | BNE {near} | 2 | - | - | - | - | - | - | - | - | 3 | z=0なら分岐(直前結果が0以外) | Program Counter Relative |
240 | $F0 | rr | BEQ {near} | 2 | - | - | - | - | - | - | - | - | 3 | z=1なら分岐(直前結果が0) | Program Counter Relative |
128 | $80 | rr | BRA {near} | 2 | - | - | - | - | - | - | - | - | 3 | 常に分岐 | Program Counter Relative |
130 | $82 | rr hh | BRL {far} | 3 | - | - | - | - | - | - | - | - | 4 | 常に分岐(バンク内全領域) | PC Relative Long |
[NOTE] 分岐しない場合Cycle-1, 飛べる範囲は次コード位置から{-128($80)~+127($7F)}なので$FEで無限ループ、$FFだと暴走する
絶対ジャンプ
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
076 | $4C | qq pp | JMP $ppqq | 3 | - | - | - | - | - | - | - | - | 3 | バンク内ジャンプ | Absolute (PC) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
092 | $5C | qq pp uu | JML $uu:ppqq | 4 | - | - | - | - | - | - | - | - | 4 | 絶対指定ジャンプ | Absolute Long (PC) |
108 | $6C | nn hh | JMP ($hhnn) | 3 | - | - | - | - | - | - | - | - | 5 | 参照バンク内ジャンプ ($00/hhnn の2bytes) | Absolute Indirect (PC) |
124 | $7C | qq pp | JMP ($ppqq,X) | 3 | - | - | - | - | - | - | - | - | 6 | 参照バンク内ジャンプ (PBR/ppqq +X の2bytes) | Absolute Indexed Indirect (PC) |
220 | $DC | nn hh | JML [$hhnn] | 3 | - | - | - | - | - | - | - | - | 6 | 参照絶対指定ジャンプ ($00/hhnn の3bytes) | Absolute Indirect Long (PC) |
サブルーチン/割込
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
032 | $20 | qq pp | JSR $ppqq | 3 | - | - | - | - | - | - | - | - | 6 | バンク内サブルーチン | Absolute (PC, Stack) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
034 | $22 | qq pp uu | JSL $uu:ppqq | 4 | - | - | - | - | - | - | - | - | 8 | 絶対指定サブルーチン | Absolute Long (PC, Stack) |
252 | $FC | qq pp | JSR ($ppqq,X) | 3 | - | - | - | - | - | - | - | - | 8 | 参照型バンク内サブルーチン (PBR/ppqq +X の2bytes) | Absolute Indexed Indirect (PC, Stack) |
000 | $00 | xx | BRK #$xx | 2 | - | - | - | - | d | i | - | - | 8 | ソフトウェア割込(BRK) | Stack / Interrupt (BRK) |
002 | $02 | xx | COP #$xx | 2 | - | - | - | - | d | i | - | - | 8 | ソフトウェア割込(COP) | Stack / Interrupt (COP) |
096 | $60 | -- | RTS | 1 | - | - | - | - | - | - | - | - | 6 | JSRサブルーチンから復帰 | Stack (RTS) |
107 | $6B | -- | RTL | 1 | - | - | - | - | - | - | - | - | 6 | JSLサブルーチンから復帰 | Stack (RTL) |
064 | $40 | -- | RTI | 1 | n | v | m | x | d | i | z | c | 7 | 割込処理(NMI,IRQ,BRK,COP)から復帰 | Stack (RTI) |
[NOTE] PBR(LI)/PCH/PCL/PSR(I) の順にスタックに積む(取り出すときは逆順) ※PBRはロング指定(L)と割込(I)、PSRは割込のみ
特殊用途
ブロック転送
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
084 | $54 | tt ss | MVN #$ss,#$tt | 3 | - | - | - | - | - | - | - | - | 7* | 下から上へ転送(XY++) | XYC / Block Move Negative |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
068 | $44 | tt ss | MVP #$ss,#$tt | 3 | - | - | - | - | - | - | - | - | 7* | 上から下へ転送(XY--) | XYC / Block Move Positive |
[NOTE] Cycle=転送バイト数x7, 実行時にDBRがttに変化 ss=転送元バンク, tt=転送先バンク, X=転送元開始アドレス, Y=転送先開始アドレス, C=転送バイト数-1 XYAは常に16bitで扱うのでm=1時はBの内容に注意(x=1時はゼロページの256byteしか指定できない) 同一バンク内転送はY<XならMVN、Y>XではMVPを用いる(転送量次第で転送前に転送元領域が破壊されるため)
その他
# | OC | Operand | Mnemonic | Size | PSR | Cycle | Description | Addressing Mode | |||||||
234 | $EA | -- | NOP | 1 | - | - | - | - | - | - | - | - | 2 | 何もせず次のコードを実行 | Implied |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
203 | $CB | -- | WAI | 1 | - | - | - | - | - | - | - | - | 3 | 割込が入るまでCPU停止(IRQ割込禁止(i=1)時にIRQ割込が入るとPC++) | Implied |
219 | $DB | -- | STP | 1 | - | - | - | - | - | - | - | - | 3 | リセットするまでCPU停止(SNESでの使いどころは‥‥?) | Implied |
066 | $42 | xx | WDM (undef) | 2 | - | - | - | - | - | - | - | - | 2 | 未定義(マルチバイト命令のヘッダとして予約、65816では2byteでNOPとして処理) | n/a (Reserved) |
コプロセッサによる乗算・除算
DBR≠0のときはBank$00の絶対アドレス指定で行うこと
乗算8bit (8bit * 8bit) ※結果は16bit ① $4202(WRMPYA)に被乗数をセット ② $4203(WRMPYB)に乗数をセット(このアドレスに値を入れると計算が始まる) ③ $4216(RDMPYL)-$4217(RDMPYH)に乗算結果が入る(所要8cycle)
除算8bit (16bit / 8bit) ※結果は16bit ① $4204(WRDIVL)-$4205(WRDIVH)に被除数をセット ② $4206(WRDIVB)に除数をセット(このアドレスに値を入れると計算が始まる) ③ $4214(RDDIVL)-$4215(RDDIVH)に商、$4216(RDMPYL)-$4217(RDMPYH)に剰余が入る(所要16cycle) ※ゼロ除算を行うと商に#$FFFF、剰余に被除数が入る
乗算16bit (16bit * 8bit) ※結果は符号付24bit ① $211B(M7A‐Rotation/Scaling Parameter A)に被乗数の下位バイトをセット ② 続けて同アドレスに被乗数の上位バイトをセット(このポートは2度書き) ③ $211C(M7B‐Rotation/Scaling Parameter B)に乗数をセット(このアドレスに値を入れると計算が始まる) ④ $2134-$2136(MPYL,MPYM,MPYH‐Signed Multiply Result)に乗算結果が入る(所要16cycle)
R/W | Port Address | Name | Size | Description |
W | $4202 | WRMPYA | 1 | 被乗数 |
W | $4203 | WRMPYB | 1 | 乗数(ここにストアすると計算開始) |
W | $4204 $4205 | WRDIVL WRDIVH | 2 | 被除数 |
W | $4206 | WRDIVB | 1 | 除数(ここにストアすると計算開始) |
R | $4214 $4215 | RDDIVL RDDIVH | 2 | 除算結果の商(ゼロ除算を行うと#$FFFFが返る) |
R | $4216 $4217 | RDMPYL RDMPYH | 2 | 乗算結果または除算結果の剰余(ゼロ除算を行うと被除数が返る) |
W | $211B | M7A (Rotation / Scaling Parameter A) | 1 | 被乗数(下位・上位と2回ストアする) |
W | $211C | M7B (Rotation / Scaling Parameter B) | 1 | 乗数(ここにストアすると計算開始) |
R | $2134 $2135 $2136 | MPYL MPYM MPYH | 3 | 乗算結果(符号付24bit) |
【レジスタ/メモリ】 A : アキュムレータ下位8bit(m=0時はC表記することもある) B : アキュムレータ上位8bit(m=1時は基本的に不変で使用不可) C : アキュムレータ(16bit, m=0時のAの別称) X,Y: インデックスレジスタ(x=1切替時に上位8bitはゼロクリアされる) P : プロセッサステータスレジスタ[PSR](8bit, いわゆるフラグ用のレジスタ) D : ダイレクトポインタ[DP](16bit) S : スタックポインタ[SP](16bit, e=1時の上位は#$01固定) DB : データバンクレジスタ[DBR](8bit, 操作アドレスが16bit範囲を超過すると一時的に変化) PB : プログラムバンクレジスタ[PBR](8bit, PCが16bit範囲を超えても変化しない) PC : プログラムカウンタ(16bit, 範囲超過してもPBに影響を与えない) M : メモリ(RAM,ROM,I/Oポート等) SAn: スタック領域(RAM) ※nはスタックサイズ
【プロセッサステータスレジスタ(PSR)】 n: Negative [1=演算結果の最上位bitが1] v: Overflow [1=算術オーバーフロー発生] m: Memory [1=8bit, 0=16bit] ※e=1のときは1固定で変更不可 x: Index [1=8bit, 0=16bit] ※e=1のときbフラグに変化し、XY=8bit固定 d: Decimal [1=BCD(2進化10進), 0=HEX(16進)] ※BCDモードは算術演算(ADC/SBC)のみ有効 i: Interrupt [1=IRQ禁止, 0=IRQ許可] ※IRQ以外の割込には影響しない z: Zero [1=演算結果が0] c: Carry [1=キャリー発生] e: Emulation [1=Emulation, 0=Native] ※リセット・電源投入直後はe=1
[NOTE] 逆汗(SNES 65816逆アセンブラ)でのニーモニック表記の相違 条件分岐: 飛び先のアドレスを出力 MVN,MVP: $tt,$ssと出力(本来のオペランドは表のとおり) PEA: 表のとおりImmediateとして出力(公式ではAbsolute) PEI: オペランドをそのまま出力 WDM: オペランドなし(undef)の1byteで出力
用途別一覧
+ : 16bit Mode(m=0/x=0)時Cycle+1 ++: 16bit Mode(m=0)時Cycle+2 *1: Dの下位バイト(DL)≠0ならCycle+1 *2: Index追加時にページ境界を跨ぐ場合はCycle+1
レジスタ間
Transfer | to S | to D | to A | to X | to Y | Size | Cycle | Description |
from S | -- | -- | 3B | BA | -- | 1 | 2 | 常に16bit転送 |
from D | -- | -- | 7B | -- | -- | 常に16bit転送 | ||
from A | 1B | 5B | -- | AA | A8 | 常に16bit転送 | ||
from X | 9A | -- | 8A | -- | 9B | TXA: m=1時Bは不変 | ||
from Y | -- | -- | 98 | BB | -- | TYA: m=1時Bは不変 | ||
exchange C | EB | 1 | 3 | AとBを入替 |
インデックス
Addressing Mode | Mnemonic | CPY | LDY | STY | CPX | LDX | STX | Size | Cycle | Description |
Immediate | {Mnem} #$hhvv / #$vv | C0 | A0 | -- | E0 | A2 | -- | 2+ | 2+ | 16bit(x=0) / 8bit(x=1) |
Direct Page (DP) | {Mnem} $nn | C4 | A4 | 84 | E4 | A6 | 86 | 2 | 3+ | *1 |
DP Indexed, X/Y | {Mnem} $nn,X / $nn,Y | -- | B4 | 94 | -- | B6 | 96 | 2 | 4+ | *1*2 |
Absolute | {Mnem} $ppqq | CC | AC | 8C | EC | AE | 8E | 3 | 4+ | |
Absolute Indexed, X/Y | {Mnem} $ppqq,X / $ppqq,Y | -- | BC | -- | -- | BE | -- | 3 | 4+ | *2 |
Implied | INY / INX | C8 | E8 | 1 | 2 | Increment | ||||
DEY / DEX | 88 | CA | 1 | 2 | Decrement |
アキュムレータ
Addressing Mode | Mnemonic | BIT | CMP | LDA | AND | ORA | EOR | ADC | SBC | STZ | STA | Size | Cycle | Description |
Immediate | {Mnem} #$hhvv / #$vv | 89 | C9 | A9 | 29 | 09 | 49 | 69 | E9 | -- | -- | 2+ | 2+ | 16bit(m=0) / 8bit(m=1) |
Direct Page (DP) | {Mnem} $nn | 24 | C5 | A5 | 25 | 05 | 45 | 65 | E5 | 64 | 85 | 2 | 3+ | *1 |
DP Indexed, X | {Mnem} $nn,X | 34 | D5 | B5 | 35 | 15 | 55 | 75 | F5 | 74 | 95 | 2 | 4+ | *1*2 |
Absolute | {Mnem} $ppqq | 2C | CD | AD | 2D | 0D | 4D | 6D | ED | 9C | 8D | 3 | 4+ | |
Absolute Indexed, X | {Mnem} $ppqq,X | 3C | DD | BD | 3D | 1D | 5D | 7D | FD | 9E | 9D | 3 | 4+ | *2 |
Absolute Indexed, Y | {Mnem} $ppqq,Y | -- | D9 | B9 | 39 | 19 | 59 | 79 | F9 | -- | 99 | 3 | 4+ | *2 |
Absolute Long | {Mnem} $uu:ppqq | -- | CF | AF | 2F | 0F | 4F | 6F | EF | -- | 8F | 4 | 5+ | |
Absolute Long Indexed, X | {Mnem} $uu:ppqq,X | -- | DF | BF | 3F | 1F | 5F | 7F | FF | -- | 9F | 4 | 5+ | |
DP Indirect | {Mnem} ($nn) | -- | D2 | B2 | 32 | 12 | 52 | 72 | F2 | -- | 92 | 2 | 5+ | *1 |
DP Indirect Indexed, Y | {Mnem} ($nn),Y | -- | D1 | B1 | 31 | 11 | 51 | 71 | F1 | -- | 91 | 2 | 5+ | *1*2 |
DP Indexed Indirect, X | {Mnem} ($nn,X) | -- | C1 | A1 | 21 | 01 | 41 | 61 | E1 | -- | 81 | 2 | 6+ | *1 |
DP Indirect Long | {Mnem} [$nn] | -- | C7 | A7 | 27 | 07 | 47 | 67 | E7 | -- | 87 | 2 | 6+ | *1 |
DP Indirect Long Indexed, Y | {Mnem} [$nn],Y | -- | D7 | B7 | 37 | 17 | 57 | 77 | F7 | -- | 97 | 2 | 6+ | *1 |
Stack Relative (SR) | {Mnem} $rr,S | -- | C3 | A3 | 23 | 03 | 43 | 63 | E3 | -- | 83 | 2 | 4+ | |
SR Indirect Indexed, Y | {Mnem} ($rr,S),Y | -- | D3 | B3 | 33 | 13 | 53 | 73 | F3 | -- | 93 | 2 | 7+ |
メモリ
Addressing Mode | Mnemonic | TSB | TRB | ASL | ROL | LSR | ROR | INC | DEC | Size | Cycle | Description |
Accumulator | {Mnem} A | -- | -- | 0A | 2A | 4A | 6A | 1A | 3A | 1 | 2 | |
Direct Page (DP) | {Mnem} $nn | 04 | 14 | 06 | 26 | 46 | 66 | E6 | C6 | 2 | 5++ | *1 |
DP Indexed, X | {Mnem} $nn,X | -- | -- | 16 | 36 | 56 | 76 | F6 | D6 | 2 | 6++ | *1*2 |
Absolute | {Mnem} $ppqq | 0C | 1C | 0E | 2E | 4E | 6E | EE | CE | 3 | 6++ | |
Absolute Indexed, X | {Mnem} $ppqq,X | -- | -- | 1E | 3E | 5E | 7E | FE | DE | 3 | 7++ | *2 |
スタック
Stack | Mnemonic | Opcode | Size | Cycle | Description | ||
Push | Pull | Push | Pull | ||||
Accumulator | PHA / PLA | 48 | 68 | 1 | 3+ | 4+ | 16bit(m=0) / 8bit(m=1) |
Index (Y) | PHY / PLY | 5A | 7A | 1 | 3+ | 4+ | 16bit(x=0) / 8bit(x=1) |
Index (X) | PHX / PLX | DA | FA | 1 | 3+ | 4+ | 16bit(x=0) / 8bit(x=1) |
Program Status (P) | PHP / PLP | 08 | 28 | 1 | 3 | 4 | 8bit |
Direct Pointer (D) | PHD / PLD | 0B | 2B | 1 | 4 | 5 | 16bit |
Data Bank (DB) | PHB / PLB | 8B | AB | 1 | 3 | 4 | 8bit |
Program Bank (PB) | PHK | 4B | -- | 1 | 3 | - | 8bit |
Direct Page Indirect | PEI ($nn) | D4 | -- | 2 | 6 | - | S = 2-- (M[D +I]) |
Immediate / Absolute | PEA #$hhvv | F4 | -- | 3 | 5 | - | S = 2-- (I) |
PC Relative Long | PER {far} | 62 | -- | 3 | 6 | - | S = 2-- (PC +I) |
PC Absolute | JSR $ppqq | 20 | 3 | 6 | S = 2-- (PCH, PCL) | ||
PC Absolute Indexed Indirect | JSR ($ppqq,X) | FC | 3 | 8 | S = 2-- (PCH, PCL) | ||
PC Absolute Long | JSL $uu:ppqq | 22 | 4 | 8 | S = 3-- (PB, PCH, PCL) | ||
Interrupt (BRK) | BRK #$xx | 00 | 2 | 8 | S = 4-- (PB, PCH, PCL, P) | ||
Interrupt (COP) | COP #$xx | 02 | 2 | 8 | S = 4-- (PB, PCH, PCL, P) | ||
Return (Interrupt) | RTI | 40 | 1 | 7 | S = 4++ (P, PCL, PCH, PB) | ||
Return (Current Bank Address) | RTS | 60 | 1 | 6 | S = 2++ (PCL, PCH) | ||
Return (Long Address) | RTL | 6B | 1 | 6 | S = 3++ (PCL, PCH, PB) |
[NOTE] Stack表のOpcode欄が結合されているコードは実行すると実行位置(PC)も変更される