恭喜,你发布的帖子
发布于 2021-09-24 16:27:42
2楼
OPN #DB_Mode_43 //打开DB74
CDB //DB74作为背景数据块DI74打开
L DW#16#85000000 //16#85代表DI,背景数据块的访问
LAR2 //ar2作为访问DI74的地址寄存器
L P##First_Sign //p#db91.dbb430, 指针含6个字节信息,byte0-1代表DBNo=91,byte2代表数据区域类型16#84, byte3-5代表p#430.0
LAR1
L 0
L W [ AR1 , P#0.0 ] //byte0-1,91
==I
JZ M002
T #TEMP10 //temp10=91
OPN DB [ #TEMP10] //打开db91
M002: NOP 0
L D [ AR1 , P#2.0 ] //byte2-byte5, p#84代表指向DB块,本例中DB为91,byte3-5代表P#430.0
LAR1 //AR1存储待检验字符组的首地址
L #Length
L 1
<I
= #Error
JC M001
TAK
M003: T #TEMP11 //长度11,每循环减1,直到0
L B [ AR1 , P#0.0 ] //当前待检验字符
T #TEMP14
L DW#16#85000000
LAR2
L 43 //43次循环,查找di74里面是否有匹配的字符
M004: T #TEMP12
L #TEMP14 //当前待检验字符
L B [ AR2 , P#0.0 ] //di74里面的字符
==I
JC M005
+AR2 P#1.0
L #TEMP12
LOOP M004
SET
= #Error
JU M001
M005: TAR2 //如果匹配,ar2是di74里面匹配字符的指针
L DW#16#FFFFFF //16#00ffffff, 需要抹掉最高位的16#85
AD
SRD 3 //指针右移3位,是该字符在DB块的绝对位置
L #TEMP13 //累加位置信息
+D
T #TEMP13
+AR1 P#1.0
L #TEMP11
LOOP M003
L #TEMP13 //累加数值,你列举的例子里面累加值为150
L 43
MOD
SLD 3 //余数为21,转换成指针p#21.0
L DW#16#85000000 //通过16#85来指向DI,本例子中打开的背景数据块是74
OD
LAR2
L B [ AR2 , P#0.0 ] //db74.dbb21是‘L’
T #Checksum
精华帖版主置评:谢谢有心人
请填写推广理由:
分享
只看
楼主