回复:SHL_B移位指令使用的困惑

已锁定

xiatianyun

  • 帖子

    850
  • 精华

    10
  • 被关注

    25

论坛等级:奇侠

注册时间:2020-05-09

钻石 钻石 如何晋级?

发布于 2023-03-29 08:01:15

7楼

展开查看
以下是引用yanxiao在2023-03-28 22:19:00的发言 >4楼

你可能觉得有一个隐含的工作寄存器,其实没有。

VB500指令执行前后不产生变化,VB500不能作工作寄存器。

输出寄存器就成为必然的工作寄存器。

STL表示的过程,正好说明这一点。

以下是引用xiatianyun在2023-03-28 18:05:21的发言 >0楼:偶尔发现200Smart的...

引用0楼详细内容:

偶尔发现200Smart的左移右移指令SHL_B/SHR_B有个不容易发现的问题,如果指令的N参数和Out参数是同一个的话会出问题,具体看图:


第10段,SHL_B的N和Out都使用同一个累加器AC0,不能得到正确的结果。1左移2位本来应该得到4,当却是2。

调试了一段时间也没发现问题所在。偶然的把LAD转做STL,发现问题了:

原来200Smart的SHL_B是先把IN复制到Out,然后再使Out移位N个位。

并不是理解的先使IN移位N位,然后把结果送到Out。


太扯了,我还要一个个检查以前的程序。

没错,指令的本意确实是希望不破坏源数据的值,所以直接把源先赋值给目的,然后再移动目的数据的相应位来达到要求。只是这样也确实会造成误会。

芳工说的对,如果不是使用累加器,比如使用V区作为N和Out又是同一个地址,那么编译器会给出出错诊断信息,编译通不过。但如果是累加器就不会给出编译出错信息,这是因为AC可以被作为不同粒度数据造成的,编译器在这里不够好。

也许需要修改手册给出实际工作原理的信息来提示用户注意。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8945条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。