(莱昂氏unix源代码分析导读-3)PDP11/40系统简介(中)

1。 通用寄存器。

共有8个通用寄存器,r0 ~ r7

     R5:环境寄存器。

     R6: 又名sp,即栈寄存器 —— kernel/usr各有一个

     R7: 又名PC,即指令指针寄存器

 

2  PS Register

即processor status register,该寄存器的使用非常频繁,其结构如下所示:

 

(莱昂氏unix源代码分析导读-3)PDP11/40系统简介(中)_第1张图片

(1) codition code部分——用于记录指令执行后结果状态

            共有4个标志:

            Nnegative

            Zzero

            Voverflow

            Ccarriage

 

(2)  TTrap(陷入位)

           置位将发生陷入,中断矢量为014

 

(3) PriorityCPUPriority

           取值范围: 0~7,从低----高。

           设置为7时,外部设备无法interrupt CPU的执行。

 

  (4) Mode位

             Current Mode:当前的模式(kernel or User

             Previous Mode:“前”模式(kernel or User

             需要注意的是,PSPrevious 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,但不改变sourcedestination operand。会设置PSCondition Code。

                                   用于check Destination operandbit设置情况;

(2)         BIC —— bit clear。根据source operandbit setclear 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 ModeKernal

(2)         Previous ModeUser

(3)         Priority7

 

(2)Bis

0726  bis  $340PS

0735  ~

0741  ~  

        Priority设置为7

 

(3)Bic

 0748  bic $340,PS

        Priority设置为0

 

博客地址: http://blog.csdn.net/cszhao1980

 

 

你可能感兴趣的:(c,unix,user,代码分析)