1。 通用寄存器。
共有8个通用寄存器,r0 ~ r7
R5:环境寄存器。
R6: 又名sp,即栈寄存器 —— kernel/usr各有一个
R7: 又名PC,即指令指针寄存器
2 PS Register
即processor status register,该寄存器的使用非常频繁,其结构如下所示:
(1) codition code部分——用于记录指令执行后结果状态
共有4个标志:
N:negative
Z:zero
V:overflow
C:carriage
(2) T:Trap(陷入位)
置位将发生陷入,中断矢量为014。
(3) Priority:CPU的Priority
取值范围: 0~7,从低----高。
设置为7时,外部设备无法interrupt CPU的执行。
(4) Mode位
Current Mode:当前的模式(kernel or User)
Previous Mode:“前”模式(kernel or User)
需要注意的是,PS的Previous Mode部分是可以自行设置的,所以,其Previous Mode并不一定是其字面上的意思
(并不一定是“上”一次的Mode)。这样设计可以提供一种同时访问Kernel/User地址的方法,有两个指令用于此用途:
i. mfpi:将Previous Mode的地址里的内容,压入Current Mode的栈;
ii. mtpi:将Current Mode的栈内内容,弹出到Previous Mode的地址空间内。
这两个指令使用相当频繁,我会在后面结合代码进行讲解。
PS寄存器是最常用的寄存器之一,源码中有大量对PS的操作。下面就介绍一下对PS的常见操作。
首先介绍三个位运算指令,他们经常用于设置和Check PS状态:
(1) BIT —— logical AND,但不改变source和destination operand。会设置PS的Condition Code。
用于check Destination operand的bit设置情况;
(2) BIC —— bit clear。根据source operand的bit set,clear destination operand的相应bit;
(3) BIS —— bit set。 “或”操作,修改destination operand。
对PS常见操作举例:
(1).Mov
679 mov $30340,PS 0011 000 011 100 000
700 mov $30340,PS 3 0 3 4 0
该条语句对PS寄存器进行了如下设置:
(1) Current Mode:Kernal
(2) Previous Mode:User
(3) Priority:7
(2).Bis
0726 bis $340,PS
0735 ~
0741 ~
将Priority设置为7。
(3).Bic
0748 bic $340,PS
将Priority设置为0。
博客地址: http://blog.csdn.net/cszhao1980