ニーモニック一覧

Last-modified: 2020-07-08 (水) 07:17:06

※このページでは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)
+-------++-------+-------+-------+-------++

用途別

レジスタ・スタック

フラグ操作

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
194$C2vvREP #$vv2nvmxdizc3P=P&!I (指定bitをクリア)Immediate
226$E2vvSEP #$vv2nvmxdizc3P=P|I (指定bitをセット)Immediate
024$18--CLC 1-------c2c=0Implied
056$38--SEC 1-------c2c=1Implied
088$58--CLI 1-----i--2i=0 (IRQ割込許可)Implied
120$78--SEI 1-----i--2i=1 (IRQ割込禁止)Implied
216$D8--CLD 1----d---2d=0 (HEX)Implied
248$F8--SED 1----d---2d=1 (BCD) ※BCDモードは算術演算(ADC/SBC)のみ有効Implied
184$B8--CLV 1-v------2v=0Implied
251$FB--XCE 1--mx---e2cと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

レジスタ間転送

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
027$1B--TCS 1--------2S=C (常に16bit転送)Implied
091$5B--TCD 1n-----z-2D=C (常に16bit転送)Implied
168$A8--TAY 1n-----z-2Y=C (常に16bit転送、x=1時はYH=#0)Implied
170$AA--TAX 1n-----z-2X=C (常に16bit転送、x=1時はXH=#0)Implied
154$9A--TXS 1--------2S=X (x=1時はSH,SL=#0,XL)Implied
138$8A--TXA 1n-----z-2A=X(mx=%01/ %10: B=#0/ 不変)Implied
155$9B--TXY 1n-----z-2Y=XImplied
152$98--TYA 1n-----z-2A=Y (mx=%01/ %10: B=#0/ 不変)Implied
187$BB--TYX 1n-----z-2X=YImplied
186$BA--TSX 1n-----z-2X=S (x=1時はXH,XL=#0,SL)Implied
059$3B--TSC 1n-----z-2C=S (常に16bit転送)Implied
123$7B--TDC 1n-----z-2C=D (常に16bit転送)Implied

スタック操作

#OCOperandMnemonicSizePSRCycleDescriptionAddressing 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--------4SA <= D (16bit)Stack (Push)
008$08--PHP 1--------3SA <= P (8bit)Stack (Push)
139$8B--PHB 1--------3SA <= DB (8bit)Stack (Push)
075$4B--PHK 1--------3SA <= PB (8bit)Stack (Push)
098$62rr hhPER {far}3--------6SA <= PC + I (16bit)Stack (Push, PC Relative Long)
212$D4nnPEI ($nn)2--------6SA <= M (16bit)Stack (Push, DP Indirect)
244$F4vv hhPEA #$hhvv3--------5SA <= I (16bit)Stack (Push, Immediate / Absolute)
104$68--PLA 1n-----z-4+SA => A (m=0: 16bit, m=1: 8bit)Stack (Pull)
122$7A--PLY 1n-----z-4+SA => Y (x=0: 16bit, x=1: 8bit)Stack (Pull)
250$FA--PLX 1n-----z-4+SA => X (x=0: 16bit, x=1: 8bit)Stack (Pull)
043$2B--PLD 1n-----z-5SA => D (16bit)Stack (Pull)
040$28--PLP 1nvmxdizc4SA => P (8bit)Stack (Pull)
171$AB--PLB 1n-----z-4SA => DB (8bit)Stack (Pull)
[NOTE] 16bit値はH/Lの順に積み(S--)、L/Hの順で取り出す(S++)

比較/ロード(Y)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
192$C0vv hhCPY #$hhvv3n-----zc2+P <= Y‐IImmediate
vvCPY #$vv2
160$A0vv hhLDY #$hhvv3n-----z-2+Y=IImmediate
vvLDY #$vv2
196$C4nnCPY $nn2n-----zc3+P <= Y‐MDirect Page (DP)
164$A4nnLDY $nn2n-----z-3+Y=MDirect Page (DP)
180$B4nnLDY $nn,X2n-----z-4+Y=MDP Indexed, X
204$CCqq ppCPY $ppqq3n-----zc4+P <= Y‐MAbsolute
172$ACqq ppLDY $ppqq3n-----z-4+Y=MAbsolute
188$BCqq ppLDY $ppqq,X3n-----z-4+Y=MAbsolute Indexed, X

比較/ロード(X)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
224$E0vv hhCPX #$hhvv3n-----zc2+P <= X‐IImmediate
vvCPX #$vv2
162$A2vv hhLDX #$hhvv3n-----z-2+X=IImmediate
vvLDX #$vv2
228$E4nnCPX $nn2n-----zc3+P <= X‐MDirect Page (DP)
166$A6nnLDX $nn2n-----z-3+X=MDirect Page (DP)
182$B6nnLDX $nn,Y2n-----z-4+X=MDP Indexed, Y
236$ECqq ppCPX $ppqq3n-----zc4+P <= X‐MAbsolute
174$AEqq ppLDX $ppqq3n-----z-4+X=MAbsolute
190$BEqq ppLDX $ppqq,Y3n-----z-4+X=MAbsolute Indexed, Y

レジスタ操作(インデックス増減/アキュムレータ操作)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
200$C8--INY 1n-----z-2Yを+1Implied
136$88--DEY 1n-----z-2Yを-1Implied
232$E8--INX 1n-----z-2Xを+1Implied
202$CA--DEX 1n-----z-2Xを-1Implied
235$EB--XBA 1n-----z-3Cの上位(B)と下位(A)を入替Implied
026$1A--INC A1n-----z-2Aを+1Accumulator
058$3A--DEC A1n-----z-2Aを-1Accumulator
010$0A--ASL A1n-----zc2Aを算術左シフトAccumulator
042$2A--ROL A1n-----zc2Aを左ローテートAccumulator
074$4A--LSR A1n-----zc2Aを論理右シフトAccumulator
106$6A--ROR A1n-----zc2Aを右ローテート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をストア)

テスト/ビット操作(ダイレクトページ)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
020$14nnTRB $nn2------z-5++M=M&!A(指定bitをクリア)Direct Page (DP)
004$04nnTSB $nn2------z-5++M=M|A(指定bitをセット)Direct Page (DP)
230$E6nnINC $nn2n-----z-5++Mを+1Direct Page (DP)
198$C6nnDEC $nn2n-----z-5++Mを-1Direct Page (DP)
006$06nnASL $nn2n-----zc5++Mを算術左シフトDirect Page (DP)
038$26nnROL $nn2n-----zc5++Mを左ローテートDirect Page (DP)
070$46nnLSR $nn2n-----zc5++Mを論理右シフトDirect Page (DP)
102$66nnROR $nn2n-----zc5++Mを右ローテートDirect Page (DP)
246$F6nnINC $nn,X2n-----z-6++Mを+1DP Indexed, X
214$D6nnDEC $nn,X2n-----z-6++Mを-1DP Indexed, X
022$16nnASL $nn,X2n-----zc6++Mを算術左シフトDP Indexed, X
054$36nnROL $nn,X2n-----zc6++Mを左ローテートDP Indexed, X
086$56nnLSR $nn,X2n-----zc6++Mを論理右シフトDP Indexed, X
118$76nnROR $nn,X2n-----zc6++Mを右ローテートDP Indexed, X

テスト/ビット操作(アブソリュート)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
026$1Cqq ppTRB $ppqq3------z-6++M=M&!A(指定bitをクリア)Absolute
012$0Cqq ppTSB $ppqq3------z-6++M=M|A(指定bitをセット)Absolute
238$EEqq ppINC $ppqq3n-----z-6++Mを+1Absolute
206$CEqq ppDEC $ppqq3n-----z-6++Mを-1Absolute
014$0Eqq ppASL $ppqq3n-----zc6++Mを算術左シフトAbsolute
046$2Eqq ppROL $ppqq3n-----zc6++Mを左ローテートAbsolute
078$4Eqq ppLSR $ppqq3n-----zc6++Mを論理右シフトAbsolute
110$6Eqq ppROR $ppqq3n-----zc6++Mを右ローテートAbsolute
254$FEqq ppINC $ppqq,X3n-----z-7++Mを+1Absolute Indexed, X
222$DEqq ppDEC $ppqq,X3n-----z-7++Mを-1Absolute Indexed, X
030$1Eqq ppASL $ppqq,X3n-----zc7++Mを算術左シフトAbsolute Indexed, X
062$3Eqq ppROL $ppqq,X3n-----zc7++Mを左ローテートAbsolute Indexed, X
094$5Eqq ppLSR $ppqq,X3n-----zc7++Mを論理右シフトAbsolute Indexed, X
126$7Eqq ppROR $ppqq,X3n-----zc7++Mを右ローテートAbsolute Indexed, X

ストア

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
100$64nnSTZ $nn2--------3+M=#0Direct Page (DP)
133$85nnSTA $nn2--------3+M=ADirect Page (DP)
132$84nnSTY $nn2--------3+M=YDirect Page (DP)
134$86nnSTX $nn2--------3+M=XDirect Page (DP)
116$74nnSTZ $nn,X2--------4+M=#0DP Indexed, X
149$95nnSTA $nn,X2--------4+M=ADP Indexed, X
148$94nnSTY $nn,X2--------4+M=YDP Indexed, X
150$96nnSTX $nn,Y2--------4+M=XDP Indexed, Y
156$9Cqq ppSTZ $ppqq3--------4+M=#0Absolute
141$8Dqq ppSTA $ppqq3--------4+M=AAbsolute
140$8Cqq ppSTY $ppqq3--------4+M=YAbsolute
142$8Eqq ppSTX $ppqq3--------4+M=XAbsolute
158$9Eqq ppSTZ $ppqq,X3--------5+M=#0Absolute Indexed, X
157$9Dqq ppSTA $ppqq,X3--------5+M=AAbsolute Indexed, X
153$99qq ppSTA $ppqq,Y3--------5+M=AAbsolute Indexed, Y
143$8Fqq pp uuSTA $uu:ppqq4--------5+M=AAbsolute Long
159$9Fqq pp uuSTA $uu:ppqq,X4--------5+M=AAbsolute Long Indexed, X
146$92nnSTA ($nn)2--------5+M=ADP Indirect
145$91nnSTA ($nn),Y2--------6+M=ADP Indirect Indexed, Y
129$81nnSTA ($nn,X)2--------6+M=ADP Indexed Indirect, X
135$87nnSTA [$nn]2--------6+M=ADP Indirect Long
151$97nnSTA [$nn],Y2--------6+M=ADP Indirect Long Indexed, Y
131$83rrSTA $rr,S2--------4+M=AStack Relative (SR)
147$93rrSTA ($rr,S),Y2--------7+M=ASR Indirect Indexed, Y

アキュムレータ演算

ビットテスト

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
137$89vv hhBIT #$hhvv3------z-2+P <= A&IImmediate
vvBIT #$vv2
036$24nnBIT $nn2nv----z-3+P <= A&MDirect Page (DP)
052$34nnBIT $nn,X2nv----z-4+P <= A&MDP Indexed, X
042$2Cqq ppBIT $ppqq3nv----z-4+P <= A&MAbsolute
060$3Cqq ppBIT $ppqq,X3nv----z-4+P <= A&MAbsolute Indexed, X
[NOTE] PSR[nv]: 演算結果に関係なくメモリ値の上位2bitが入る

比較

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
201$C9vv hhCMP #$hhvv3n-----zc2+P <= A‐IImmediate
vvCMP #$vv2
197$C5nnCMP $nn2n-----zc3+P <= A‐MDirect Page (DP)
213$D5nnCMP $nn,X2n-----zc4+P <= A‐MDP Indexed, X
205$CDqq ppCMP $ppqq3n-----zc4+P <= A‐MAbsolute
221$DDqq ppCMP $ppqq,X3n-----zc4+P <= A‐MAbsolute Indexed, X
217$D9qq ppCMP $ppqq,Y3n-----zc4+P <= A‐MAbsolute Indexed, Y
207$CFqq pp uuCMP $uu:ppqq4n-----zc5+P <= A‐MAbsolute Long
223$DFqq pp uuCMP $uu:ppqq,X4n-----zc5+P <= A‐MAbsolute Long Indexed, X
210$D2nnCMP ($nn)2n-----zc5+P <= A‐MDP Indirect
209$D1nnCMP ($nn),Y2n-----zc5+P <= A‐MDP Indirect Indexed, Y
193$C1nnCMP ($nn,X)2n-----zc6+P <= A‐MDP Indexed Indirect, X
199$C7nnCMP [$nn]2n-----zc6+P <= A‐MDP Indirect Long
215$D7nnCMP [$nn],Y2n-----zc6+P <= A‐MDP Indirect Long Indexed, Y
195$C3rrCMP $rr,S2n-----zc4+P <= A‐SA[ S+I ]Stack Relative (SR)
211$D3rrCMP ($rr,S),Y2n-----zc7+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

ロード

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
169$A9vv hhLDA #$hhvv3n-----z-2+A=IImmediate
vvLDA #$vv2
165$A5nnLDA $nn2n-----z-3+A=MDirect Page (DP)
181$B5nnLDA $nn,X2n-----z-4+A=MDP Indexed, X
173$ADqq ppLDA $ppqq3n-----z-4+A=MAbsolute
189$BDqq ppLDA $ppqq,X3n-----z-4+A=MAbsolute Indexed, X
185$B9qq ppLDA $ppqq,Y3n-----z-4+A=M[ I +Y]Absolute Indexed, Y
175$AFqq pp uuLDA $uu:ppqq4n-----z-5+A=MAbsolute Long
191$BFqq pp uuLDA $uu:ppqq,X4n-----z-5+A=MAbsolute Long Indexed, X
178$B2nnLDA ($nn)2n-----z-5+A=MDP Indirect
177$B1nnLDA ($nn),Y2n-----z-5+A=MDP Indirect Indexed, Y
161$A1nnLDA ($nn,X)2n-----z-6+A=MDP Indexed Indirect, X
167$A7nnLDA [$nn]2n-----z-6+A=MDP Indirect Long
183$B7nnLDA [$nn],Y2n-----z-6+A=MDP Indirect Long Indexed, Y
163$A3rrLDA $rr,S2n-----z-4+A=SA[ S+I ]Stack Relative (SR)
179$B3rrLDA ($rr,S),Y2n-----z-7+A=SA[ R(S+I)+Y ]SR Indirect Indexed, Y

ビット演算(論理積)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
041$29vv hhAND #$hhvv3n-----z-2+A=A&IImmediate
vvAND #$vv2
037$25nnAND $nn2n-----z-3+A=A&MDirect Page (DP)
053$35nnAND $nn,X2n-----z-4+A=A&MDP Indexed, X
045$2Dqq ppAND $ppqq3n-----z-4+A=A&MAbsolute
061$3Dqq ppAND $ppqq,X3n-----z-4+A=A&MAbsolute Indexed, X
057$39qq ppAND $ppqq,Y3n-----z-4+A=A&MAbsolute Indexed, Y
047$2Fqq pp uuAND $uu:ppqq4n-----z-5+A=A&MAbsolute Long
063$3Fqq pp uuAND $uu:ppqq,X4n-----z-5+A=A&MAbsolute Long Indexed, X
050$32nnAND ($nn)2n-----z-5+A=A&MDP Indirect
049$31nnAND ($nn),Y2n-----z-5+A=A&MDP Indirect Indexed, Y
033$21nnAND ($nn,X)2n-----z-6+A=A&MDP Indexed Indirect, X
039$27nnAND [$nn]2n-----z-6+A=A&MDP Indirect Long
055$37nnAND [$nn],Y2n-----z-6+A=A&MDP Indirect Long Indexed, Y
035$23rrAND $rr,S2n-----z-4+A=A&SA[ S+I ]Stack Relative (SR)
051$33rrAND ($rr,S),Y2n-----z-7+A=A&SA[ R(S+I)+Y ]SR Indirect Indexed, Y

ビット演算(論理和)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
009$09vv hhORA #$hhvv3n-----z-2+A=A|IImmediate
vvORA #$vv2
005$05nnORA $nn2n-----z-3+A=A|MDirect Page (DP)
021$15nnORA $nn,X2n-----z-4+A=A|MDP Indexed, X
013$0Dqq ppORA $ppqq3n-----z-4+A=A|MAbsolute
029$1Dqq ppORA $ppqq,X3n-----z-4+A=A|MAbsolute Indexed, X
025$19qq ppORA $ppqq,Y3n-----z-4+A=A|MAbsolute Indexed, Y
015$0Fqq pp uuORA $uu:ppqq4n-----z-5+A=A|MAbsolute Long
031$1Fqq pp uuORA $uu:ppqq,X4n-----z-5+A=A|MAbsolute Long Indexed, X
018$12nnORA ($nn)2n-----z-5+A=A|MDP Indirect
017$11nnORA ($nn),Y2n-----z-5+A=A|MDP Indirect Indexed, Y
001$01nnORA ($nn,X)2n-----z-6+A=A|MDP Indexed Indirect, X
007$07nnORA [$nn]2n-----z-6+A=A|MDP Indirect Long
023$17nnORA [$nn],Y2n-----z-6+A=A|MDP Indirect Long Indexed, Y
003$03rrORA $rr,S2n-----z-4+A=A|SA[ S+I ]Stack Relative (SR)
019$13rrORA ($rr,S),Y2n-----z-7+A=A|SA[ R(S+I)+Y ]SR Indirect Indexed, Y

ビット演算(排他的論理和)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
073$49vv hhEOR #$hhvv3n-----z-2+A=A@IImmediate
vvEOR #$vv2
069$45nnEOR $nn2n-----z-3+A=A@MDirect Page (DP)
085$55nnEOR $nn,X2n-----z-4+A=A@MDP Indexed, X
077$4Dqq ppEOR $ppqq3n-----z-4+A=A@MAbsolute
093$5Dqq ppEOR $ppqq,X3n-----z-4+A=A@MAbsolute Indexed, X
089$59qq ppEOR $ppqq,Y3n-----z-4+A=A@MAbsolute Indexed, Y
079$4Fqq pp uuEOR $uu:ppqq4n-----z-5+A=A@MAbsolute Long
095$5Fqq pp uuEOR $uu:ppqq,X4n-----z-5+A=A@MAbsolute Long Indexed, X
082$52nnEOR ($nn)2n-----z-5+A=A@MDP Indirect
081$51nnEOR ($nn),Y2n-----z-5+A=A@MDP Indirect Indexed, Y
065$41nnEOR ($nn,X)2n-----z-6+A=A@MDP Indexed Indirect, X
071$47nnEOR [$nn]2n-----z-6+A=A@MDP Indirect Long
087$57nnEOR [$nn],Y2n-----z-6+A=A@MDP Indirect Long Indexed, Y
067$43rrEOR $rr,S2n-----z-4+A=A@SA[ S+I ]Stack Relative (SR)
083$53rrEOR ($rr,S),Y2n-----z-7+A=A@SA[ R(S+I)+Y ]SR Indirect Indexed, Y

算術演算(キャリー付加算)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
105$69vv hhADC #$hhvv3nv----zc2+A=A+I+cImmediate
vvADC #$vv2
101$65nnADC $nn2nv----zc3+A=A+M+cDirect Page (DP)
117$75nnADC $nn,X2nv----zc4+A=A+M+cDP Indexed, X
109$6Dqq ppADC $ppqq3nv----zc4+A=A+M+cAbsolute
125$7Dqq ppADC $ppqq,X3nv----zc4+A=A+M+cAbsolute Indexed, X
121$79qq ppADC $ppqq,Y3nv----zc4+A=A+M+cAbsolute Indexed, Y
111$6Fqq pp uuADC $uu:ppqq4nv----zc5+A=A+M+cAbsolute Long
127$7Fqq pp uuADC $uu:ppqq,X4nv----zc5+A=A+M+cAbsolute Long Indexed, X
114$72nnADC ($nn)2nv----zc5+A=A+M+cDP Indirect
113$71nnADC ($nn),Y2nv----zc5+A=A+M+cDP Indirect Indexed, Y
097$61nnADC ($nn,X)2nv----zc6+A=A+M+cDP Indexed Indirect, X
103$67nnADC [$nn]2nv----zc6+A=A+M+cDP Indirect Long
119$77nnADC [$nn],Y2nv----zc6+A=A+M+cDP Indirect Long Indexed, Y
099$63rrADC $rr,S2nv----zc4+A=A+SA[ S+I ]+cStack Relative (SR)
115$73rrADC ($rr,S),Y2nv----zc7+A=A+SA[ R(S+I)+Y ]+cSR Indirect Indexed, Y
[NOTE] 実行時にc=1なら演算結果を更に+1, 演算後に最上位bitへの繰上げ発生(nが0→1と変化)すればv=1、しなければv=0

算術演算(キャリー付減算)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
233$E9vv hhSBC #$hhvv3nv----zc2+A=A‐I-!cImmediate
vvSBC #$vv2
229$E5nnSBC $nn2nv----zc3+A=A‐M-!cDirect Page (DP)
245$F5nnSBC $nn,X2nv----zc4+A=A‐M-!cDP Indexed, X
237$EDqq ppSBC $ppqq3nv----zc4+A=A‐M-!cAbsolute
253$FDqq ppSBC $ppqq,X3nv----zc4+A=A‐M-!cAbsolute Indexed, X
249$F9qq ppSBC $ppqq,Y3nv----zc4+A=A‐M-!cAbsolute Indexed, Y
239$EFqq pp uuSBC $uu:ppqq4nv----zc5+A=A‐M-!cAbsolute Long
255$FFqq pp uuSBC $uu:ppqq,X4nv----zc5+A=A‐M-!cAbsolute Long Indexed, X
242$F2nnSBC ($nn)2nv----zc5+A=A‐M[ R( D+I) ]-!cDP Indirect
241$F1nnSBC ($nn),Y2nv----zc5+A=A‐M-!cDP Indirect Indexed, Y
225$E1nnSBC ($nn,X)2nv----zc6+A=A‐M[ R( D+I+X) ]-!cDP Indexed Indirect, X
231$E7nnSBC [$nn]2nv----zc6+A=A‐M-!cDP Indirect Long
247$F7nnSBC [$nn],Y2nv----zc6+A=A‐M-!cDP Indirect Long Indexed, Y
227$E3rrSBC $rr,S2nv----zc4+A=A‐SA[ S+I ]-!cStack Relative (SR)
243$F3rrSBC ($rr,S),Y2nv----zc7+A=A‐SA[ R(S+I)+Y ]-!cSR Indirect Indexed, Y
[NOTE] 実行時にc=0なら演算結果を更に-1, 演算後に最上位bitからの繰下げ発生(nが1→0と変化)すればv=1、しなければv=0

プログラムカウンタ

条件分岐(相対ジャンプ)

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
016$10rrBPL {near}2--------3n=0なら分岐(直前結果が0以上)Program Counter Relative
048$30rrBMI {near}2--------3n=1なら分岐(直前結果が0未満)Program Counter Relative
080$50rrBVC {near}2--------3v=0なら分岐(直前結果が正常)Program Counter Relative
112$70rrBVS {near}2--------3v=1なら分岐(直前結果が範囲超過)Program Counter Relative
144$90rrBCC {near}2--------3c=0なら分岐(キャリーなし)Program Counter Relative
176$B0rrBCS {near}2--------3c=1なら分岐(キャリー発生)Program Counter Relative
208$D0rrBNE {near}2--------3z=0なら分岐(直前結果が0以外)Program Counter Relative
240$F0rrBEQ {near}2--------3z=1なら分岐(直前結果が0)Program Counter Relative
128$80rrBRA {near}2--------3常に分岐Program Counter Relative
130$82rr hhBRL {far}3--------4常に分岐(バンク内全領域)PC Relative Long
[NOTE] 分岐しない場合Cycle-1, 飛べる範囲は次コード位置から{-128($80)~+127($7F)}なので$FEで無限ループ、$FFだと暴走する

絶対ジャンプ

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
076$4Cqq ppJMP $ppqq3--------3バンク内ジャンプAbsolute (PC)
092$5Cqq pp uuJML $uu:ppqq4--------4絶対指定ジャンプAbsolute Long (PC)
108$6Cnn hhJMP ($hhnn)3--------5参照バンク内ジャンプ ($00/hhnn の2bytes)Absolute Indirect (PC)
124$7Cqq ppJMP ($ppqq,X)3--------6参照バンク内ジャンプ (PBR/ppqq +X の2bytes)Absolute Indexed Indirect (PC)
220$DCnn hhJML [$hhnn]3--------6参照絶対指定ジャンプ ($00/hhnn の3bytes)Absolute Indirect Long (PC)

サブルーチン/割込

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
032$20qq ppJSR $ppqq3--------6バンク内サブルーチンAbsolute (PC, Stack)
034$22qq pp uuJSL $uu:ppqq4--------8絶対指定サブルーチンAbsolute Long (PC, Stack)
252$FCqq ppJSR ($ppqq,X)3--------8参照型バンク内サブルーチン (PBR/ppqq +X の2bytes)Absolute Indexed Indirect (PC, Stack)
000$00xxBRK #$xx2----di--8ソフトウェア割込(BRK)Stack / Interrupt (BRK)
002$02xxCOP #$xx2----di--8ソフトウェア割込(COP)Stack / Interrupt (COP)
096$60--RTS 1--------6JSRサブルーチンから復帰Stack (RTS)
107$6B--RTL 1--------6JSLサブルーチンから復帰Stack (RTL)
064$40--RTI 1nvmxdizc7割込処理(NMI,IRQ,BRK,COP)から復帰Stack (RTI)
[NOTE] PBR(LI)/PCH/PCL/PSR(I) の順にスタックに積む(取り出すときは逆順) ※PBRはロング指定(L)と割込(I)、PSRは割込のみ

特殊用途

ブロック転送

#OCOperandMnemonicSizePSRCycleDescriptionAddressing Mode
084$54tt ssMVN #$ss,#$tt3--------7*下から上へ転送(XY++)XYC / Block Move Negative
068$44tt ssMVP #$ss,#$tt3--------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を用いる(転送量次第で転送前に転送元領域が破壊されるため)

その他

#OCOperandMnemonicSizePSRCycleDescriptionAddressing 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$42xxWDM (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/WPort AddressNameSizeDescription
W$4202WRMPYA1被乗数
W$4203WRMPYB1乗数(ここにストアすると計算開始)
W$4204
$4205
WRDIVL
WRDIVH
2被除数
W$4206WRDIVB1除数(ここにストアすると計算開始)
R$4214
$4215
RDDIVL
RDDIVH
2除算結果の商(ゼロ除算を行うと#$FFFFが返る)
R$4216
$4217
RDMPYL
RDMPYH
2乗算結果または除算結果の剰余(ゼロ除算を行うと被除数が返る)
W$211BM7A (Rotation / Scaling Parameter A)1被乗数(下位・上位と2回ストアする)
W$211CM7B (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

レジスタ間

Transferto Sto Dto Ato Xto YSizeCycleDescription
from S----3BBA--12常に16bit転送
from D----7B----常に16bit転送
from A1B5B--AAA8常に16bit転送
from X9A--8A--9BTXA: m=1時Bは不変
from Y----98BB--TYA: m=1時Bは不変
exchange CEB13AとBを入替

インデックス

Addressing ModeMnemonicCPYLDYSTYCPXLDXSTXSizeCycleDescription
Immediate{Mnem} #$hhvv / #$vvC0A0--E0A2--2+2+16bit(x=0) / 8bit(x=1)
Direct Page (DP){Mnem} $nnC4A484E4A68623+*1
DP Indexed, X/Y{Mnem} $nn,X / $nn,Y--B494--B69624+*1*2
Absolute{Mnem} $ppqqCCAC8CECAE8E34+
Absolute Indexed, X/Y{Mnem} $ppqq,X / $ppqq,Y--BC----BE--34+*2
ImpliedINY / INXC8E812Increment
DEY / DEX88CA12Decrement

アキュムレータ

Addressing ModeMnemonicBITCMPLDAANDORAEORADCSBCSTZSTASizeCycleDescription
Immediate{Mnem} #$hhvv / #$vv89C9A929094969E9----2+2+16bit(m=0) / 8bit(m=1)
Direct Page (DP){Mnem} $nn24C5A525054565E5648523+*1
DP Indexed, X{Mnem} $nn,X34D5B535155575F5749524+*1*2
Absolute{Mnem} $ppqq2CCDAD2D0D4D6DED9C8D34+
Absolute Indexed, X{Mnem} $ppqq,X3CDDBD3D1D5D7DFD9E9D34+*2
Absolute Indexed, Y{Mnem} $ppqq,Y--D9B939195979F9--9934+*2
Absolute Long{Mnem} $uu:ppqq--CFAF2F0F4F6FEF--8F45+
Absolute Long Indexed, X{Mnem} $uu:ppqq,X--DFBF3F1F5F7FFF--9F45+
DP Indirect{Mnem} ($nn)--D2B232125272F2--9225+*1
DP Indirect Indexed, Y{Mnem} ($nn),Y--D1B131115171F1--9125+*1*2
DP Indexed Indirect, X{Mnem} ($nn,X)--C1A121014161E1--8126+*1
DP Indirect Long{Mnem} [$nn]--C7A727074767E7--8726+*1
DP Indirect Long Indexed, Y{Mnem} [$nn],Y--D7B737175777F7--9726+*1
Stack Relative (SR){Mnem} $rr,S--C3A323034363E3--8324+
SR Indirect Indexed, Y{Mnem} ($rr,S),Y--D3B333135373F3--9327+

メモリ

Addressing ModeMnemonicTSBTRBASLROLLSRRORINCDECSizeCycleDescription
Accumulator{Mnem} A----0A2A4A6A1A3A12
Direct Page (DP){Mnem} $nn041406264666E6C625++*1
DP Indexed, X{Mnem} $nn,X----16365676F6D626++*1*2
Absolute{Mnem} $ppqq0C1C0E2E4E6EEECE36++
Absolute Indexed, X{Mnem} $ppqq,X----1E3E5E7EFEDE37++*2

スタック

StackMnemonicOpcodeSizeCycleDescription
PushPullPushPull
AccumulatorPHA / PLA486813+4+16bit(m=0) / 8bit(m=1)
Index (Y)PHY / PLY5A7A13+4+16bit(x=0) / 8bit(x=1)
Index (X)PHX / PLXDAFA13+4+16bit(x=0) / 8bit(x=1)
Program Status (P)PHP / PLP08281348bit
Direct Pointer (D)PHD / PLD0B2B14516bit
Data Bank (DB)PHB / PLB8BAB1348bit
Program Bank (PB)PHK4B--13-8bit
Direct Page IndirectPEI ($nn)D4--26-S = 2-- (M[D +I])
Immediate / AbsolutePEA #$hhvvF4--35-S = 2-- (I)
PC Relative LongPER {far}62--36-S = 2-- (PC +I)
PC AbsoluteJSR $ppqq2036S = 2-- (PCH, PCL)
PC Absolute Indexed IndirectJSR ($ppqq,X)FC38S = 2-- (PCH, PCL)
PC Absolute LongJSL $uu:ppqq2248S = 3-- (PB, PCH, PCL)
Interrupt (BRK)BRK #$xx0028S = 4-- (PB, PCH, PCL, P)
Interrupt (COP)COP #$xx0228S = 4-- (PB, PCH, PCL, P)
Return (Interrupt)RTI4017S = 4++ (P, PCL, PCH, PB)
Return (Current Bank Address)RTS6016S = 2++ (PCL, PCH)
Return (Long Address)RTL6B16S = 3++ (PCL, PCH, PB)
[NOTE] Stack表のOpcode欄が結合されているコードは実行すると実行位置(PC)も変更される