1.循環移位指令
右、左循環移位指令(D)ROR(P)和(D)ROL(P)編號分別為FNC30和FNC31。執行這兩條指令時,各位數據向右(或向左)循環移動n位,后一次移出來的那一位同時存入進位標志M8022中,如圖1所示。
圖1 右、左循環移位指令的使用
2.帶進位的循環移位指令
帶進位的循環右、左移位指令(D) RCR(P)和(D) RCL(P)編號分別為FNC32和FNC33。執行這兩條指令時,各位數據連同進位(M8022)向右(或向左)循環移動n位,如圖2所示。
圖2 帶進位右、左循環移位指令的使用
使用ROR/ROL/RCR/RCL指令時應該注意:
1)目標操作數可取KnY,KnM,KnS,T,C,D,V和Z,目標元件中位元件的組合只有在K4(16位)和K8(32位指令)時有效。
2)16位指令占5個程序步,32位指令占9個程序步。
3)用連續指令執行時,循環移位操作每個周期執行一次。
3.位右移和位左移指令
位右、左移指令SFTR(P)和SFTL(P)的編號分別為FNC34和FNC35。它們使位元件中的狀態成組地向右(或向左)移動。n1位元件的長度,n2移位位數,n1和n2的關系及范圍因機型不同而有差異,一般為n2≤n1≤1024。位右移指令使用如圖3 所示。
圖3 位右移指令的使用
使用位右移和位左移指令時應注意:
1)源操作數可。、Y、M、S,目標操作數可取Y、M、S。
2)只有16位操作,占9個程序步。
4.字右移和字左移指令
字右移和字左移指令WSFR(P)和WSFL(P)指令編號分別為FNC36和FNC37。字右移和字左移指令以字為單位,其工作的過程與位移位相似,是將n1個字右移或左移n2個字。
使用字右移和字左移指令時應注意:
1)源操作數可取KnX、KnY、KnM、KnS、T、C和D,目標操作數可取KnY、KnM、KnS、T、C和D。
2)字移位指令只有16位操作,占用9個程序步.
3)n1和n2的關系為n2≤n1≤512。
5.先入先出寫入和讀出指令
先入先出寫入指令和先入先出寫入讀出指令SFWR(P)和SFRD(P)的編號分別為FNC38和FNC39。
先入先出寫入指令SFWR的使用如圖4所示, 當X0由OFF變為ON時,SFWR執行, D0中的數據寫入D2,而D1變成指針,其值為1(D1必須先清0);當X0再次由OFF變為ON時,D0中的數據寫入D3,D1變為2,依次類推,D0中的數據依次寫入數據寄存器。D0中的數據從右邊的D2順序存入,源數據寫入的次數放在D1中,當D1中的數達到n-1后不再執行上述操作,同時進位標志M8022置1。
圖4 先入先出寫入指令的使用
先入先出讀出指令SFRD,當X0由OFF變為ON時,D2中的數據送到D20,同時指針D1的值減1,D3~D9的數據向右移一個字,數據總是從D2讀出,指針D1為0時,不再執行上述操作且M8020置1。
圖5 先入先出讀出指令的使用
使用SFWR和SFRD指令時應注意:
1)目標操作數可取KnY、KnM、KnS、T、C和D,源操數可取所有的數據類型。
2)指令只有16位運算,占7個程序步。