寻址:
大多数出现在指令中以#开始的常数都是代表数据。但块传送指令(BLDD、BLPD)代表的是地址,SST指令代表的是状态寄存器ST0、ST1。
ADD、SUB、LAR允许长立即数和短立即数。
ADSK、SBRK、LDP、LACL、RPT允许8位短立即数寻址,MPY允许13位短立即数寻址。
ADD、SUB、AND、OR、XOR、LACC、LAR、SPLK允许长立即数寻址。
ADD、SUB、AND、OR、XOR是算术逻辑指令,隐含目的操作数为ACC,立即数通常来自16位程序读总线,都要经过输入定标移位器,所以在进入CALU前可进行0~16位的移位;LACC可进行0~15位的移位;而LAR、SPLK源和目的都是16位,则不需要移位。
因为立即数放在程序存储区,所以LT、LTS、LTD、LTA、LPH等目标寄存器没有程序读总线的指令没有立即数寻址。
程序地址一般是程序的跳转目的地址,如:CALL、CC、B、BCND、BANZ。只有三条不是:BLPD、MAC、MACD,后两条应用在滤波器的系数设计好的后置于程序空间,利用MAC、MACD作滤波运算。
除了隐含寻址外,大多数的指令可同时具备直接和间接两种寻址方式。但NORM只有间接寻址而无直接寻址方式。另外,ADD、SUB的直接间接寻址还允许左移0~16位,SACL、SACH指令允许左移0~7位。
输入移位:
ADD、SUB、LACC可以指令中规定输入移位的位数。
ADDT、SUBT、LACT用TREG中的低四位来指定移位的位数。
而ADDC、ADDS、SUBB、SUBS等这些稍复杂的指令则不进行移位和符号扩展。
逻辑指令XOR、AND、OR也可以移位,但其不受SXM影响,高低位均填0。
输出移位:
从PREG输出,移位方式由PM决定。指令有:APAC、LTA、LTD、LTP、MAC、MACD、MPYA、MPYS、MPYU、PAC、SPAC、SPH、SPL、SQRS、SQRA。
从ACC输出,可在指令中指定移位的位数0~7,这样的指令只有两条:SACL、SACH。
符号扩展:
指令中包含了移位和符号扩展,其操作理解顺序为先符号扩展再移位。
ADD、ADDT、SUB、SUBT、LACC、LACT这些指令能进行移位,也根据SXM进行符号位扩展。
ADDC、ADDS、SUBB、SUBS则抑制符号扩展。
MPY #k的13位立即数无论SXM为何值都进行符号位扩展。
PM=3,PREG左移输出时也不论SXM为何值都要进行符号扩展。
逻辑指令不存在符号扩展问题。
符号数:
加减运算不用区分是有符号数还是无符号数,乘法除了MPYU是无符号数外,其他都是符号数相乘。另外指令中出现的8位立即数及涉及到AR的运算都被认为是无符号数。 |