C64X特有的汇编指令集

 

ABS2 src2,dst                  

.L           

对src2的高、低半字的2 个有符号16位数取绝对值,有饱和

ADDAD src2,src1,dst

..D

使用双字寻址模式的整数加法

ADD2 src1,src2,dst

.L.S.D

src1和src2的高低半字分别做有符号加法

ADD4 src1,src2,dst

.L

Src1和src2的4 个字节分别做有符号加法

ADDKPC src1,src2,dst

.S2

7位有符号常数src1左移2位,然后加到饱和ADDKPC指令的取指包第1条指令地址(PCE1);3位无符号常数src2指定插入的空操作NOP数。

AND src1,src2,dst

.L.S.D

ANDN src1,src2,dst

.L.S.D

先将src2取反,再和src1按位“与”

AVG2 src1,src2,dst

.M

分别求src1和src2高、低半字的平均值,向上取整,结果置入dst

AVGU4 src1,src2,dst

.M

分别求src1和src2的4个无符号字节的平均值,向上取整。

BDEC scst10,dst

.S

当dst>=0时,将dst内容减1并执行相对转移,转移地址为BDEC指令所在的取指包第一条指令地址(PCE1)与scst10(10位有符号数)左移2位后相加的和。如dst<0,无操作。

BITC4 src2,dst

.M

将src2的4个字节内的“1”的个数记入dst的相应字节。

BITR src2,dst

.M

位反转指令,将src2按位序(31~0)反转送到dst的位(31~0)

BNOP src2,src1

注:src2为12为有符号数scst12

..S2

执行绝对转移,转移地址位BNOP指令所在的取指包第1条指令地址(PCE1)与12位有符号数src2左移2位后相加的和。Src1指定插入的空操作数NOP数(0~5)

BNOP src2,src1

注:src2为寄存器

.S2

执行绝对转移,转移地址由src2的内容决定。Src1指定插入的空操作数NOP数(0~5)

BPOS scst10,dst

.S

与BDEC内容相似,差别仅在与dst内容不变

CMPEQ2 src1,src2,dst

.S

分别比较src1和src2高低半字,若高半字相等则dst的bit 1置1,否则置0;同样,低半字的比较结果置dst的bit 0为1或0

CMPEQ4 src1,src2,dst

.S

分别比较src1和src2的4个字节,比较结果置dst的bit 3~bit 0位为1或0

CMPGT2 src1,src2,dst

.S

分别比较src1和src2高低半字,若src1高半字>src2高半字,则dst的bit 1位置1,否则置0;通样,低位半字的比较结果置dst的bit 0位为1或0

CMPGTU4 src1,src2,dst

.S

分别比较src1和src2的4个字节,若src1最高字节>src2最高字节,则dst的bit3置1,否则置0;同样,其他3个字节的比较结果置dst的bit 2位~bit 0位为1或0

CMPLT2 src2,src1,dst

.S

分别比较src2和src1的高低半字,若src2高半字<src1高半字,则dst的bit 1置1,否则置0;同样,低位半字结果置dst的bit 0位为1或0

CMPLTU4 src2,src1,dst

.S

分别比较src2和src1的4个字节(无符号数),若src1最高字节<src2最高字节,则dst的bit 3置1,否则置0;同样,其他3个字节的比较结果置dst的bit 2位~bit 0位为1或0

DEAL src2,dst

.M

提取src2的奇数及偶数位,组成dst的高、低半字

DOTP2 src1,src2,dst

.M

2个16位与16位数的点积和指令,src1与src2中高低对应的半字相乘,再求和。Dst为64位长型量时,高位为符号扩展。Dst为32位整型量时 ,取64位点积的低32位。

DOTPN2 src1,src2,dst

.M

2个16位与16位乘积之差指令,src1与src2中高半字的积减去低半字的积 ,差值送dst

DOTPNRSU2 src1,src2,dst

.M

带求反、移位及四舍五入的点积指令。Src1(有符号数)和src2(无符号数)高半字的积减去低半字的积 ;差值加8000h后右移16位,结果置入dst

DOTPRSU2 src1,src2,dst

.M

