长沙工控帮教育科技有限公司整理 线圈
7 整数算术运算指令
7 整数算术运算指令
7.1 整数算术运算指令概述
说明
算术运算指令针对累加器 1 和 2 的内容。其结果保存在累加器 1 中。累加器 1 的原有内容被移入累加器 2 中。累加器 2 的内容保持不变。
如果 CPU 具有 4 个累加器,将累加器 3 的内容拷入累加器 2 中,将累加器 4 的内容拷入累加器 3 中。而累加器 4 中原有的内容保持不变。
使用整数算术运算指令,可以进行以下两个整数(16 位和 32 位)之间的运算:
• +I 作为整数(16 位),将累加器1和累加器2中的内容相加
• -I 作为整数(16 位),将累加器2中的内容减去累加器1中的内容
• *I 作为整数(16 位),将累加器1和累加器2中的内容相乘
• /I 作为整数(16 位),将累加器2中的内容除以累加器1中的内容
• + 加上一个整数常数(16 位,32 位)
• +D 作为双整数(32 位),将累加器1和累加器2中的内容相加
• -D 作为双整数(32 位),将累加器2中的内容减去累加器1中的内容
• *D 作为双整数(32 位),将累加器1和累加器2中的内容相乘
• /D 作为双整数(32 位),将累加器2中的内容除以累加器1中的内容
• MOD 双整数除法的余数(32位)
请参见“判断整数算术运算指令后状态字的位”。
长沙工控帮教育科技有限公司整理
7.2 判断整数算术运算指令后状态字的位
7-3
T DB1.DBW25
// 将输入字 IW10 的数值装入累加器 1 低字。
7.4 –I 作为整数(16位),将累加器2的内容减累加器1的内容
7-5
T DB1.DBD25
// 将输入字 IW10 的数值装入累加器 1 低字节。
7.6 /I 作为整数(16位),将累加器2的内容除以累加器1的内容
7-7 -2,147,483,648 - +2,147,483,647),结果保存在累加器 1 中。
状态字
T DB1.DBW25
// 将输入字 IW10 的数值装入累加器 1 低字节。
举例 2
STL 解 释 L IW12
L IW14 + 100
>I
JC NEXT
// 将累加器 1 低字中的内容加上“100”;结果保存到累加器 1 低字中。
// 如果累加器 2 中的内容大于累加器 1 中的内容,或输入字 IW12 > (输入 字 IW14 + 100),
// 则条件跳转到跳转标号 NEXT。。
举例 3
STL 解 释 L MD20
L MD24 +D
+ L#-200 T MD28
// 将累加器 1 和累加器 2 中的内容相加;结果保存到累加器 1 中。
// 将累加器 1 中的内容和“-200”相加;结果保存到累加器 1 中。
长沙工控帮教育科技有限公司整理
7-9
T DB1.DBD25
// 将输入双字 ID10 的数值装入累加器 1。
7.9 –D 作为双整数(32位),累加器2的内容减累加器1的内容
7-11
T DB1.DBD25
// 将输入双字 ID10 的数值装入累加器 1。
7.11 /D 作为双整数(32位),累加器2的内容除以累加器1的内容
7-13
7.12 MOD 双整数除法的余数(32位)
格式
MOD
说明
使用 MOD 指令(32 位整数除法的余数),可以将累加器 2 中的内容除以累加 器 1 中的内容。累加器 1 和累加器 2 中的内容作为 32 位整数编译。结果保 存在累加器 1 中。结果只给出了余数,没有商。(使用指令 /D,可以获得商)。
执行指令与 RLO 无关,而且对 RLO 没有影响。状态字位 CC 1、CC 0、OS 和 OV 都设定为指令结果的一个功能。
对于具有两个累加器的 CPU,累加器 2 的内容保持不变。
对于具有 4 个累加器的 CPU,将累加器 3 的内容拷入累加器 2 中,将累加器 4 的内容拷入累加器 3 中。而累加器 4 的内容保持不变。
状态字
BR CC 1 CC 0 OV OS OR STA RLO /FC
写: - x x x x - - - -
状态位生成 CC 1 CC 0 OV OS
余数 = 0 0 0 0 -
- 2147483648 ≤ 余数 < 0 0 1 0 - 2147483647 ≥ 余数 > 0 1 0 0 -
被零除 1 1 1 1
长沙工控帮教育科技有限公司整理
举例
STL 解 释 L ID10
L MD14 MOD
T MD20
// 将输入双字 ID10 的数值装入累加器 1。
// 将累加器 1 中的内容装入累加器 2 中。将存储双字 MD14 的值装入累加器 1 中。
// 将累加器 2 中的内容除以累加器 1 中的内容;结果(余数)保存到累加器 1 中。
// 累加器 1 的内容(结果)被传送到存储双字 MD20。
例如:13 被 4 除
指令执行之前累加器 2 中的内容(ID10): "13"
指令执行之前累加器 1 中的内容(MD14): "4"
指令 MOD(累加器 2 中的内容 / 累加器 1 中的内容): "13/4"
指令执行之后累加器 1 中的内容(余数): "1"