HP-Saturn处理器汇编入门 01-寄存器组

regset

内容来自Gilbert Fernandes和Eric Rechlin的著作《Introduction to Saturn Assembly Language》,经过本人的加工,可能与实情有所出入,欢迎指出错误。

Saturn处理器内部有多个寄存器组,可以分为:

  1. 64位/16Nibs的工作寄存器(Working Registers):A,B,C,D
  2. 64位/16Nibs的暂存寄存器(Save Registers):R0,R1,R2,R3,R4
  3. 4位/1Nib的域指针(P Register)
  4. 20位/5Nibs的指针寄存器(Pointer Registers):D0,D1
    20位/5Nibs的程序计数器(Program Counter):PC
  5. 8层*5Nibs,LIFO的“返回”栈(Return STacK):RSTK
  6. 12位/3Nibs的输出寄存器:OUT
    16位/4Nibs的输入寄存器:IN
  7. 1位的进位符号(FLAGS - Carry Flag):Carry
    16位/4Nibs的状态寄存器(FLAGS - Status Bits):ST
    4位/1Nib的硬件状态寄存器(FLAGS - Hardware Status Bits):HST

接下来将分别介绍各个寄存器组的作用及用法

1.工作寄存器:A,B,C,D

工作寄存器相当于其他处理器中的GPR,是存储各种操作的参数的地方,
前文提到过工作寄存器一次能保存一个完整的由一个符号位,48个尾数位(12个有效BCD尾数),12个指数位(以二进制补码表示的指数,范围是±499)的64位/16Nibs浮点数。
而每次该处理器可以操作其中4位,因此HP给出了“域”的概念:
fieldset

(注意本处理器是小字序(LittleEndian),所以从右到左是0~F)

这是一个工作寄存器的图示,有图可以看出这个寄存器被分为不同的域,用几个字母表示,在输入指令时加上域修饰符(后文讲指令集时会提到,用"f"表示),可以指定该指令作用的范围

这些域的含义为:

  1. W(Word / Wide):整个寄存器
  2. A(Address):5位,可以用于寻址操作
  3. B(Byte):8位,一个字节
  4. X(eXponent)12位,可用于表示64位浮点数的指数部分
  5. XS(eXponent Sign):4位
  6. M(Mantissa):48位,可用于表示64位浮点数的尾数部分
  7. S(Sign):4位,可用于表示64位浮点数的符号

2.暂存寄存器:R0,R1,R2,R3,R4

共有5个16Nib宽的暂存寄存器可供使用,因为寄存器间传送数据远快于寄存器-内存间传送数据,灵活使用这些寄存器可以加快程序运行速度

3.P寄存器和WP域

上述7个域是硬件支持可以直接使用的,而Saturn还提供了两个域——P域和WP域,提供了更灵活的数据操作方法

P寄存器可以存储1Nib,它有如下的使用方法:

  1. P域的宽度为1Nib,P寄存器的数值决定了P域指向的是工作寄存器中的哪一个Nib
  2. WP域的宽度由P寄存器决定,假设P=n,WP的范围是工作寄存器的0~n号Nib
  3. P的数值指示了装载操作从工作寄存器的哪一个Nib开始,例如令P=2h,装载A3Bh,结果为0000 0000 000B 3A00,令P=Eh,结果为3A00 0000 0000 000B。因此为了避免系统出错,在退出用户程序时要保证P=0

4.指针寄存器:D0,D1,PC

Saturn提供了3个5Nibs宽的指针寄存器,正好可以保存RAM或ROM内的一个地址(使用换页以获得更大寻址范围,详细内容见后文)

D0,D1由用户使用,PC指向当前指令的地址

5.“返回”栈:RSTK

“栈”应该是HP用户很熟悉的一个概念,对于存在于内存当中,可以保存任何物体的RPL栈不同,这里的“返回栈”仅用于在汇编程序中调用子程序时传递参数用。

HP的中断系统需要占用2~3层栈,所以用户可用的层数是5层,使用时要多加注意,避免发生栈溢出。

6.IO寄存器:IN,OUT

这里的IO可用于键盘+扬声器的IO,后文讲到相关内容时再详细说明

7.FLAGS标志寄存器组:Carry,ST,HST

  1. 进位符号- Carry:以单独的1位作为进位标识,同时负责存储判断结果(真为1,假为0)
  2. 状态寄存器- ST:共有16位,其中0~11位由用户作为标志自由使用,12~15位有如下含义:
    12:强制唤醒请求(可使cpu退出深度睡眠(DeepSleep)状态)
    13:当cpu被中断占用时被设为1
    14:当有中断发生时被设为1
    15:当允许发生中断时被设为1
  3. 硬件状态寄存器- HST:共有4位,每一位含义如下:
    0:XM(外部模块缺失)
    1:SB(粘滞位(Sticky Bit)标记)
    2:SR(服务请求)
    3:MP(模块移除)
    在原Saturn上只有XM可以通过RTNSXM(ReTurN and Set XM)设置为1,到了Saturn+平台,这四个都可以自由设置为1
    SB位的作用是:在位移操作时,如果有一位越过了操作范围(比如已经在最高位,再往上移了一位),SB会被设为1以警告用户在位移操作中数据的完整性受到了破坏

 

Leave a Reply

Your email address will not be published. Required fields are marked *