我正在开发MSP430微控制器,并正在研究其体系结构。在用户指南的功能选项卡下,有这样一句话:"完全寄存器访问,包括程序计数器(PC)、状态寄存器(SR)和堆栈指针(SP)"。我的印象是,无论体系结构如何,CPU总是可以访问所有寄存器。
我对这个说法的理解可能是错误的。有人能解释一下它到底是什么意思吗?
根据维基百科页面:
处理器包含16个16位寄存器,其中4个专用于特殊用途:R0是程序计数器,R1是堆栈指针,R2是状态寄存器,R3是一个称为常量生成器的特殊寄存器,提供对6个常用常数值的访问,而不需要额外的操作数。R3总是读取为0,并且对它的写入被忽略。R4至R15可用于一般用途。
换句话说,在这种情况下,"完全访问"不仅意味着使用jmp
类型的指令能够跳转到新位置,还意味着允许像xor r0, #1234
这样的东西直接(可能致命)修改程序计数器。
其他特殊寄存器也是如此,除了R3
,它是常数生成器,也是四个寄存器中唯一一个在您的报价中没有提到的寄存器。虽然所有指令都可以在该寄存器上操作,但它忽略写入并在读取时生成各种固定值(-1..2
,使用R2
也可以获得4
和8
),具体取决于所使用的寻址模式。
这可能看起来有点奇怪,但这并不是我见过的最奇怪的。对于,您必须研究RCA1802A CPU,它与MPS430一样,具有用于特定功能的"通用"寄存器,但您实际上可以在运行时选择,它应该是程序计数器或堆栈指针。实际上,没有call
或ret
指令,而是使用标准的调用和返回技术(SCRT)来模拟它