恭喜,你发布的帖子
发布于 2018-04-12 09:57:41
4楼
你这程序源代码都没有,这是上传上来的项目。知道它的怎么做,也不知道为什么要这么做!
SET //置位rlo
SAVE //保存rlo到br
= L 30.1//保存rlo到临时变量L30.1
L W#16#0
T LW 32 //lw32=W#16#0
L DW#16#87000020
T LD 34 //ld34=DW#16#87000020
L W#16#0
T LW 38 //lw38=W#16#0
L DW#16#87000080
T LD 40// ld40=DW#16#87000080
TAR2 LD 44 //将ld44的值传到地址寄存器2
UC SFC 6 //调用系统块sfc6
P#L 28.0
P#L 32.0
P#L 38.0
LAR2 LD 44 //将地址寄存器2的值保存到ld44
L #TEMP10.TEMP14 //temp10是结构变量,读取它中的temp14的值到累加器1
L B#16#64 //累加器1的值保存到累加器2,读取常数B#16#64到累加器1
==I
O #STAT3 //如果累加器1的值和累加器2的值相等或者stat3为1则执行下面的程序,
JCN M001 //否则跳到M001标号处
CLR
= #STAT3 //stat3复位
L 0
T #STAT6 //stat6=0
M002: L #STAT6 //读取stat6到累加器1
L 31 //stat6保存到累加器2,常数31保存到累加器1
<=I //如果stat6=31则执行下面的程序否则跳转到标号M003
JCN M003
TAK //交换累加器1和2的值
ITD //stat6转换成双整数
L L#32
*D //stat6*32
JO M004//如果溢出,跳到M004
JU M005
M004: CLR
= L 30.1 //L30.1=0
M005: TAR2 //如果stat6*32没有溢出,则读取地址寄存器的值和stat6*32的结果相加①
+D
JO M006//如果溢出则跳转到标号M006
JU M007 //否则跳转到M007
M006: CLR
= L 30.1 //L30.1=0
M007: L 0.000000e+000 //①处结果保存到累加器2,0.0保存到累加器1
TAK //交换累加器1和2的值
LAR1 //将①的结果保存到地址寄存器
TAK //交换累加器1和2的结果,累加器1为0.0
T DID [AR1,P#12.0] //累加器1的结果保存到db块的ar1地址寄存器对应的地址偏移量为12
L #STAT6 //的地址
L 1
+I //stat6+1 ②
JO M008 如果溢出则跳转到M008,否则跳转到M009
JU M009
M008: CLR
= L 30.1 //L30.1复位
M009: T #STAT6 stat6=②处的结果
JU M002 跳转到M002
M003: CLR
= #STAT7 //stat7=0
L 0
T #STAT6 //stat6=0
L 0.000000e+000
T #OUT2 //out2=0
M001: L #TEMP10.TEMP14
L B#16#64
==I //如果#TEMP10.TEMP14=B#16#64,则执行后面的程序,否则跳转到M010
JCN M010
JU M011跳转到M011
M010: L #IN1
L 32
>I
TAK
L 1
= L 30.2 //如果in1>32则L30.2为否则为0
<I
O L 30.2
JCN M012 //in1<32或者大于32则跳转到M012,否则执行下面的程序
L 0.000000e+000
T #OUT2 //out2=0.0
CLR
= L 30.1//L30.1=0
JU M011 //跳到标号M011
M012: L #STAT6
ITD
L L#32
*D //stat6*32 ③
JO M013 如果③的结果溢出则跳到M013否则跳到M014
JU M014
M013: CLR
= L 30.1 //L30.1=0
M014: TAR2
+D //否则地址寄存器2的值+③的结果 ④
JO M015 //如果溢出跳到M015,否则跳到M016
JU M016
M015: CLR
= L 30.1 //L30.1=0
M016: L #IN0 //④的值保存到累加器2,in0保存到累加器1
TAK //l累加器1和2的值交换,
LAR1 ④的值保存到地址寄存器1
TAK //累加器1和2交换数据,累加器1的值为in0
T DID [AR1,P#12.0] //in0保存到db块的地址寄存器1的地址偏移量12处
L #STAT6
L 1
+I
JO M017 stat6+1如果溢出跳转到M017,否则跳转到M018
JU M018
M017: CLR
= L 30.1 //L30.1=0
M018: T #STAT6 //累加器1的结果保存到stat6中
L #IN1
>=I //如果stat6大于in1执行下面的程序,否则跳到M019
JCN M019
SET
= #STAT7 //stat7=1
L 0
T #STAT6 //sat6=0
M019: L 0.000000e+000
T #STAT5 //stat5=0.0
CLR //rlo复位
A #STAT7 //如果stat7为1则执行后面的程序,否则跳到M020
JCN M020
L #IN1
T #TEMP8 //temp9=in1
JU M021 //跳到M021
M020: L #STAT6
T #TEMP8 //temp8=stat6
M021: L #TEMP8
L 1
-I
JO M022 temp8-1结果如果溢出跳到M022,否则跳到M023
JU M023
M022: CLR
= L 30.1 //L30.1=0
M023: L 0
T #TEMP9 //temp9=0
TAK //累加器1和2的值交换,累加器1的值是temp8-1
T LW 32 //lw32=temp8-1
TAK //累加器1和2的值交换,累加器1的值是0
M024: L #TEMP9
L LW 32
<=I //如果temp9<lw32,则执行下面的程序否则跳到M025
JCN M025
TAK
ITD
L L#32
*D //temp9*32如果溢出跳到M026,否则跳到M027
JO M026
JU M027
M026: CLR
= L 30.1 //L30.1=0
M027: TAR2 //地址寄存器2的值保存到累加器1,temp9*32保存到累加器2
+D
JO M028//累加器1和2的值相加如果溢出则跳到M028,否则跳到M029,⑤
JU M029
M028: CLR
= L 30.1 //L30.1=0
M029: L #STAT5 //累加器1=sata5,累加器2=⑤处的结果
TAK //交换累加器1和2的值,
LAR1//累加器1当前结果保存到地址寄存器
TAK //交换累加器1和2的值
L DID [AR1,P#12.0]
+R
JO M030 //如果stat5+DID [AR1,P#12.0]的结果溢出则跳到M030,否则跳到M031⑥
JU M031
M030: CLR
= L 30.1 //L30.1=0
M031: T #STAT5 stat5=⑥处结果
L #TEMP9
L 1
+I
JO M032 //如果temp9+1结果溢出,跳到M032,否则提到M033 ⑦;
JU M033
M032: CLR
= L 30.1 //M30.1=0
M033: T #TEMP9 //temp9=⑦处结果;
JU M024 //跳到M024
M025: L #TEMP8
ITD
DTR
L #STAT5
TAK
/R
JO M034 //如果stat5/real(temp8)结果溢出跳到M034,否则跳到M035⑧
JU M035
M034: CLR
= L 30.1 //L30.1=0
M035: T #OUT2 //out2=⑧处结果
M011: CLR //rlo=0
A L 30.1//判断L30.1状态
SAVE //保存rlo结果到br
BE //程序结束
请填写推广理由:
分享
只看
楼主