6502——寄存器
6502有六个可供使用的寄存器(A,X,Y,PC,S,P)。其中除程序计数器PC是16位外,其余寄存器均为8位。
1、累加寄存器A——8位
作用:同ALU一起完成各种算数逻辑运算符。它通常既提供ALU一个原始操作数,又存放操作结果,所以称为累加器。
2、变址寄存器X和Y——8位
作用:主要在变址寻址的方式中用来存放地址偏移量,也常被当做计数器使用。此外还可以作为一般通用寄存器,用语数据的暂存。
3、程序计算器PC——16位
作用:存放下一条要执行指令的地址码。
当顺序执行的时候,没去处一个指令字节后PC自动加一,为取下一个指令字节做好准备。
当不是顺序执行的时候,PC的内容将是要转移的目标地址码。
4、堆栈指针S——8位
。。。。。。
5、标志寄存器P——8位
实际使用的时候只使用了其中的7位,第五位未使用。
1)C——进位标志
做加法运算的时候,若最高位有进位,则C位置1,否则置0;
做减法运算的时候,若最高位有差位时。则C位置0,否则置1。
逻辑运算的时候,C位置0.
2)Z——零标志
本次操作后,若结果为0,则Z位置1,否则Z为1。
3)I——中断禁止(屏蔽)标志
此标志为0,则表示准许中断;
此标志为1,则表示禁止中断。(非屏蔽中断不受此约束)
4)D——十进制运算标志
0——令ALU作二进制运算
1——令ALU作十进制运算
在6502中有专门的指令对D进行操作。此操作只对后续的加减指令有作用。
5)B——BANK指令标志
执行了BANK指令之后?B=1 并且程序中止。
6)V——溢出标志
溢出 置 1,否则 置 0。
7)N——符号标志
无溢出的时候(V=0):运算结果为负数时N=1;为正数时N=0
有溢出的时候(V=1):运算结果为负数时N=0;为正数时N=1
总结:
对标志位应该掌握以下几点:
- 每个指令对标志位的影响不相同
- 寄存器P中各标志位的状态一般是指当前指令执行后的状态。所以标志位常常在执行条件转移作为条件判断的依据。
- 6502MPU还可以用专门的指令来修改某些标志位,进行复位或者置位。例如CLC,设C=0。