与DOTPNRSU2类似,Src1(有符号数)和src2(无符号数)高半字的积加低半字的积 ;和数加8000h后右移16位,结果置入dst

DOTPRUS2 src2,src1,dst

.M

与上一行DOTPRSU2指令差别仅仅是:src1(有符号数)和src2(无符号数)在指令的位置不同。

DOTPSU4 src1,src2,dst

.M

先求src1(有符号数)与src2(无符号数)4个字节对应的积,再相加 ,和数送入dst。

DOTPU4 src1,src2,dst                         

.M

与上一行指令的差别仅仅是:src1和src2都是无符号数,和数也是无符号数。

GMPY4 src1,src2,dst                

.M

做4个字节的Galois域乘法。

LDDW *+baser[offsetR],dst

LDDW *+baseR[ucst5],dst

.D

从内存读取64位双精度到寄存器,偏移地址可以放在寄存器中,也可以是5位常数。

LDNDW *mem,dst

LDNW *mem,dst

.D

无边界调整的内存读取,1次读64位

无边界调整的内存读取,1次读32位

MAX2 src1,src2,dst

.L

分别比较有符号数src1和src2的高低半字,取其中的大数送到dst的相应位置

MAXU4 src1,src2,dst

.L

分别比较有符号数src1和src2的4个无符号字节,取其中的大数送到dst的相应位置

MIN2 src1,src2,dst

.L

分别比较有符号数src1和src2的高低半字,取其中的小数送到dst的相应位置

MINU4 src1,src2,dst

.L

分别比较有符号数src1和src2的4个无符号字节,取其中的小数送到dst的相应位置

MPY2 src1,src2,dst

.M

2个源操作数的高低有符号半字,对应相乘;目的操作数是64位的双字,低位字存放低半字的积,高位字存放高半字的积。

MPYHI src1,src2,dst

.M

Src1的高半字与src2的32位做乘法,结果是64有符号数,存入1对寄存器。

MPYHIR src1,src2,dst

.M

16位与32位带舍入的乘法:src1的高半字与src2的32位做乘法,乘积加4000h后右移15位,结果的低32位存入dst

MPYIH src2,src1,dst

.M

Src1的高半字与src2的32位做乘法,结果是64有符号数,存入1对寄存器(与MPYHI指令相比,只是src1和src2的位置不同)。

MPYIHR src2,src1,dst

.M

与MPYHIR相比 ,只是src1,src2位置不同。

MPYIL src2,src1,dst

.M

Src1的低半字与32位的src2做乘法,结果是64位的有符号数,存入1对寄存器。

MPYILR src2,src1,dst

.M

16位与32位的带舍入乘法:src1的低半字与32 位的src2做乘法,乘积加4000h后右移15位,结果的低32位存入dst

MPYLI src1,src2,dst

.M

与MPYIL相比 ,只是src1、src2位置不同。

MPYLIR src1,src2,dst

.M

与MPYILR相比,只是src1、src2位置不同。

MPYSU4 src1,src2,dst

.M

有符号src1与无符号src2的4个字节对应相乘,4个16位乘积依序存放到一对寄存器内

MPYUS4 src1,src2,dst

.M

与MPYSU4的差别仅在于src1、src2位置不同

MPYU4 src1,src2,dst

.M

无符号src1与无符号src2的4个字节对应相乘,4个16位乘积依序存放到一对寄存器内

MVD src2,dst

.M

通过功能单元.M把寄存器src2的内容送到寄存器dst,用时4个周期。

MVK cst,dst

.L.S.D

将常数cst写入dst低半字,符号扩展

MVKL cst,dst

MVC  IER,B0

MOV dst,src

.L.S.D

将常数cst或cst的低16位写入dst低半字,符号扩展。

把IER (中断使能寄存器)的当前值  赋予  寄存器B0

(Dst)<-(Src) ,将原操作数(字节或字)传送到目的地址。

OR src1,src2,dst

.L.S.D

Src1和src2按位“或”

PACK2 src1,src2,dst

.L.S

将src1与suc2的低16位提取组成一个新的整型数,送dst

PACKH2 src1,src2,dst

.L.S

将src1与suc2的高16位提取组成一个新的整型数,送dst

