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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章