编号21间接寻址讲述.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
描述 该示例表示的是,以数值“0”初始化数据块的输入的这样一个功能。DB号是通过输入参数传递到功能中去的。 首先,在Network 1中将要寻址的数据块打开,为此,将待传递的块号(输入参数: #dbnumber)拷贝到一存储器字(MW100)中。然后使用该存储字将DB打开。 在network(段)2中,通过一个循环将该DB的前10个数据字设置为“0”,在该循环中,使用LOOP指令,由此将循环计数器存入MB50中。 接着,通过存储器间接寻址,经由MD 40,向该数据块DB的各个数据字中传送“0”值。 在进入循环之前,将数据块的最后一个数据字(DBW 18)的地址指针装载到MD 40中。由于数值向DB中是逐字传送,而不是逐字节传送的,所以在每次循环扫描的时候,MD40中的访问地址减去P#2.0。 注意事项 为示例程序简单起见,本示例程序中没有对数据块号进行检查。 实际应用也很重要的是,要将初始地址和预设值为“0”的区域长度设计为“可参数化”的,并在打开DB之前进行检查,确定DB是否恰好具有所必需的长度。 上述示例另一个弱点是,所有存储器的间接访问,都是通过位存储器的指针进行的。 这里可以采用其它更好的方法替代吗?为什么? 练习的目标 通过一个实际的例子,熟悉存储器间接寻址在循环程序中的使用。 任务 存储器间接寻址用于设计循环程序,据此在100个连续存储单元里,按地址升序分别置入数值1.0到100.0。 1. 创建FC41及DB41。 2. 在DB41的声明部分,定义一个数组ARRAY[1..100]的变量 Meas_Value 其中数组元素的类型为REAL型数据。 3. 在FC41的声明部分,定义一个WORD类型的输入参数#DB_Num,4个INT 类型的临时变量_Counter,REAL类型的#Ini_Value,WORD类型的 I_DB_Num以及DWORD类型的r_Pointer。 4. 在FC41中,首先打开由#DB_Num传递数据块号的数据块。使用临 时变量#I_DB_NUM来完成此操作。 5. 在DB41中,按照地址升序,分别将数值1.0到100.0置入域 #Meas_Value[1]到域#Meas_Value[100]中。 使用循环编程来进行此项任务的完成(指令: LOOP): - 在变量#L_Counter中保存循环扫描计数值,并在变量#Ini_Value中保存 Meas_Value[..]各个元素的初始化值。 - 使用存储器间接寻址的方法,寻址#Meas_Value[..]的各个元素。将访 问地址保存在变量#Par_Pointer中。 6. 在组织块OB1中调用FC41 ,并给输入参数#DB_Num分配相应参数。然后 将程序块下载到CPU中并进行测试。 概述 使用寄存器间接寻址内部区域,要访问的操作数的地址(存储单元)位于两个地址寄存器(AR1, AR2)的某一个中。 这种情况下,地址寄存器的内容是一个内部区域的32位指针,其结构和含 义与寄存器间接寻址的情况相同。 语法规则 使用寄存器间接内部区域寻址,其整个指令有以下几个部分组成: ? 一条指令(比如:A、L、T 等等) ? 一个地址标识符(I、MB、QD等等),它由地址标识符(I、Q、 M、DB、DI等等)与访问宽度标识符(B=字节,W=字, D=双字)组合 而成。 ? 以及一个带偏移量常数的地址寄存器的声明,该声明必须要放在方括

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档