PACKH4 src1,src2,dst

.L

将src1与suc2的低位字节提取组成一个新的整型数,送dst

PACKHL2 src1,src2,dst

.L.S

将src1高16位与src2的低16位提取组成一个新的整型数,送dst

PACKL4 src1,src2,dst

.L

将src1及src2偶位字节提取组成一个新的整型数,送dst

PACKLH2 src1,src2,dst

.L.S

将src1的低16位与src2的高16位提取组成一个新的整型数,送dst

POTL src2,src1,dst

.M

将src2旋转左移,无符号数src1的最低5位指定旋转左移位数。

进栈指令 PUSH (push onto the stack), 出栈指令 POP (pop from the stack)

汇编格式:PUSH SRC                               POP DST

指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH SRC                                   ; (SP)<-(SP)-2      (SP)<-(SRC)

POP DST                                       ;(DST)<-((SP))     (SP)<-(SP)

指令支持的寻址方式:push 和 pop指令不能使用立即数寻址方式。                指令对标志位的影响:PUSH 和 POP指令都不影响标志位。

指令的特殊要求:①PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;   ②POP指令的DST不允许是CS寄存器;

SADD src1,src2,dst                              

.S       

Src1与src2高低半字分别做带饱和的加法,不影响SAT位。

SADDU4 src1,src2,dst

.S

Src1与src2的4个字节对应做无符号带饱和加法 ,不影响SAT位

SADDSU2 src1,src2,dst

.S

有符号数src1和无符号数src2的高低半字分别做带饱和加法,不影响SAT位

SADDUS2 src1,src2,dst

.S

无符号数src1和有符号数src2的高低半字分别做带饱和加法,不影响SAT位

SHFL src2,dst

.M

Src2的高半字与低半字按位顺序交插,形成新字送dst

SHLMB src1,src2,dst

.L.S

左移并拼接:src2左移8位,再把src1的最高字节续为其最低字节,形成新字送dst

SHR2 src2,src1,dst

.S

Src2的高低半字分别算术右移,有符号扩展,src1的低5位或ucst5确定移位次序。

SHRMB src1,src2,dst

.L.S

右移并拼接:src2右移8位,再把src1的最低字节续为其最高字节,形成新字送dst

SHRU2 src2,src1,dst

.S

Src2的高低半字视作2个无符号数,分别算术右移,无符号扩展,src1的低5位或ucst5确定移位次数

SMPY2 src1,src2,dst

.M

Src1与src2高低半字对应相乘,结果为64位,其他同SMPY指令。

SPACKU4 src1,src2,dst

.S

将src1及src2 4个有符号16位数有饱和低转为4个8位无符号数,送dst

SSHVL src2,src1,dst

.M

带符号扩展、移位方向、长度可变的左移指令:src1为补码数,且绝对值不大于31。如src1为正,src2左移;如src1为负,src2带符号扩展地右移。移位中符号有变,取饱和值,并置SAT位为1。

SSHVR src2,src1,dst

.M

带符号扩展、移位方向、长度可变的右移指令:src1为补码数,且绝对值不大于31。如src1为正,src2带符号扩展右移;如src1为负,src2左移。移位中符号有变,取饱和值,并置SAT位为1。

STDW src,*mem

.D

STNDW src,*mem

.D

STNW src,*mem

.D

SUB2 src1,src2,dst

.S.D

Src1与src2的高低半字分别做有符号减法

SUB4 src1,src2,dst

.L

Src1与src2的4个字节分别做有符号减法,得数送入dst的对应字节

SUBABS4 src1,src2,dst

.L

Src1与src2的4个字节分别做无符号减法,将各个差值的绝对值送入dst

SWAP2 src2,dst

.L.S

将src2的高低半字交换,结果送dst

SWAP4 src2,dst

.L

将src2的高低半字的2个字节交换 ,结果送dst

UNPKHU4 src2,dst

.L.S

将src2高半字的2个字节分别送dst的byte 2、byte 0,其余2字节补0

UNPKLU4 src2,dst

.L.S

将src2低半字的2个字节分别送dst的byte 2、byte 0,其余2字节补0

你可能感兴趣的:(c,汇编,扩展,byte,DST)