技术论坛

 回复:AR2在FB中的使用

返回主题列表
作者 主题
Kevincheng
游侠

经验值:307
发帖数:86
精华帖:2
楼主    2010-06-29 09:45:59
主题:AR2在FB中的使用
因为在FB中AR2存放的是背景数据块的数据地址。那么,假如我要使用同时使用AR1和AR2编程那该怎么办?我能改变AR2中的内容吗?
例如(实际上把MD0+1后传给MD4无须用间接寻址,但为了说明问题,所以这样写):
LAR1 P#0.0
LAR2 P#4.0
L MD[AR1,P#0.0]
L 1
+D
T MD[AR2,P#0.0]
这段程序在FC中使用应该是没有什么问题的,但是在FB中呢?该如何处理AR2
Be the change you want to see in the world
Kevincheng
游侠

经验值:307
发帖数:86
精华帖:2
2楼    2010-06-29 13:18:23
精华帖  主题:回复:AR2在FB中的使用
quote:以下是引用sqzth在2010-06-29 12:31:33的发言:
没有任何问题
在FB里面同样可以这样写;



在FB中,AR2指向背景数据块的首地址,如果我在FB中对AR2重新赋值,那后面的FB参数就不对了,我做过仿真的。
经过中午的试验,我认为如果要达到上述程序的条件,还必须装其中的一个数据做为FB的参数才行。
比如将+1后的结果作了FB的参数。在FB中,使用AR2,如果地址偏移正确,在程序保存时,你偏移的地址就自动被解析成了FB相应的参数了。

以上是我实验后的结论,不知道是不是这样的?
Be the change you want to see in the world
youhm
至圣

经验值:13571
发帖数:4924
精华帖:81
5楼    2010-06-29 15:21:25
精华帖  主题:回复:AR2在FB中的使用
就楼主这个问题,用模拟器做了一些测试,下面说一下我的理解
FB中为了方便背景数据块参数的寻址,自动使用DI寄存器和AR2寄存器,DI寄存器保存的是当前背景数据块号,AR2寄存器指向P#DBX0.0,如果改变了这两个寄存器的值,你再访问背景数据块参数时将不会得到正确的数值,而且如果写成L W[AR2,P#0.0]这样的方式保存后可能会自动变成背景数据块接口参数(虽然并不会改变你实际目的,但这样看起来很麻烦)
所以,在FB里使用DI寄存器和AR2寄存器要小心,对这两个寄存器改变后不要再使用背景数据块参数,当要使用背景数据块参数时要恢复这两个寄存器的值就可以了
Kevincheng
游侠

经验值:307
发帖数:86
精华帖:2
6楼    2010-06-29 15:55:05
精华帖  主题:回复:AR2在FB中的使用
quote:以下是引用youhm在2010-06-29 15:21:25的发言:
就楼主这个问题,用模拟器做了一些测试,下面说一下我的理解
FB中为了方便背景数据块参数的寻址,自动使用DI寄存器和AR2寄存器,DI寄存器保存的是当前背景数据块号,AR2寄存器指向P#DBX0.0,如果改变了这两个寄存器的值,你再访问背景数据块参数时将不会得到正确的数值,而且如果写成L W[AR2,P#0.0]这样的方式保存后可能会自动变成背景数据块接口参数(虽然并不会改变你实际目的,但这样看起来很麻烦)
所以,在FB里使用DI寄存器和AR2寄存器要小心,对这两个寄存器改变后不要再使用背景数据块参数,当要使用背景数据块参数时要恢复这两个寄存器的值就可以了


嗯,是这个理,我觉得要用还是可以,就像你说的,在用之前要保存DI,AR2的数据,用完后还原。
所以,在用之前应该这样写一段
TAR2 #AR2temp //临时变量,在当前AR2的值。
……
……
使用AR1,AR2的程序段
……
……
LAR2 AR2temp //把地址还给AR2
Be the change you want to see in the world
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。