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