问题:
如何访问CPU 945内,地址在255以上的数据字?n
解答:
在以下样例程序中,从DB10的数据双字“DD1000”中,把一个INFO载入并保存到数据双字“DD2”>中*)。
然后把INFO从数据双字“DD2”传递到数据双字“DD500”中**)。n
:MBR | E3800 | DB地址列表的起始点 | |
:LRW | +10 | 起始地址DB 10 | |
:SLD | 4 | 扩展到20位地址 | |
:T | MD | 14 | 存放在MD14 |
: | |||
:L | KF | +2000 | 载入数值1000的两倍 |
:+D | 20位地址DB10 + 地址DD1000 | ||
:T | MD | 10 | |
:LDI | A1 | 载入accu1及DD1000的内容 | |
: | |||
:A | DB | 10 | |
:T | DD | 2 | *) DB10.DD1000内容 -> DD2 |
: | |||
:L | MD | 14 | 载入20位起始地址DB10 |
:L | KF | +1000 | 载入数值500的两倍 |
:+D | 20位地址DB10 + 地址DD500 | ||
:L | DD | 2 | 载入DD2内容 |
:TAK | accu1与accu2交换 | ||
:TDI | A2 | **) DB10.DD2内容 -> DD500 | |
: |
背景:
使用“SLD 4”命令创建CPU 945的20位地址:
为了把块的起始地址存放到块的地址列表中,在CPU 945中每个条目只有16位可用。因此,只能保存块地址的16最高有效位。安排块的存放,使得最低的4位总为0。例如,如果“A004”代表地址列表中的一个块,则实际的20位地址为“A0040”,或者对于列表中的“B10A”,实际有效的地址是“B10A0”。“SLD 4”命令所作的无非是把地址的0-15位移动到4-20位,而把0-3位填充为0.
绝对地址的载入/传递功能
绝对地址的载入/传递功能把BR列表的内容作为基本地址。使用LDI/TDI寻址的内存地址是基本地址列表的内容,加上数据块中相对地值的参数值的两倍。加倍的原因是:内存区域使用字节寻址,但参数指示引用的却是字寻址。
注意事项:
也请注意关于CPU945的同一主题,其FAQ位于条目ID: 43576-“在DB/DX中访问地址大于255的数据字”。
关键字:
间接寻址
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc339937.html