主题
三、算术与逻辑运算(FNC 20-29)
四则运算
| 指令 | 格式 | 功能 | 16/32位 |
|---|---|---|---|
| ADD | ADD S1 S2 D | S1 + S2 → D | ADD / DADD |
| SUB | SUB S1 S2 D | S1 - S2 → D | SUB / DSUB |
| MUL | MUL S1 S2 D | S1 × S2 → D | MUL / DMUL |
| DIV | DIV S1 S2 D | S1 ÷ 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位 |
|---|---|---|---|
| INC | INC D | D + 1 | INC / DINC |
| DEC | DEC D | D - 1 | DEC / 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位 |
|---|---|---|---|
| WAND | WAND S1 S2 D | 按位与 | WAND / DWAND |
| WOR | WOR S1 S2 D | 按位或 | WOR / DWOR |
| WXOR | WXOR S1 S2 D | 按位异或 | WXOR / DWXOR |
| NEG | NEG 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 |
| FNC | FNC 20 |
ADD D0 D2 D4DADD — 32 位加法
| 项目 | 说明 |
|---|---|
| 格式 | DADD S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | DADD D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 20 (D) |
DADD D0 D2 D4SUB — S1 − S2 → D(16 位减法)
| 项目 | 说明 |
|---|---|
| 格式 | SUB 被减数 S1, 减数 S2, 结果 D |
| 操作数 | 被减数 S1, 减数 S2, 结果 D |
| 示例 | SUB D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 21 |
SUB D0 D2 D4DSUB — 32 位减法
| 项目 | 说明 |
|---|---|
| 格式 | DSUB S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | DSUB D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 21 (D) |
DSUB D0 D2 D4MUL — S1 × S2 → D(结果占 32 位)
| 项目 | 说明 |
|---|---|
| 格式 | MUL 被乘数 S1, 乘数 S2, 结果 D |
| 操作数 | 被乘数 S1, 乘数 S2, 结果 D |
| 示例 | MUL D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 22 |
MUL D0 D2 D4DMUL — 32 位乘法(结果占 64 位)
| 项目 | 说明 |
|---|---|
| 格式 | DMUL S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | DMUL D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 22 (D) |
DMUL D0 D2 D4DIV — S1 ÷ S2 → D(商与余数)
| 项目 | 说明 |
|---|---|
| 格式 | DIV 被除数 S1, 除数 S2, 结果 D |
| 操作数 | 被除数 S1, 除数 S2, 结果 D |
| 示例 | DIV D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 23 |
DIV D0 D2 D4DDIV — 32 位除法
| 项目 | 说明 |
|---|---|
| 格式 | DDIV S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | DDIV D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 23 (D) |
DDIV D0 D2 D4INC — 目标 D 自增 1
| 项目 | 说明 |
|---|---|
| 格式 | INC 操作数 D |
| 操作数 | 操作数 D |
| 示例 | INC D0 |
| 步数 | 3 |
| FNC | FNC 24 |
INC D0DINC — 32 位自增 1
| 项目 | 说明 |
|---|---|
| 格式 | DINC 操作数 D |
| 操作数 | 操作数 D |
| 示例 | DINC D0 |
| 步数 | 5 |
| FNC | FNC 24 (D) |
DINC D0DEC — 目标 D 自减 1
| 项目 | 说明 |
|---|---|
| 格式 | DEC 操作数 D |
| 操作数 | 操作数 D |
| 示例 | DEC D0 |
| 步数 | 3 |
| FNC | FNC 25 |
DEC D0DDEC — 32 位自减 1
| 项目 | 说明 |
|---|---|
| 格式 | DDEC 操作数 D |
| 操作数 | 操作数 D |
| 示例 | DDEC D0 |
| 步数 | 5 |
| FNC | FNC 25 (D) |
DDEC D0NEG — 求补码(取负数)
| 项目 | 说明 |
|---|---|
| 格式 | NEG 操作数 D |
| 操作数 | 操作数 D |
| 示例 | NEG D0 |
| 步数 | 3 |
| FNC | FNC 29 |
NEG D0DNEG — 32 位求补码
| 项目 | 说明 |
|---|---|
| 格式 | DNEG 操作数 D |
| 操作数 | 操作数 D |
| 示例 | DNEG D0 |
| 步数 | 5 |
| FNC | FNC 29 (D) |
DNEG D0WAND — 按位逻辑与:S1 AND S2 → D(32 位版写 DWAND,在「双字/扩展/补充指令」组)
| 项目 | 说明 |
|---|---|
| 格式 | WAND S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | WAND D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 26 |
WAND D0 D2 D4DWAND — 32 位字逻辑与
| 项目 | 说明 |
|---|---|
| 格式 | DWAND S1, S2, D |
| 操作数 | S1, S2, D |
| 示例 | DWAND D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 26 (D) |
DWAND D0 D2 D4WOR — 按位逻辑或:S1 OR S2 → D(32 位版写 DWOR)
| 项目 | 说明 |
|---|---|
| 格式 | WOR S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | WOR D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 27 |
WOR D0 D2 D4DWOR — 32 位字逻辑或
| 项目 | 说明 |
|---|---|
| 格式 | DWOR S1, S2, D |
| 操作数 | S1, S2, D |
| 示例 | DWOR D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 27 (D) |
DWOR D0 D2 D4WXOR — 按位异或:S1 XOR S2 → D(32 位版写 DWXOR)
| 项目 | 说明 |
|---|---|
| 格式 | WXOR S1, S2, 结果 D |
| 操作数 | S1, S2, 结果 D |
| 示例 | WXOR D0 D2 D4 |
| 步数 | 7 |
| FNC | FNC 28 |
WXOR D0 D2 D4DWXOR — 32 位字逻辑异或
| 项目 | 说明 |
|---|---|
| 格式 | DWXOR S1, S2, D |
| 操作数 | S1, S2, D |
| 示例 | DWXOR D0 D2 D4 |
| 步数 | 13 |
| FNC | FNC 28 (D) |
DWXOR D0 D2 D4