quote:以下是引用老学童在2013-09-19 14:03:08的发言:
Monsanto朋友,我很乐意回答你的问题,不过在别人的帖子上挂自己的问题显得对楼主不太友好,好在楼主的问题已经基本上解决了,而且你的问题与楼主的问题类似、而且还都是‘DB6’,就算是楼主的亲戚或对楼主问题的延伸吧,O(∩_∩)O~!
另外,以后贴程序最好详细一些,比如生成一个源程序,这样给别人的信息量就会大一些,对你提出的问题也能回答的准确些,对吧。
这个程序的寻址起始地址和目标地址不是从P#0.0开始的,但却是很多实际应用中经常用到的,因为一个DB数据块中存储大量的数据,很多情况下需要从DB中间的某个位置读取或另一个位置存储数据;
我觉得把程序标注出来,不如给你讲解一下解读程序的思路,这样以后遇到新的程序就不至于束手无策了;
在分析一个程序前,一定要先搞清楚程序的作用或功能是什么,然后要搞清楚每个变量的含义和数据类型,
例如:
程序作用分析:
在某个DB数据区传递数据,数据是INT或WORD(16位)型;
变量分析:
#znCnt 用整数128赋值,INT或WORD类型(16位),这里一定是INT类型,
赋值128后接着又加100,推断128是某个数据区相对于DBX0.0的偏置尺寸,而100是要读取
数据相对于该数据区首地址的偏置尺寸,再者在后面读取(源)数据时,先减去1,然后左移
3位,因此推断#znCnt是用于存放数据区的首地址偏置(128)的变量;
#zdSrc 计算偏置尺寸减去1后在累加器1(32位)中的左移3位的值,它肯定是要读取(源)数据的
区域指针(字节地址.位地址),=P#227.0
#zdDstLo 数据区的首地址偏置#znCnt减去1后,在累加器1(32位)中左移4位的值,相当于左移3位
后乘以2,它肯定是要存入数据的区域指针(字节地址.位地址),=P#254.0
#zdDstHi 是#zdDstLo+L#8,偏移了一个字节,可以肯定#zdDstLo是存入数据的低字节区域指针,
而#zdDstHi是存入数据的高字节区域指针, = P#255.0
OPN DB6
L 128
T #znCnt
L 100
+I
L 1
-I
SLW 3
T #zdSrc
L #znCnt
L 1
-I
SLW 4
T #zdDstLo
L L#8
+D
T #zdDstHi
Monsanto朋友,不知道我的解释能否让你看懂这段程序!
老学童果然厉害,高人,如果有问题向您请教,请不吝赐教,多谢多谢!