回复:请高手给看一下此指针的意思

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2013-09-14 18:00:05

15楼

quote:以下是引用Henry-wang在2013-09-14 09:34:20的发言:
谢谢楼上的解析,到了下面这条指令时,区域指针怎么跟指针常数相加呢?
OPN DB 6
L P#DBX 0.0
LAR1
L #IN0
SLD 5
+AR1

还有下面这条指令不是给标明了区域了吗,就不用上面在重复标明了吧!
L DBD [AR1,P#0.0]
T #OUT1
L DBD [AR1,P#0.0]
多谢高手指导!


Automann等几位大侠一语道破了这一段程序的真实作用, 看到你执着的学习精神,我就把这段程序给你解释一下!

这段程序的真实作用是将DB块中的第N个数(DB6.DBD'N')输出, 因此,‘IN0’的数据类型一定是INT,例如:整数10,

OPN DB 6 //打开DB6
L P#DBX0.0 //取DB6数据区的数据首地址
LAR1 //将DB6数据区的数据首地址装入地址寄存器1
L #IN0 //将输入的数装入累加器1(32位),例如:10 (16位)
SLD 5 //将累加器1(32位)中的32位全部左移5位得到DB中要读取数的32位地址指针,即‘字节地址.位地址’,40.0 (每个DW数占4个字节,当然第10个数的地址尺寸就是40.0了),也是相对于DB6数据区的数据首地的偏置尺寸)
+AR1 //将偏置加入地址寄存器1得到了要输出数据的32位区域地址指针‘DBX40.0’ (P#DBX0.0+P#40.0)
L DBD [AR1,P#0.0] //读取数据,注意这里P#0.0是指针偏置,因为AR1中已经有了准确地址,因此,无需偏置
T #OUT1 //输出到某个DW型地址,例如:MD0

‘P#0.0’中没有包含数据区识别符,无法正确寻址;

楼主的程序中有一段错误,AR1中已经包含了数据区识别符,因此,‘ L DBD [AR1,P#0.0] ’要改成‘ L D [AR1,P#0.0] ’,否则,也可以用'P#0.0'

OPN DB 6
L #IN0
SLD 5
LAR1
L DBD [AR1,P#0.0]
T #OUT1

希望我的解释能帮助你脱离困惑,建议你看帖子一定要看高手们的回帖,从中汲取营养,祝你睡个好觉!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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