"); //-->
SEP是一个新的65816指令。当被执行时,它会设置被单字节直接值指定的位。
这是设置X和M状态寄存器位的唯一方法。
举例来说,要设定状态寄存器位5:
SEP #%00100000 ;设置位5要复位一个位,参考REP。
会受影响的标志:nvmxdizc
所有操作数中被设置的位对应的标志都会被设置,其他的标志则不受影响。直接寻址 | SEP #const | E2 | 2 | 3 |
绝对寻址 | STA addr |
8D
|
3
|
4
|
1 |
绝对长程寻址 | STA long |
8F
|
4
|
5
|
1 |
直接页面寻址 | STA dp |
85
|
2
|
3
|
1,2 |
直接页面间接寻址 | STA (dp) |
92
|
2
|
5
|
1,2 |
直接页面间接长程寻址 | STA [dp] |
87
|
2
|
6
|
1,2 |
绝对变址X寻址 | STA addr,X |
9D
|
3
|
4
|
1 |
绝对变址X长程寻址 | STA long,X |
9F
|
4
|
5
|
1 |
绝对变址Y寻址 | STA addr,Y |
99
|
3 |
4
|
1 |
直接页面变址X寻址 | STA dp,X |
95
|
2
|
4
|
1,2 |
直接页面变址X,间接寻址 | STA (dp,X) |
81
|
2
|
6
|
1,2 |
直接页面间接,变址Y寻址 | STA (dp),Y |
91
|
2
|
5
|
1,2 |
直接页面间接长程,变址Y寻址 | STA [dp],Y |
97
|
2
|
6
|
1,2 |
堆栈相对寻址 | STA sr,S |
83
|
2
|
4
|
1 |
堆栈相对间接,变址Y寻址 | STA (sr,S),Y |
93
|
2
|
7
|
1 |
* | 如果m=0(16位内存/累加器),则增加一个字节 |
1 | 如果m=0(16位内存/累加器),则增加一个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个周期 |
STP关闭处理器,直到硬件复位。它被用于一些通过让处理器休眠来减少能耗的系统。65816处理器上有一个复位B引脚,允许使用这个指令。
隐式寻址 | STP | DB | 1 | 3 |
又一个和在6502模式下一样工作的指令。唯一例外是当设置为16位变址寄存器(x=0)时,被储存的数据将是16位宽的。X的低8位会被储存到有效地址,而高端字节储存到有效地址的下一个存储单位。
STX不会影响任何标志。
绝对寻址 | STX addr | 8E | 3 | 4 | 1 |
直接页面寻址 | STX dp | 86 | 2 | 3 | 1,2 |
直接页面变址Y寻址 | STX dp,Y | 96 | 2 | 4 | 1,2 |
1 | 如果x=0(16位变址寄存器),则增加一个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个以上的周期 |
又一个和在6502模式下一样工作的指令。唯一例外是当设置为16位变址寄存器(x=0)时,被储存的数据将是16位宽的。X的低8位会被储存到有效地址,而高端字节储存到有效地址的下一个存储单位。
STY不会影响任何标志。
绝对寻址 | STY addr | 8C | 3 | 4 | 1 |
直接页面寻址 | STY dp | 84 | 2 | 3 | 1,2 |
直接页面变址X寻址 | STY dp,X | 94 | 2 | 4 | 1,2 |
1 | 如果x=0(16位变址寄存器),则增加一个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个以上的周期 |
65816的一个新的指令。STZ储存一个零字节到目的地址。在8位累加器/ 内存模式(m=1)下,只有一个字节被储存到有效地址;在16位内存/累加器模式(m=0)下,零会被储存到有效地址和有效地址的下一个存储单元。
该指令不会影响任何标志。
这个指令可以看作旧6502中下列代码的一个替代:
lda #0 sta $xxxx绝对寻址 | STZ addr | 9C | 3 | 4 | 1 |
直接页面寻址 | STZ dp | 64 | 2 | 3 | 1,2 |
绝对变址X寻址 | STZ addr,X | 9E | 3 | 5 | 1 |
直接页面变址X寻址 | STZ dp,X | 74 | 2 | 4 | 1,2 |
1 | 如果x=0(16位变址寄存器),则增加一个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个以上的周期 |
TAX,TXA,TAY,TYA,TSX,TXS传送指令在处理器寄存器之间传送数据。
TAX:传送累加器的值到X变址寄存器。 TAY:传送累加器的值到Y变址寄存器。 TYA:传送Y变址寄存器的值到累加器。 TXA:传送X变址寄存器的值到累加器。 TSX:传送堆栈指针到X变址寄存器。 TXS:传送X变址寄存器的值到堆栈指针。两个新的寄存器传送指令是:
TXY:直接传送X寄存器的值到Y寄存器。 TYX:直接传送Y寄存器的值到X寄存器。因为变址寄存器和累加器能独立地被设置成8位或16位,移动的宽度由目标寄存器来决定。下列各项展示了所有可能的组合:
8位累加器到8位变址寄存器。(m=1,x=1),8个位被转移。 8位累加器到到16位变址寄存器。(m=1,x=0),16个位被转移。隐藏的累加器高端字节变成X或Y的高端字节。 16位变址寄存器到8位累加器。(m=1,x=0),8个位被转移。隐藏的累加器高端字节不受影响,并保持原来的值。 8位变址寄存器到16位累加器。(m=0,x=1),2个字节被转移,高端字节为零。 16位累加器到8位变址寄存器。(m=0,x=1),只有累加器的低端字节被传送到变址寄存器。 16位累加器到16位变址寄存器。(m=0,x=0),16个位被转移。 16位堆栈指针到8位X寄存器。只有地址的低端字节被转移。 8位X寄存器到16位堆栈指针,堆栈指针的高端字节设为零。该指令会影响的标志 n-----z-
n:要传送的值的最高有效位被设置时设置。 z:如果要传送值是零则设置。隐式寻址 | TAX | AA | 1 | 2 |
隐式寻址 | TAY | A8 | 1 | 2 |
隐式寻址 | TXA | 8A | 1 | 2 |
隐式寻址 | TYA | 98 | 1 | 2 |
隐式寻址 | TSX | BA | 1 | 2 |
隐式寻址 | TXS | 9A | 1 | 2 |
隐式寻址 | TXY | 9B | 1 | 2 |
隐式寻址 | TYX | BB | 1 | 2 |
有两个新的65816个指令用于在累加器和直接页面寄存器之间交换数据:
TCD:将累加器的值传送到直接页面寄存器。 TDC:将直接页面寄存器的值传送到累加器。TCD将来自累加器的一个16位的值传送到直接(零页面)指针。无论累加器是在16位还是8位的设定下,都会传送全部的16个位。
在TCD中的C用于指明累加器是作为C来引用的(当它是16位宽时,低端字节是A而高端字节是B)。
TDC将来自直接页面寄存器的值传送到累加器的全部16个位,而不管累加器的位m的状态。
一些汇编程序也允许使用TAD或TDA。
该指令会影响的标志 n-----z-
n:要传送的值的最高有效位被设置时设置。 z:如果要传送值是零则设置。隐式寻址 |
TCD 别名:TAD |
5B | 1 | 2 |
隐式寻址 |
TDC 别名:TDA |
7B | 1 | 2 |
TCS传送完整的16位到堆栈指针,而不管状态位m的状态如何。
和在TCD和TDC中一样,TCS中的C表示累加器是完全16位的。
TAS作为另一种助记符,也被一些汇编程序使用来传送堆积指针。
在6502模拟模式下,只有八个位的累加器值被传送,因为在6502下堆栈总是位于页面1。
TCS和TXS是仅有的两个能改变堆栈指针寄存器的指令。
TCS不会影响任何标志。
隐式寻址 |
TCS 别名:TAS |
1B | 1 | 2 |
TSC传送完整的16位堆栈指针到16位的累加器,不管状态位m的值如何。
和TDC和TCD一样,TSC中的C表示累加器完全是16位的。
TSA作为另一种助记符,也被一些汇编程序使用来传送值到堆积指针。
在6502模拟模式下,1会被传送到隐藏的B(高8位)累加器,因为在6502下堆栈总是位于页面1。
该指令会影响的标志 n-----z-
n:要传送的值的最高有效位被设置时设置。 z:如果要传送值是零则设置。隐式寻址 |
TSC 别名:TSA |
3B | 1 | 2 |
TRB执行一个累加器和有效的地址的逻辑与操作--然后数据会被写回到指定的地址上。
该指令会清除内存中和累加器内相对应的位(累加器中为1的位被清除),其他的位则无变化。
从另外一个角度来说--TRB翻转累加器的位值然后和内存操作数进行逻辑与操作,再将结果保存回有效地址。
在16位累加器模式(m=0)下,数据按16位进行操作。操作数的低端字节位于有效地址,高端字节位于有效地址的下一个存储单元。
该指令会影响的标志 ------z-
z:如果要和累加器与的值是零则设置。绝对寻址 | TRB addr | 1C | 3 | 6 | 1 |
直接页面寻址 | TRB dp | 14 | 2 | 5 | 1,2 |
1 | 如果m=0(16位内存/累加器),则增加两个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个周期 |
TSB将累加器和位于有效地址的数据进行逻辑与操作。
该指令能高效地设置内存中和累加器内设置位对应的位。
在16位累加器模式(m=0)下,数据按16位进行操作。操作数的低端字节位于有效地址,高端字节位于有效地址的下一个存储单元。
在累加器和内存数据值进行逻辑与操作之后,状态寄存器的零标志被设置。(和BIT指令相同)
该指令会影响的标志 ------z-
z:如果要和累加器与的值是零则设置。绝对寻址 | TSB addr | 0C | 3 | 6 | 1 |
直接页面寻址 | TSB dp | 04 | 2 | 5 | 1,2 |
1 | 如果m=0(16位内存/累加器),则增加两个周期 |
2 | 如果直接页面寄存器的低端字节不为零,则增加一个周期 |
WAI将操作挂起,直到外部硬件中断发生。处理器的能耗被降低。如果中断禁用标志(i=1)被设置并且IRQ在执行WAI之前是未决定的,那么等待会结束并继续执行下一条指令。
WAI不会影响任何标志。
隐式寻址 |
WAI |
CB | 1 | 3 |
WDM是被设计成运行于未来版本处理器上的多字节指令的第一个字节。
现在的WDM则像NOP那样,被当成空操作。
这个指令不应该在现在版本的处理器上使用。
WDM:William D. Mensch, JR(65816的设计者)
WDM |
42 | 2 |
XBA交换累加器的低8位(A)和高8位(B)。该操作不理会状态位M的值。
这个指令在6502模拟模式下也能工作。
XBA能用来在高端累加器上保存低端累加器的一个临时副本。它用来反转16位模式下值的高位和低位也很不错。
在模拟模式下,XBA是能唯一能存取累加器高端8位的指令。
一些汇编程序也用SWA(swap)。
该指令会影响的标志 n-----z-
n:新的低8位的最高有效位(原来的位15)被设置时设置。 z:如果新的累加器低8位值为零则设置。隐式寻址 |
XBA 别名:SWA |
EB | 1 | 3 |
XCE交换E模拟位和C进位标志的值。这是存取E模拟位的唯一方法。
要设定模拟模式:
sec ;设置进位 xce ;交换进位和模拟位该指令会影响的标志 e
--mx/b---c
隐式寻址 |
XCE |
FB | 1 | 2 |
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。