• 沒有找到結果。

整数算术运算指令

长沙工控帮教育科技有限公司整理 线圈

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"

长沙工控帮教育科技有限公司整理