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