寄存器工作原理与组织寻址
扫描二维码
随时随地手机看文章
在计算机及其他计算系统中,寄存器是一种非常重要的、必不可少的数字电路苛件,它通常由触发器(D触发器)组成,主要作用是用来暂时存放数码或指令。一个触发器司以存放一位二进制代码,若要存放N位二进制数码,则需用N个触发器。 [6] 寄存器应具有接收数据、存放数据和输出数据的功能,它由触发器和门电路组成。只有得到“存入脉冲”(又称“存入指令”、“写入指令”)时,寄存器才能接收数据;在得到“读出”指令时,寄存器才将数据输出。 [6] 寄存器存放数码的方式有并行和串行两种。并行方式是数码从各对应位输入端同时输入到寄存器中;串行方式是数码从一个输入端逐位输入到寄存器中。 寄存器读出数码的方式也有并行和串行两种。在并行方式中,被读出的数码同时出现在各位的输出端上;在串行方式中,被读出的数码在一个输出端逐位出现。
(1)代码要存得进;(2)代码要记得住;(3)代码要取得出。 [7] 寄存器是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位2进制代码,存放n位2进制代码的寄存器,需用n个触发器来构成。对寄存器中的触发器只要求它具有置1、置0的功能即可,因而无论用何种类型的触发器都可组成寄存器。 按照功能的不同,寄存器可分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,需要时也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出或串行输入、并行输出,十分灵活,用途也很广。
ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决于微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。 ARM9处理器共有37个32位长的寄存器,这些寄存器包括:(1) RO~R12:均为32位通用寄存器,用于数据操作。但是注意:绝大多数16位Thumb指令只能访问R0~R7,而32位Thumb -2指令可以访问所有寄存器。 (2)堆栈指针:堆栈指针的最低两位永远是O,这意味着堆栈总是4字节对齐的。 (3)链接寄存器:当呼叫一个子程序时,由R14存储返回地址。 (4)程序计数器:指向当前的程序地址,如果修改它的值,就能改变程序的执行流。 (5)6个状态寄存器(1个CPSR、5个SPSR),用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。 Cortex-A8处理器有40个32位长的寄存器,多了监控模式下的寄存器,如RO~R12、R15、CPSR通用,R13_ mon、R14_mon、SPSR_mon三个专用寄存器。
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。 [10] 寄存器寻址是指操作数存放在CPU内部的寄存器中,指令中给出操作数所在的寄存器名。寄存器操作数可以是8位寄存器AH、AL、BH、BL、CH、CL、DH、DL,也可以是16位寄存器AX、BX、CX、DX、SP、BP、SI、DI等。因为寄存器寻址不需要通过总线操作访问存储器,所以指令执行速度比较快。 [11] 寄存器寻址( Register Addressing)是以通用寄存器的内容作为操作数的寻址方式,在该寻址方式下,操作数存放在寄存器中。寄存器寻址方式的寻址对象为:A,B,DPTR,RO~R7。其中,B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以按寄存器寻址又可以直接寻址,直接寻址时写成ACC。