循环程序的本质:就是用同一段代码,处理不同的数据。
不过,这是废话。
计算机中的数据,都是放在存贮器中,以地址方式访问,因此,程序指令访问数据的方式,可称之为数据的寻址方式。
1、如果数据直接出现在指令中,称之立即寻址方式
一般,常数可以直接放入指令中,直观又快速。
比如:
MOVW 0,AC0 // 0就是常数,直接出现在指令中
2、如果指令中出现的是一个具体的数据地址,可称之为直接寻址方式
这可能是使用最多的一种寻址方式
比如:
MOVW VW0,AC0 // VW0是数据地址,把VW0中的数据装入AC0中
3、上面两种寻址方式,在循环中处理不同的数据,似乎是达不到的,因为数据寻址与代码绑得太紧了。
所以,第三种的寻址方式,称之为间接寻址
比如:
MOVD &VW0,AC1 // 间址寻址的准备,把VW0的地址装入AC1
MOVW *AC1,AC0 // 间址寻址,AC1中存贮数据的地址,由此地址指向的数据装入AC0
这样,一条MOVW *AC1,AC0就可以处理不同的数据,只要变更AC1中的数据地址即可。
以上这些也是废话,在PLC内混谁还不懂呢?
在Smart中,大部分的数据支持间接寻址
唯独位变量不能间接寻址,比如Ix.x、Mx.x、Qx.x等等。
关于位变量通过编程方式实现间接寻址,另贴讨论。
抛个砖,期待高人的见解。