有一段根据冒泡排序原理写的STL语句代码如下所示:
-------------------------------------------------------------------------------------------------
FC1在OB1中调用
程序功能:将DB3中存放的64个INT类型数据从大到小排序
Interface:
IN:Data 数据类型 ANY
OUT:Error
OB1中调用FC1时Data=P#DB3.DBX0.0 INT 64
------------------------------------------------------------------------------------------------------------------
SET
SAVE
L 0
T #Error
//将输入的ANY指针'#Data'复制到LB0~LB9
L P##Data //#Data为指向指针的指针(10Byte)
LAR1
//-------------#Data指针解析
L D [AR1,P#0.0]
T LD 0 //将#Data的前4个字节(Byte0~Byte3)双字传送至LD0
L D [AR1,P#4.0]
T LD 4 //将#Data的第5~8字节(Byte4~Byte7)双字传送至LD4
L W [AR1,P#8.0]
T LW 8 //将#Data的最后一个字(Byte8~Byte8)传送至LW8
//判断ANY指针的Byte0字节是B#16#10
L LB 0
L B#16#10
==I
JCN ERR1
//判断输入数据是否在DB块中的数据
L LB 6
L B#16#84
==I
JCN ERR2
//判断输入数据是否是INT类型
L LB 1
L B#16#5
==I
JCN ERR3
//打开DB块
OPN DB [LW 4]
//数据起始地址去掉标识部分
L LD 6
L DW#16#00FFFFFF
AD
T LD 10
//计算最后一个存储单元指针存储到LD10
L LW 2 //LB2+LB3 存放#Data指针的宽度=64
L 2
*I
T LD 14
L L#2
-D
SLD 3
L LD 10
+D
T LD 10
//-----------------------------------------------
//外循环次数LW20,循环次数为n-1;n为参与排序数据总个数
L LW 2
L 1
-I
NXT2: T LW 20 //外循环开始
L LD 10
LAR1
L LW 20
//嵌套(内)循环次数LW18,循环次数由LW20送人LW18中
NXT1: T LW 18 //嵌套(内)循环开始
TAR1
L P#2.0
-D
LAR1
//若后一个单元的数据小于前一个单元数据,数据位置不变,进行下一对相邻数据的比较
L DBW [AR1,P#2.0]
L DBW [AR1,P#0.0]
<I
JCN L1
//若后一个单元的数据大于前一个单元的数据,对前后数据进行交换
L DBW [AR1,P#2.0]
L DBW [AR1,P#0.0]
T DBW [AR1,P#2.0]
POP
T DBW [AR1,P#0.0]
//--------------------------------------------------------------------------------------
L1: L LW 18
LOOP NXT1 //嵌套(内)循环次数减1,直至LW18=0,跳出循环
L LW 20
LOOP NXT2 //外循环次数减1,直至LW20=0,跳出循环
JU EXIT
//------------------------------------------------------------------
上边的注释有一些是自己加的
现在有2个地方不明白
问题1、程序中
//数据起始地址去掉标识部分
L LD 6
L DW#16#00FFFFFF
AD
T LD 10
这几句代码是对LD 10初始化吗?因为此时LD 10=0
问题2、程序中
//计算最后一个存储单元指针存储到LD10
L LW 2 //LB2+LB3 存放#Data指针的宽度=64
L 2
*I
T LD 14
L L#2
-D
SLD 3
L LD 10
+D
T LD 10
对这段程序彻底**了,不知道这一阵对LD 10的操作的意义和作用
----------------------------------------------------------------------------------------------
以上2个问题请大家给出详细解答,谢谢
产品版区:SIMATIC S7-300(F)/S7-400(F/H/FH)
悬赏西币:5 | 解决时间:2019-04-10 16:34:15 | 提问者: XXGK_123 - 资深学长  第3级
最佳答案
回答者:
阿鸣
-
大师  第17级
2019-04-10 14:34:44
提问者对于答案的评价:
谢谢!阿鸣大师的指点,虽然自认为对寄存器间接寻址的2种指针格式(寄存器区域内间接寻址、寄存器交叉区域间接寻址)已经熟悉了,但是看到您的解答,还是自愧不如!还不能灵活应用!
一语点醒梦中人,醍醐灌顶,茅塞顿开!谢谢
专家置评
S7-300和S7-400寻址
https://support.industry.siemens.com/cs/cn/zh/view/79632832
置评专家:西门子自动化技术支持 2019-04-11 08:48:27