**用指針訪問數據表的例子程序**
本例中用 VD14 作為指向配方表的指針;
配方表定義在數據塊中,起始單元為 VB100,每條配方的數據長度為5字節,共4條配方;
VW1008 用來存儲某條配方在表中的配方號,用這個配方號乘以5 可以得到這條配方起始地址的偏移量,用VD14指針加上此偏移量,就可以訪問表中的每一條配方;
最后將此配方數據復制到從VB1500 開始的相應區域中。
梯形圖如下:
BLKMOV這里是傳送指令和普通的MOV_DW指令相比,它的區別在于MOV指令只能傳送一個變量,但是BLK可以批量傳送多個寄存器的值。最多傳255個。
如上圖是BLKMOV_B指令。他有3個管腳。左邊IN管腳的寄存器傳給OUT管腳的寄存器,N管腳是數量,以IN和OUT為首寄存器開始的N個寄存器。
STL語句如下:
TITLE=**用指針訪問數據表的例子程序**
// 本例中用 VD14 作為指向配方表的指針;
// 配方表定義在數據塊中,起始單元為 VB100,每條配方的數據長度為5字節,共4條配方;
// VW1008 用來存儲某條配方在表中的配方號,用這個配方號乘以5 可以得到這條配方起始地址的偏移量,用VD14指針加上此偏移量,就可以訪問表中的每一條配方;
// 最后將此配方數據復制到從VB1500 開始的相應區域中。
Network 1 // 網絡標題
// 創建一個指向配方表起始地址的指針
LD SM0.0
MOVD &VB100, VD14
Network 2
// 將配方號轉換成雙整型,只有轉換成雙整型才可以和指針數據進行運算
LD SM0.0
ITD VW1008, VD18
Network 3
// 根據配方號計算偏移量,因為每條配方長度為5字節,所以用這個配方號乘以5 可以得到這條配方起始地址的偏移量
LD SM0.0
MOVD +5, VD22
*D VD18, VD22
Network 4
// 指針加上此偏移量即可得到指向指定配方的指針
LD SM0.0
+D VD22, VD14
Network 5
// 將該配方傳送到VB1500-VB1504
LD SM0.0
BMB *VD14, VB1500, 5