回复:关于间接寻址 指针的一段程序

n次看你的背影

  • 帖子

    2321
  • 精华

    73
  • 被关注

    53

论坛等级:奇侠

注册时间:2008-03-11

普通 普通 如何晋级?

发布于 2012-04-02 22:25:18

4楼

quote:以下是引用cher在2012-04-02 08:49:16的发言:
quote:以下是引用n次看你的背影在2012-04-01 21:08:49的发言:
如果不移位,那麽ld0必须是8的整数倍!

敢问N大侠如果我把LD0换成MD90不就可以不用左移了吗?LD0是什么格式的?


cher:L是本地数据区,通常作为临时变量使用,LD0是本地数据区的第一个双字,包括LB0、LB1、LB2、LB3四个字节。LD0在楼主的程序当中只是起了一个中间运算的过程数据,并没有真正需要存储。所以用MD90替换LD0并没有太大的意义,我认为楼主LD0用法是比较合理的,是节约资源的!
L MW[LD0]此时的LD0是个32位指针。

除了先要理解间接寻址的概念外,还要了解清楚指针的结构。如32位指针,低3位:bit0-bit2用作位地址;3-18位:bit3-bit18用作字节地址。 19-31位:无定义。
——————————————————————————————————————————————
一个32位整型数左移3位后,即可将该整型数转换为指针常数。
举一例参考:
L L#2
L L#10
+D //累加器1的内容为12
RLD 3 //将累加器1里面的内容左移3位(相当于乘以8)
T LD0 //将累加器1里面的内容写到LD0
L MW[LD0] //将LD0里面的数据作为指针,此时的指针为P#12.0;将MW12的内容装载到累加器1
T MW110 //将累加器1的内容写到MW110
——————————————————————————————————————————————

——————————————————————————————————————————————
或者直接用8的倍数的长整数作为指针,这样就无需移位来得到指针了
举一例参考:
L L#16
L L#80
+D //累加器1的内容为96
T LD0 //将累加器1里面的内容写到LD0
L MW[LD0] //将LD0里面的数据作为指针,此时的指针为P#12.0;将MW12的内容装载到累加器1
T MW110 //将累加器1的内容写到MW110
——————————————————————————————————————————————
建议cher学习一下官方S7-300/400间接寻址资料,相信一定会更有收获的!
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54652条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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