s7-200和200smart的子程序最多16個輸入、輸出參數(shù)。使用間接尋址可以顯著減少輸入、輸出參數(shù)的個數(shù),不再受上述的限制。
下面舉一個簡單的例子。
子程序“異或運算”對v存儲器中連續(xù)的若干個字節(jié)作異或運算,下面給出了子程序的局部變量和stl程序。
子程序中的bti指令用于將數(shù)據(jù)類型為字節(jié)的輸入?yún)?shù)“字節(jié)數(shù)b”轉(zhuǎn)換為數(shù)據(jù)類型為整數(shù)的臨時變量“字節(jié)數(shù)i”,用來做for指令的當(dāng)前循環(huán)計數(shù)器。
輸入?yún)?shù)“地址指針”是需要異或運算的數(shù)據(jù)區(qū)的起始地址。子程序中的“*#地址指針”是輸入?yún)?shù)“地址指針”指定的地址中變量的值。在循環(huán)程序執(zhí)行的過程中,該指針中的地址值是動態(tài)變化的。
下圖是主程序中調(diào)用“異或運算”子程序的程序。調(diào)用時指定的“地址指針”的值&vb10是源地址的初始值,即數(shù)據(jù)字節(jié)從vb10開始存放;需要異或運算的數(shù)據(jù)的字節(jié)數(shù)為4,異或運算的結(jié)果存放在vb14中。
實際上該子程序的輸入、輸出參數(shù)還可以進一步地簡化:將保存運算結(jié)果的字節(jié)放在地址指針?biāo)傅牡刂穮^(qū)的第一個字節(jié),需要異或運算的字節(jié)數(shù)放在第2個字節(jié),需要運算的數(shù)據(jù)從第3個字節(jié)存放。這樣就只需要一個輸入?yún)?shù)了,當(dāng)然程序要做相應(yīng)的改動。但是程序的輸入、輸出接口沒有第一個方案直觀。