发布于 2012-12-18 21:41:43
3楼
楼主:我是这样理解的,仅供参考:
LAR1 P##T_DSTBLK //在OB内紧接着声明表向下将T_DSTBLK 声明为any形参指针,
//此种用法系统会默认P#L20.0为any形参指针的首地址
L W#16#1002 //装载16#1002到ACCU1,16#10系统保留数值,16#02表示字节
T W [AR1,P#0.0] //将ACCU1里的内容16#1002写入LW20
L DW#16#140001 //装载16#140001到ACCU1,16#14表示20个数据,16#0001表示DB1
T D [AR1,P#2.0] //将16#140001写入LD22
L #OB10_OB_NUMBR //装载当前OB10的号码(10)到ACCU1
DEC 1 //当前ACCU1里面的内容减去1(10-1=9)
L 20 //将9移入ACCU2,装载20到ACCU1
*D //ACCU1×ACCU2=20×9=180存储在ACCU1
SLD 3 //将ACCU1的内容左移三位,能得到(16#5A0)=常数指针P#180.0
L DW#16#84000000 //将P#180.0移入ACCU2,装载16#84000000到ACCU1
XOD //ACCU1异或ACCU2,结果存入ACCU1=16#840005A0
T D [AR1,P#6.0] //将ACCU1的内容写入LD26
// --------------此时any形参指针P##T_DSTBLK赋值完成,它的内容为P#DB1.DBX180.0 BYTE 20--------------
CALL "BLKMOV"
SRCBLK :=P#L 0.0 BYTE 20
RET_VAL:=LW30
DSTBLK :=#T_DSTBLK
//此段程序的主要作用是将当前OB块声明表20个字节复制到DB1中,根据OB号码的不同,目标首地址会以20个字节作为偏移量。
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”