假设需要 M0.6->M0.7;
M0.5->M0.6;
M0.4->M0.5;
M0.3->M0.4;
……
M1.0->M1.1;
可能马上就想到移位指令“SHL_W”。但假如实际需要32位以上的移位,又如何实现?
按照上面愚公移山的思路,“……而山不加增,何苦而不平?”,莫说是32位,即使100位、1000位也总是这样移动的,我想机器实际上应该也是按愚公移山法来执行操作的吧。
然而,人不同于机器的地方,在于人具有抽象思维,善于用抽象语言来描述机器语言。
人们把上面那段有规律的思路描述为“循环”。
下面是用循环逻辑对一个80位数据进行移位:
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_TEMP
TEMP0 : DWORD ;
TEMP1 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
OPN DB 3; //打开数据块
L L#80; //最大剔除距离(不要超过数据块长度 位)
M001: T #TEMP1; //最后一位
L L#1;
-D ;
T #TEMP0; //倒数第二位
A DBX [#TEMP0]; //将倒数第二位的数据(状态)移动到倒数第一位
= DBX [#TEMP1];
L #TEMP1;
LOOP M001; //将倒数第三位的数据(状态)移动到倒数第二位
A "N*品"; //……直至将第一位的数据(状态)移动数第二位
= DBX 0.0; //将“NG”信号移动第一位
END_FUNCTION
不论是80位,或是1000位的移动,只需要将“L#80”换成你需要移动的长度,剩下的语句都不变。
从这个例子来看,机器需要执行千万遍的指令,人只需要简单数行即可描述。