Skip to content

三、算术与逻辑运算(FNC 20-29) ​

四则运算 ​

指令格式功能16/32位
ADDADD S1 S2 DS1 + S2 → DADD / DADD
SUBSUB S1 S2 DS1 - S2 → DSUB / DSUB
MULMUL S1 S2 DS1 × S2 → DMUL / DMUL
DIVDIV S1 S2 DS1 ÷ S2 → D(商) D+1(余数)DIV / DDIV
ADD D0 D2 D10       ; D10 = D0 + D2
SUB D0 D2 D10       ; D10 = D0 - D2
MUL D0 D2 D10       ; D10-D11 = D0 × D2
DIV D0 D2 D10       ; D10=商, D11=余数

除数为 0 时运算错误。运算影响标志:M8020(零)、M8021(借位)、M8022(进位)。

实用例程 ​

梯形图:与下方指令表同一段程序

LD M8000
MOV K2004 D8126
LD M8000
EXTR K9600 K0 K81 K2
LD M8000
MOV K2008 D8126
LDP M8013
INC D94
LD>= D94 K5
MOV K0 D94
LD= D94 K1
EXTR H103 H56 K1 D96
LD= D94 K2
EXTR H203 H56 K1 D98
LD M8000
ADD D96 D98 D100
LD M8000
MOV D4 D9
MOV D5 D8
END

把上面的地址、主题、引脚替换成你项目里的即可。

加1减1 ​

指令格式功能16/32位
INCINC DD + 1INC / DINC
DECDEC DD - 1DEC / DDEC
INCP D0             ; X0 上升沿时 D0 加 1
DECP D0             ; X0 上升沿时 D0 减 1

建议使用脉冲执行(INCP/DECP),避免每扫描周期都执行。

实用例程 ​

LDP M8013
DINC D0
DINC D300
LDP M8000
INC D302
LD<= D302 K1
ANDP M8013
DMOV D0 D304
END

把上面的地址、主题、引脚替换成你项目里的即可。

逻辑运算 ​

指令格式功能16/32位
WANDWAND S1 S2 D按位与WAND / DWAND
WORWOR S1 S2 D按位或WOR / DWOR
WXORWXOR S1 S2 D按位异或WXOR / DWXOR
NEGNEG D取补码(0-D)NEG / DNEG

运算标志 ​

标志地址说明
零标志M8020运算结果为 0 时 ON
借位标志M8021运算结果有借位时 ON
进位标志M8022运算结果有进位时 ON

← 上一章:比较与传送 | 下一章:循环与移位 →

各指令详细说明 ​

ADD — S1 + S2 → D(16 位加法) ​

项目说明
格式ADD 被加数 S1, 加数 S2, 结果 D
操作数被加数 S1, 加数 S2, 结果 D
示例ADD D0 D2 D4
步数7
FNCFNC 20
ADD D0 D2 D4

DADD — 32 位加法 ​

项目说明
格式DADD S1, S2, 结果 D
操作数S1, S2, 结果 D
示例DADD D0 D2 D4
步数13
FNCFNC 20 (D)
DADD D0 D2 D4

SUB — S1 − S2 → D(16 位减法) ​

项目说明
格式SUB 被减数 S1, 减数 S2, 结果 D
操作数被减数 S1, 减数 S2, 结果 D
示例SUB D0 D2 D4
步数7
FNCFNC 21
SUB D0 D2 D4

DSUB — 32 位减法 ​

项目说明
格式DSUB S1, S2, 结果 D
操作数S1, S2, 结果 D
示例DSUB D0 D2 D4
步数13
FNCFNC 21 (D)
DSUB D0 D2 D4

MUL — S1 × S2 → D(结果占 32 位) ​

项目说明
格式MUL 被乘数 S1, 乘数 S2, 结果 D
操作数被乘数 S1, 乘数 S2, 结果 D
示例MUL D0 D2 D4
步数7
FNCFNC 22
MUL D0 D2 D4

MUL 的积占 2 个字:D 低字、D+1 高字

DMUL — 32 位乘法(结果占 64 位) ​

