程序员开发实例大全宝库

网站首页 > 编程文章 正文

STL代码解读:加入队列(ATT)代码块

zazugpt 2025-02-21 16:10:25 编程文章 23 ℃ 0 评论

这个代码块是跟前期解读的FIFO块配合使用,当时看到那个代码块,只有出队列的功能,今天找到这入队列的代码块,解读一下。当年这个代码我是抄到本子上,一行行在后面加注释的。

接口与源码

代码解读

1、L P##TABLE

2、LAR1

将指针的地址载入地址寄存器1,此时地址寄存器存储的是table的实参地址。


3、L W#16#0

4、L W [AR1,P#0.0]

5、==I

6、JZ IF01

判断指针第一个字是否为0(0则不是DB块,非零就是DB块编号),如果不是DB块则跳转到第9行标签处执行。


7、T #BLOCK_NO

8、OPN DB [#BLOCK_NO]

如果指针指向的是DB块,就打开DB块。

9、IF01: NOP 0

10、L D [AR1,P#2.0]

11、LAR1

将指针的后4个字节(就是1个跨区域的32位指针)载入累加器1,此时地址寄存器存储的是队列的存储空间。

12、L W [AR1,P#0.0] //队列的长度

13、L W [AR1,P#2.0] //当前队列存储的数量

14、>I

15、JCN FAIL

如果队列满了则跳转到29行位置,队列没满从16行继续执行。

16、L 1

17、+I

18、T W [AR1,P#2.0]

将当前队列的存储数量加1。

19、L 1

20、+I

21、SLD 4

存储数量加1左移4位,就是队列末尾位置跟队列开头位置的指针偏移。

22、TAR1

23、+D

24、LAR1

将地址寄存器1存储的指针位置定位到队列的末尾。

25、L #DATA

26、T W [AR1,P#0.0]

将INPUT接口区要加入队列的数值#DATA存入队列的末尾。


27、SET

28、JU SBR

29、FAIL: CLR

30、SBR: SAVE

27-30行处理程序块的ENO。

当队列满的时候从第29行执行,ENO位无输出。

当正常存入数值时,执行第27、28、30行,使能输出ENO。

总结:块需要在调用时应采用上升沿调用,将输入的值放到队列的最后位置,并将队列当前计数加1。队列的第一个位置(字)是队列的长度,第二个字是当前队列的长度,从第三个字开始存储数据。与这个指令配合使用的还有FIFO,LIFO指令。


如果大家有代码需要解读,欢迎私信给我,我是山东王建设,专注于西门子STL代码解读,期待您的收藏与关注。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表