楼主最近还看过
JC 当RLO = 1时跳转
格式
JC <跳转标签>
地址 描述
<跳转标签> 跳转目标的符号名。
描述
当逻辑运算的结果为1时,JC <跳转标签>就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的-32768
或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。
当逻辑运算的结果为0时,不执行跳转。将RLO设置为1,继续对下一个语句执行程序扫描。
状态字
BR CC 1 CC 0 OV OS OR STA RLO /FC
写: - - - - - 0 1 1 0
实例
STL 注解
A I 1.0
A I 1.2
JC JOVR //当RLO=1时,跳转到跳转标签JOVR。
L IW8 //当不执行跳转时,在此继续执行程序扫描。
T MW22
JOVR: A I 2.1 //跳转到跳转标签JOVR后,在此继续执行程序扫描。
CN 当RLO = 0时跳转
格式
JCN <跳转标签>
地址 描述
<跳转标签> 跳转目标的符号名。
描述
当逻辑运算的结果为0时,JCN <跳转标签> 就中断线性程序扫描,并跳转到一个跳转目标。线性程序扫描在跳转目标处继续执行。由跳转标签确定跳转目标。允许向前跳转和向后跳转。只能在一个块内执行跳转,即,跳转指令和跳转目标必须位于同一个块内。跳转目标在该块内必须唯一。最大跳转距离为程序代码的
-32768或+32767个字。可以跳过的实际语句的最大数目取决于程序中使用的语句组合(单字、双字或三字语句)。
当逻辑运算的结果为1时,不执行跳转。继续对下一个语句执行程序扫描。
状态字
BR CC 1 CC 0 OV OS OR STA RLO /FC
写: - - - - - 0 1 1 0
实例
STL 注解
A I 1.0
A I 1.2
JCN JOVR //当RLO = 0时跳转到跳转标签JOVR。
L IW8 //当不执行跳转时,在此继续执行程序扫描。
T MW22
JOVR: A I 2.1 //跳转到跳转标签JOVR后,在此继续执行程序扫描。
程序例子如下图:
AN #VzuF //Even if nothing
AN #FzuV //?will do
JC m999 //?nothing made !
L #MaxBLK //block number
L #VarBLK //?not over
<I //?maximum
JC m999 //yes, break
L 0 //block number
<I //?under zero
JC m999 //yes, break
L #SimBLK //The number from jumped over
L #BYausBLK //... and is to copying bytes
+I //... added
L #BYimBLK //... more largely than the total number
>I //... is a programmer too stupidly
JC m999 //... and with abort is punished!
L #VarBLK //absolut targetblock
L #BLKimDB // ... Blocks pro DB
/I // ... calculte
L #Var1DB // ... 1.DB load
+I // ... calculte
T #R_VarDB //result data block
L #VarBLK //absolut targetblock
L #BLKimDB // ... Blocks pro DB
/I // ... calculte
SRD 16 // ... Rest ist reeler Block
L #BYimBLK //?load block
*I //?charged is byte address
L #SimBLK //?first byte in the block
+I //?add
SLD 3 //?to pointer format
LAR1 // -> addressregister load
T #R_VarAdr
L #FixAdr // Absoluter Zielblock
L #SimBLK //?first byte in the block
+I //?add
SLD 3 //?to pointer format
LAR2 // -> addressregister load
L #BYausBLK //byte at start
T #Bytes1 // -> actually byte copy
SRD 2 // ... in doubleword
T #Schleife // -> result loop counter
A #FzuV //fix to clamped !
JC m010 //yes, jump !
L 0 // Vvariable to fix !
>I
JCN m002
m001: OPN DB 【#R_VarDB】 // all datas as doubleword copy
L DBD 【AR1,P#0.0】 //... so far possible
OPN #FixDB
T DBD 【AR2,P#0.0】
+AR1 P#4.0
+AR2 P#4.0
L #Schleife
L 1
-I
T #Schleife
L 0
>I
JC m001
m002: AN L 1.1 //1 word copy (if still available)
JC m003
OPN DB 【#R_VarDB】
L DBW 【AR1,P#0.0】
OPN #FixDB
T DBW 【AR2,P#0.0】
+AR1 P#2.0
+AR2 P#2.0
m003: AN L 1.0 //1 byte copy (if still available)
JC m999
OPN DB 【#R_VarDB】
L DBB 【AR1,P#0.0】
OPN #FixDB
T DBB 【AR2,P#0.0】
JU m999
m010: L 0 //fix variable
>I
JCN m012
m011: OPN #FixDB // all datas as doubleword copy
L DBD 【AR2,P#0.0】 //... so far possible
OPN DB 【#R_VarDB】
T DBD 【AR1,P#0.0】
+AR1 P#4.0
+AR2 P#4.0
L #Schleife
L 1
-I
T #Schleife
L 0
>I
JC m011
m012: AN L 1.1 //1 word copy (if still available)
JC m003
OPN #FixDB
L DBW 【AR2,P#0.0】
OPN DB 【#R_VarDB】
T DBW 【AR1,P#0.0】
+AR1 P#2.0
+AR2 P#2.0
AN L 1.0 //1 byte copy (if still available)
JC m999
OPN #FixDB
L DBB 【AR2,P#0.0】
OPN DB 【#R_VarDB】
T DBB 【AR1,P#0.0】
m999: A #VzuF //read or
O #FzuV //?writen
SAVE // -> further sequence circut
CLR // Und Tsch !!!