您现在所在的是:

西门子SIEMENS

回帖:6个,阅读:674 [上一页] [1] [下一页]
667
wfhao666
文章数:8
年度积分:50
历史总积分:667
注册时间:2012/3/28
发站内信
发表于:2013/1/17 14:11:40
#0楼
附件
有谁能告诉我,为什么经过MOVW之后,输出的数值变成40了?
1783
kachakacha
文章数:736
年度积分:50
历史总积分:1783
注册时间:2006/5/24
发站内信
发表于:2013/1/17 14:28:47
#1楼
以下是引用wfhao6662013/1/17 14:11:40的发言:
附件
有谁能告诉我,为什么经过MOVW之后,输出的数值变成40了?
这就是地址混合使用的典型~~~~~

10378转换为2进制为  0010 1000 1000 1010 从AIW中写入VW1时,由于VW1又VB1与VB2组成,VB2是VW1的低字节,VB1是VW1的高字节,至此,VW1的值仍然是10378

接下来楼主执行了VW向VD的转换,此时问题来了:
VW1中的10378被扩展到了32位,也就是其二进制已经变成了0000 0000 0000 0000 0010 1000 1000 1010了,此时的结果没有变化,被存入了VD0,就在存入的瞬间,魔法开始了。

VD0包含了VW0以及VW2,也就是说,VD0由VB0,VB1,VB2,VB3组成,而VW1由VB1,VB2组成,因此此时的VW1中的值实际上由VB1,VB2中组成,也就是说,此时的VW1的值是0000 0000 0010 1000,而这不正是10进制的40了么。

而因为监视值需要保持值得一致性,因此你才会在前面MOV-W指令中看到VW1的值为40。

总结:这是典型的程序员地址混用的错误!!!!!!!!!!!!!!!!!!!!!!!!!!正如我在你的令一贴中的结论一样。


专业的回答是成为CVLSAM马甲的重要因素。

Good Luck~
有问题请在论坛提问……作为CVLSAM的马甲,我亚历山大……
Good Luck~
邮箱是anonymousfa@163.com但是我忘记密码了
5832
ziege
文章数:578
年度积分:50
历史总积分:5832
注册时间:2008/8/26
发站内信
发表于:2013/1/17 15:38:35
#2楼
VD0里面包含了有VB0-VB3    VW1里面包含了VB1-VB2    这地址使用重复了    有问题的哦
请指教
1733
SEEYOULALA
文章数:103
年度积分:53
历史总积分:1733
注册时间:2008/6/14
发站内信
发表于:2013/1/17 20:55:32
#3楼
地址重复       AIW0传 VW0  ,VW0转VD2 呢表情
1222
snitplty
文章数:14
年度积分:50
历史总积分:1222
注册时间:2011/5/9
发站内信
发表于:2013/1/18 10:24:44
#4楼
学习阶段,向高手学习,Q1845957301
5084
zytlc
文章数:849
年度积分:50
历史总积分:5084
注册时间:2006/8/9
发站内信
发表于:2013/1/19 11:46:34
#5楼
VW1作为一个容器传递数据用,在其地方一定也有类似的应用,也是用的VW1,这里监控显示的VW1是程序最后的数据。程序执行到你这步时能够正确执行,只是监控显示不正常,这样用可以,不是错误。
789
z569594953
文章数:7
年度积分:50
历史总积分:789
注册时间:2011/11/14
发站内信
发表于:2013/3/14 11:51:01
#6楼
地址重复了,VD0里面包含了VW1

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

78.0005