项目说明
格式DMUL S1, S2, 结果 D
操作数S1, S2, 结果 D
示例DMUL D0 D2 D4
步数13
FNCFNC 22 (D)
DMUL D0 D2 D4

DMUL 的积占 4 个字,目标区要留够

DIV — S1 ÷ S2 → D(商与余数) ​

项目说明
格式DIV 被除数 S1, 除数 S2, 结果 D
操作数被除数 S1, 除数 S2, 结果 D
示例DIV D0 D2 D4
步数7
FNCFNC 23
DIV D0 D2 D4

DIV 一次给商和余数,D 存商、D+1 存余数

DDIV — 32 位除法 ​

项目说明
格式DDIV S1, S2, 结果 D
操作数S1, S2, 结果 D
示例DDIV D0 D2 D4
步数13
FNCFNC 23 (D)
DDIV D0 D2 D4

DDIV 的商与余数各占 2 个字

INC — 目标 D 自增 1 ​

项目说明
格式INC 操作数 D
操作数操作数 D
示例INC D0
步数3
FNCFNC 24
INC D0

DINC — 32 位自增 1 ​

项目说明
格式DINC 操作数 D
操作数操作数 D
示例DINC D0
步数5
FNCFNC 24 (D)
DINC D0

DEC — 目标 D 自减 1 ​

项目说明
格式DEC 操作数 D
操作数操作数 D
示例DEC D0
步数3
FNCFNC 25
DEC D0

DDEC — 32 位自减 1 ​

项目说明
格式DDEC 操作数 D
操作数操作数 D
示例DDEC D0
步数5
FNCFNC 25 (D)
DDEC D0

NEG — 求补码(取负数) ​

项目说明
格式NEG 操作数 D
操作数操作数 D
示例NEG D0
步数3
FNCFNC 29
NEG D0

NEG 原地取补码;0x8000 取负仍是 0x8000,没有溢出检测

DNEG — 32 位求补码 ​

项目说明
格式DNEG 操作数 D
操作数操作数 D
示例DNEG D0
步数5
FNCFNC 29 (D)
DNEG D0

DNEG(32 位版):原地取补码,操作数占 2 个字

WAND — 按位逻辑与:S1 AND S2 → D(32 位版写 DWAND,在「双字/扩展/补充指令」组) ​

项目说明
格式WAND S1, S2, 结果 D
操作数S1, S2, 结果 D
示例WAND D0 D2 D4
步数7
FNCFNC 26
WAND D0 D2 D4

WAND 按位与:两位都是 1 才为 1,不判正负、不置标志

DWAND — 32 位字逻辑与 ​

项目说明
格式DWAND S1, S2, D
操作数S1, S2, D
示例DWAND D0 D2 D4
步数13
FNCFNC 26 (D)
DWAND D0 D2 D4

DWAND(32 位版):32 个位逐位与,三个操作数各占 2 个字

WOR — 按位逻辑或:S1 OR S2 → D(32 位版写 DWOR) ​

项目说明
格式WOR S1, S2, 结果 D
操作数S1, S2, 结果 D
示例WOR D0 D2 D4
步数7
FNCFNC 27
WOR D0 D2 D4

WOR 按位或:有一位是 1 就为 1

DWOR — 32 位字逻辑或 ​

项目说明
格式DWOR S1, S2, D
操作数S1, S2, D
示例DWOR D0 D2 D4
步数13
FNCFNC 27 (D)
DWOR D0 D2 D4

DWOR(32 位版):32 个位逐位或

WXOR — 按位异或:S1 XOR S2 → D(32 位版写 DWXOR) ​

项目说明
格式WXOR S1, S2, 结果 D
操作数S1, S2, 结果 D
示例WXOR D0 D2 D4
步数7
FNCFNC 28
WXOR D0 D2 D4

WXOR 按位异或:两位不同就为 1

DWXOR — 32 位字逻辑异或 ​

项目说明
格式DWXOR S1, S2, D
操作数S1, S2, D
示例DWXOR D0 D2 D4
步数13
FNCFNC 28 (D)
DWXOR D0 D2 D4

DWXOR(32 位版):32 个位逐位异或

LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研