5- 位右移【SFTR】Shift Right
SFTR指令是使指定位數(shù)長度的軟元件每次向右移動指定位數(shù)的指令。其執(zhí)行效果如下圖所示:
該指令對于以D開始的n1位數(shù)據(jù)(移位寄存器的長度),往右移動n2位,移位后,原寄存器內的低n2位數(shù)據(jù)溢出,高n2位數(shù)據(jù)由S開始的n2位數(shù)據(jù)補充。
如果設定n2為K1,則每移動一次只移動一位。
6- 位左移【SFTL】Shift Left
SFTL指令是使指定位數(shù)長度的軟元件每次向左移動指定位數(shù)的指令。其執(zhí)行效果如下圖所示:
該指令對于以D開始的n1位數(shù)據(jù)(移位寄存器的長度),往左移動n2位,移位后,原寄存器內的高n2位數(shù)據(jù)溢出,低n2位數(shù)據(jù)由S開始的n2位數(shù)據(jù)補充。
如果設定n2為K1,則每移動一次只移動一位。
7- 字右移【WSFR】Word Shift Right
WSFR指令是使n1個字長的字軟元件向右移動n2個字的指令。其執(zhí)行效果如下圖所示:
該指令對于以D開始的n1個字軟元件往右移動n2個字,移位后,原最右側n2個字軟元件的數(shù)據(jù)溢出,左側n2個字軟元件數(shù)據(jù)由S開始的n2個字軟元件數(shù)據(jù)補充。
如果使用組合字元件作為傳送源和目標,需要指定相同的位數(shù);若傳送源和目標軟元件重復則會發(fā)生運算錯誤。
8- 字左移【WSFL】Word Shift Left
WSFL指令是使n1個字長的字軟元件向左移動n2個字的指令。其執(zhí)行效果如下圖所示:
該指令對于以D開始的n1個字軟元件往左移動n2個字,移位后,原最左側n2個字軟元件的數(shù)據(jù)溢出,右側n2個字軟元件數(shù)據(jù)由S開始的n2個字軟元件數(shù)據(jù)補充。
如果使用組合字元件作為傳送源和目標,需要指定相同的位數(shù);若傳送源和目標軟元件重復則會發(fā)生運算錯誤。
9- 移位寫入【SFWR】Shift Register Write
SFWR指令是先入先出控制用的數(shù)據(jù)寫入指令。該指令將源數(shù)據(jù)寫入一個儲存區(qū)域中,等待其他指令調用。其執(zhí)行效果如下圖所示:
該指令執(zhí)行時,將源數(shù)據(jù)S的數(shù)值寫入到目標地址D+1中,同時D的數(shù)據(jù)加一;再次執(zhí)行時將源數(shù)據(jù)S的數(shù)值寫入到目標地址D+2中,同時D的數(shù)據(jù)繼續(xù)加一。也就是說D內的數(shù)據(jù)記錄了已經儲存數(shù)據(jù)的個數(shù),每次執(zhí)行SFWR指令都會把S的數(shù)據(jù)填寫到緊接下來的空區(qū)域中。
當D內記錄的個數(shù)超過n-1時,不會繼續(xù)執(zhí)行數(shù)據(jù)寫入。
10- 移位讀出【SFRD】Shift Register Read
SFRD指令是先入先出控制用的數(shù)據(jù)讀出指令。該指令將SFWR指令儲存好的數(shù)據(jù)一次讀出。其執(zhí)行效果如下圖所示:
該指令執(zhí)行時,將源數(shù)據(jù)S+1的數(shù)值寫入到目標地址D中,同時S的數(shù)據(jù)減一;再次執(zhí)行時將源數(shù)據(jù)S+2的數(shù)值寫入到目標地址D中,同時S的數(shù)據(jù)繼續(xù)減一。也就是說S內的數(shù)據(jù)記錄了儲存數(shù)據(jù)的剩余個數(shù),當S內記錄的個數(shù)為0時,不會繼續(xù)執(zhí)行數(shù)據(jù)讀出。
SFWR指令和SFRD指令配合接口實現(xiàn)先入先出的控制。所謂先入先出,可以想象產品儲存到倉庫的庫位中,按照入庫的順序排列好,在取貨時根據(jù)入庫的先后順序優(yōu)先拿取先入的產品。如以下梯形圖實例: