• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
gpp0603
静水无为
级别: 略有小成
精华主题: 0
发帖数量: 244 个
工控威望: 319 点
下载积分: 7942 分
在线时间: 181(小时)
注册时间: 2009-11-12
最后登录: 2024-04-29
查看gpp0603的 主题 / 回贴
楼主  发表于: 2013-03-28 07:13
MOV  K8192 D0
MOV  K4         D1
MUL D0    D1    D2
SUB  D2   K1    D10
DIV    D10  K4   D12

监视发现到D2值是—32768  D12的值是0,是否运算错误,还是值超出范围
请高手帮忙解释一下,期待你的回复。
tkggtdkjpl
工欲善其事,必先利其器!
级别: 网络英雄

精华主题: 1 篇
发帖数量: 3413 个
工控威望: 20949 点
下载积分: 20758 分
在线时间: 1702(小时)
注册时间: 2010-01-03
最后登录: 2024-05-02
查看tkggtdkjpl的 主题 / 回贴
1楼  发表于: 2013-03-28 07:45
MUL D0    D1    D2      占用D2 D3
SUB  D2   K1    D10
DIV    D10  K4   D12

地址重叠!
自动化单机,生产线,项目编程调试!
gpp0603
静水无为
级别: 略有小成
精华主题: 0
发帖数量: 244 个
工控威望: 319 点
下载积分: 7942 分
在线时间: 181(小时)
注册时间: 2009-11-12
最后登录: 2024-04-29
查看gpp0603的 主题 / 回贴
2楼  发表于: 2013-03-28 07:53
那就是无法运算了
木皮
学海无涯
级别: 家园常客
精华主题: 0
发帖数量: 485 个
工控威望: 742 点
下载积分: 16520 分
在线时间: 243(小时)
注册时间: 2012-06-17
最后登录: 2021-06-06
查看木皮的 主题 / 回贴
3楼  发表于: 2013-03-28 08:21
超出范围了,你改用32位,并把存储器地址间隔两位以上
大家好才是真的好
天空流星
SZ-CL
级别: 网络英雄
精华主题: 0
发帖数量: 551 个
工控威望: 6172 点
下载积分: 14284 分
在线时间: 529(小时)
注册时间: 2008-03-17
最后登录: 2024-04-30
查看天空流星的 主题 / 回贴
4楼  发表于: 2013-03-28 12:32
引用
引用第3楼木皮于2013-03-28 08:21发表的  :
超出范围了,你改用32位,并把存储器地址间隔两位以上

同意5楼
8192*4的结果超范围了,结果是个32位的把最后一步改成32位的运算
wzhw80808
级别: 略有小成
精华主题: 0
发帖数量: 706 个
工控威望: 461 点
下载积分: 492 分
在线时间: 342(小时)
注册时间: 2007-10-20
最后登录: 2023-10-10
查看wzhw80808的 主题 / 回贴
5楼  发表于: 2013-03-28 12:38
超出范围了,你改用32位,并把存储器地址间隔两位以上
gpp0603
静水无为
级别: 略有小成
精华主题: 0
发帖数量: 244 个
工控威望: 319 点
下载积分: 7942 分
在线时间: 181(小时)
注册时间: 2009-11-12
最后登录: 2024-04-29
查看gpp0603的 主题 / 回贴
6楼  发表于: 2013-03-28 22:44
怎样将MUL D0 D1 D2中的值读出来
ymr78419972
宿命的轮回注定了要让我们去追逐那些难以企及却又十分向往的美丽
级别: 工控侠客
精华主题: 0
发帖数量: 588 个
工控威望: 2719 点
下载积分: 16620 分
在线时间: 270(小时)
注册时间: 2009-05-10
最后登录: 2023-12-16
查看ymr78419972的 主题 / 回贴
7楼  发表于: 2013-03-29 08:55
两D相MUL,那存结果一定是32位的,D1,D2全都是16位的啊,所以:
DMOV  K8192  D0 (D1被占用)
DMOV  K4         D2(D3被占用)
DMUL D0    D2    D4 (D5被占用)
DSUB  D4   K1    D10 (D11被占用)
DDIV    D10  K4   D12 (D13被占用)
8192*4 = 32768 D16位的最大值是32767
山河今仍在,壮志在何方?
lplvpeng
专业制造橡胶射出成型机
级别: 略有小成
精华主题: 0
发帖数量: 107 个
工控威望: 226 点
下载积分: 1265 分
在线时间: 59(小时)
注册时间: 2011-03-26
最后登录: 2024-01-17
查看lplvpeng的 主题 / 回贴
8楼  发表于: 2013-03-29 09:59
楼主没意识到32位指令用D前缀
承接:
设备改造维修15161680303
dongguansae
级别: 探索解密
精华主题: 0
发帖数量: 25 个
工控威望: 146 点
下载积分: 2218 分
在线时间: 25(小时)
注册时间: 2012-12-11
最后登录: 2020-07-14
查看dongguansae的 主题 / 回贴
9楼  发表于: 2013-03-29 11:59
这样改就对了:
MOV K8192 D0
MOV K1 D1
MUL D0 D1 D2
DSUB D2 K1 D10
DDIV D10 K4 D12

MUL后的值是32位的,保存在D2和D3中,所以想用这个值去代入运算,必须加D,DSUB D2 K1 D10 等于(D3,D2)--1 =D10
这样才对,另外D10也是32位的,所以下面应该是DDIV 才能计算正确。这个比较特殊,一个带符号的16位显示的范围是+/-32767,所以32768在D3,D2中是这样的:
00000000 00000000 100000000 00000000 (0为正,1为负),如果没有加D,那只是D2代入,D3被忽略,默认为1,所以此时D2会显示 -32768,再减个1,为-32769,超出了范围,所以,D10的值此时为0。说了这么多,总之加D就对啦!
[ 此帖被dongguansae在2013-03-29 12:09重新编辑 ]
gpp0603
静水无为
级别: 略有小成
精华主题: 0
发帖数量: 244 个
工控威望: 319 点
下载积分: 7942 分
在线时间: 181(小时)
注册时间: 2009-11-12
最后登录: 2024-04-29
查看gpp0603的 主题 / 回贴
10楼  发表于: 2013-03-30 20:17
谢谢大家了
yjhdlp
级别: 家园常客
精华主题: 0
发帖数量: 478 个
工控威望: 625 点
下载积分: 2081 分
在线时间: 178(小时)
注册时间: 2010-11-13
最后登录: 2022-10-15
查看yjhdlp的 主题 / 回贴
11楼  发表于: 2013-03-31 15:38
学习了
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go