L #IN1
L IW 0
SRW
SLW
T MW 10
L 8
L #IN1
-I
L IB 1
SRW
T MB 12
L 20
T MW 14
LAR1 P#0.0
LAR2 P#0.0
L #IN0
M002: T MW 40
L #IN1
M001: T MW 42
OPN DB [MW 14]
A M [AR1,P#10.0]
A M [AR2,P#12.0]
= DBX [AR2,P#0.0]
A DBX [AR2,P#0.0]
JC M003
L P#0.1
+AR2
L MW 42
LOOP M001
LAR2 P#0.0
L MW 14
L 1
+I
T MW 14
L 20
-I
L #IN0
>I
JC M003
L P#0.1
+AR1
L MW 40
LOOP M002
M003: BE
最佳答案
L #IN1//装载in1到累加器1,此处的数据无用
L IW 0//装载in1到累加器2,装载iw0到累加器1
SRW //16位数据右移一个位
SLW //16位左移一个位,两个移位指令合计是把iw0的最低位清零了。
T MW 10//累加器1中的结果保存到mw10
L 8//装载8到累加器1
L #IN1//装载8到累加器2,装载in1到累加器1
-I //累加器2结果减去累加器1的结果
L IB 1//装载ib1到累加器1
SRW //16位数据右移一个位
T MB 12//结果保存到累加器1中
L 20
T MW 14//mw14=20
LAR1 P#0.0//从累加器1中读取地址寄存器1,偏移量为0
LAR2 P#0.0//从累加器1中读取地址寄存器2,偏移量为0
L #IN0
M002: T MW 40//mw40初始值为in0
L #IN1
M001: T MW 42//mw42初始值为in1
OPN DB [MW 14]//打开mw14保存的db号
A M [AR1,P#10.0]
A M [AR2,P#12.0]
= DBX [AR2,P#0.0]//如果m位的ar1对应的地址偏移10个字节和m位的ar2对应的地址偏移12个字节都为1则db块中ar2对应的地址的位为1,否则为0
A DBX [AR2,P#0.0]//如果db块中ar2对应的地址的位为1则跳转到M003否则执行下面的程序
JC M003
L P#0.1
+AR2
L MW 42//mw42保存的地址为ar2增加一个位
LOOP M001//跳转到M001循环
LAR2 P#0.0//从累加器1中读取地址寄存器2,偏移量为0
L MW 14
L 1
+I
T MW 14//mw14=mw14+1
L 20
-I
L #IN0
>I
JC M003//mw14-20>in0则跳转到M003,否则执行下面的程序
L P#0.1
+AR1
L MW 40//mw40=ar1的地址增加一个位
LOOP M002//跳转到M002继续循环
M003: BE程序结束。
提问者对于答案的评价:
谢谢你!
如果IN0:=7 IN1:=5,那么MW10中字节0的1-5位是不是为0 而IB1是不是右移3位然后送到MB12中,那MB12中是什么数呢,看后面的程序M001循环结束后,应是DB20中M10.0分别和M12.0-M12.4与后结果存在DBX0.0-DBX0.4中。M002循环结束后,分别对应DB20- DB26,这样理解对不对?1540390704我qq,能否经常请教?
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc212731.html