理论教育 算术运算和逻辑运算指令详解

算术运算和逻辑运算指令详解

时间:2023-06-16 理论教育 版权反馈
【摘要】:算数及逻辑运算指令是基本运算指令,通过算术及逻辑运算可实现数据的传送、变位及其他控制功能。ADD指令有4个标志位,M8020为0标志;M8021为借位标志位;M8022为进位标志位;M8023为浮点标志位。如果运算结果为0,则零标志位M8020置1,运算结果超过32、767或2147483647则进位标志位M8022位置1。SUB指令标志区功能,32位运算元中指定方法与加法指令相同,在此不再赘述。

算术运算和逻辑运算指令详解

算数及逻辑运算指令是基本运算指令,通过算术及逻辑运算可实现数据的传送、变位及其他控制功能。

1.加法指令

加法指令可以完成两个数据的相加操作。

(1)指令格式

指令编号及助记符:二进制加法指令FNC20 ADD[S1·][S2·][D·]。

●[S1·]、[S2·]为两个作为加数的源操作数

●[D·]为存放相加结果的目的元件。

●源操作数可取所有数据类型。

●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。

(2)指令用法

加法指令ADD是将两个源操作数[S1]、[S2]相加,结果放到目的元件中[D]中。指令说明如图5-34所示。

【实例5-14】加法指令应用

两个源数据进行二进制加法后传递到目的处,各数据的最高位是正(0)、负(1)的符号位,这些数据以代数形式进行加法运算,如:5+(-8)=-3。

ADD指令有4个标志位,M8020为0标志;M8021为借位标志位;M8022为进位标志位;M8023为浮点标志位。

如果运算结果为0,则零标志位M8020置1,运算结果超过32、767(16位运算)或2147483647(32位运算)则进位标志位M8022位置1。

如果运算结果小于-32767(16位运算)或-2147483467(32位运算)则借位标志位M8021置1。

在32位运算中,用到字元件时,被指定的字元件是低16位元件,而下一个字元件默认即为高16位元件,源和目的数据可以用相同的元件,若源和目的元件相同,而且采用连续执行的ADD、(D)ADD指令时,加法的结果在每个扫描周期都会改变。如图5-35所示,操作的结果是D0内的数据加1。

978-7-111-35634-9-Chapter05-34.jpg

图5-34 加法指令ADD举例1

978-7-111-35634-9-Chapter05-35.jpg

图5-35 加法指令ADD举例2

2.减法指令SUB

减法指令可以完成两个数据的相减操作。

(1)指令格式

指令编号及助记符:减法指令FNC21 SUB[S1·][S2·][D·]。

●[S1·][S2·]分别为作为被减数和减数的源元件。

●[D·]为存放相减差的目的元件。

●源操作数可取所有数据类型。

●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。

(2)指令用法

减法指令SUB的功能是将指定的两个源元件中的有符号数,进行二进制代数减法运算,然后将相减的结果差送入指定的目的软元件中。指令用法如图5-36所示。触点X000闭合之后,执行D10-D12=D14。

SUB指令标志区功能,32位运算元中指定方法与加法指令相同,在此不再赘述。

978-7-111-35634-9-Chapter05-36.jpg

图5-36 减法指令SUB举例

3.乘法指令MUL

乘法指令可以完成两个数据的相乘操作。

(1)指令格式

指令编号及助记符:乘法指令FNC22 MUL[S1·][S2·][D·]。

●[S1·][S2·]分别为作为被乘数和乘数的源软件元件。

●[D·]为存放相乘积的目的元件的首地址

●源操作数可取所有数据类型。

●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。

(2)指令用法

乘法指令MUL的功能是将指定的[S1·]、[S2·]两个源软元件中的数进行二进制代数乘法运算,然后将相乘结果积送入指定的目的软元件中。16位运算如图5-37所示,32位运算如图5-38所示。

【实例5-15】乘法指令MUL应用

978-7-111-35634-9-Chapter05-37.jpg

图5-37 乘法指令MUL举例1

978-7-111-35634-9-Chapter05-38.jpg

图5-38 乘法指令MUL举例2

在32位运算中,若目的元件使用位软元件,只能得到低32位的结果,不能得到高32位的结果。这时应先向字元件传送一次后再进行计算,利用字元件作目的时,不可能同时监视64位数据内容,只能通过监控运算结果的高32位和低32位,并利用下式计算4位数据内容。这种情况下,建议最好采用浮点运算。

64位结果=(高32位数据)×232+低32位数据。

4.除法指令

除法指令可以完成两个数据的相除操作。

(1)指令格式

指令编号及助记符:除法指令FNC23 DIV[S1·][S2·][D·]。

●[S1·][S2·]分别为作为被除数和除数的源软元件。

●[D·]为商和余数的目的元件的首地址。

●源操作数可取所有数据类型。

●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。(www.daowen.com)

(2)指令用法

除法指令DIV的功能是将指定的两个源软元件中的数进行二进制有符号数除法运算,然后将相除的商和余数送入指定的目的软元件中。除法指令16位运算如图5-39所示,32位运算如图5-40所示。

978-7-111-35634-9-Chapter05-39.jpg

图5-39 除法指令DIV举例1

978-7-111-35634-9-Chapter05-40.jpg

图5-40 除法指令DIV举例2

5.加1指令、减1指令

加1指令、减1指令可以完成数据的加1、减1操作。

(1)指令格式

指令编号及助记符:加1指令FNC24 INC[D·];减1指令FNC25 DEC[D·]。

●[D·]是要加1(或减1)的目的软元件。

●目的操作数的软元件为KnY、KnM、KnS、T、C、D、V和Z。

(2)指令用法

加1指令INC的功能是将指定的目的软元件的内容增加1,减1指令DEC的功能是将指定的目的软元件的内容减1。指令说明如图5-41所示。

【实例5-16】加1指令、减1指令应用

16位运算时,如果+32767加1变成-32768,标志位不置位;32位运算时,如果+2147483647加1变成-2147483648,标志位不置位。

在连续执行指令中,每个扫描周期都将执行运算,必须加以注意。所以一般采用输入信号的上升沿触发运算一次。

978-7-111-35634-9-Chapter05-41.jpg

图5-41 INC和DEC指令举例

16位运算时,如果-32768再减1,值变为+32767,标志位不置位;32位运算时,如果-2147483648再减1,值变为+2147483647,标志位不置位。

6.逻辑与、或和异或指令

逻辑与、或和异或指令可以完成两个数据的逻辑与、或和异或操作。

(1)指令格式

指令编号及助记符:逻辑“与”指令FNC26 WAND[S1·][S2·][D·];逻辑“或”指令FNC27WOR[S1·][S2·][D·];逻辑“异或”指令FNC28 WXOR[S1·][S2·][D·]。

●[S1·][S2·]为两个操作数的源软元件。

●[D·]为存放运算结果的目的元件。

(2)指令用法

逻辑“与”指令WAND的功能是将指定的两个源软元件[S1]和[S2]中的数进行二进制按位“与”,然后将相“与”的结果送入指定的目的软元件中。WAND指令格式如图5-42所示,存放在源元件即(D10)和(D12)中的两个二进制数据,以位为单位作逻辑“与”运算,结果存放到目的元件[D]中,即(D14)中。

逻辑“或”指令WOR的功能是将指定的两个源软元件[S1]和[S2]中的数,进行二进制按位“或”,然后将相“或”结果送入指定的目的软元件中。指令格式如图5-43所示。存放在源元件即(D10)和(D12)中的两个二进制数据,以位为单位作逻辑“或”运算,结果存放到目的元件[D]中,即(D14)中。

978-7-111-35634-9-Chapter05-42.jpg

图5-42 逻辑“与”指令WAND举例

978-7-111-35634-9-Chapter05-43.jpg

图5-43 逻辑“或”指令WOR举例

逻辑“异或”指令WXOR的功能是将指定的两个源软元件[S1]和[S2]中的数进行二进制按位“异或”,然后将相“异或”结果送入指定的目的软元件中。指令格式如图5-44所示。存放在源元件即(D10)和(D12)中的两个二进制数据,以位为单位作逻辑“异或”运算,结果存放到目的元件[D]中,即(D14)中。

978-7-111-35634-9-Chapter05-44.jpg

图5-44 逻辑“异或”指令WXOR举例

7.求补指令

求补指令可以完成数据的求补操作。

(1)指令格式

指令编号及助记符:求补指令FNC29 NEG[D·]。

●[D·]为存放求补结果的目的元件。

●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。

(2)指令用法

求补指令NEG的功能是将指定的目的软元件[D·]的内容中的各位先取反(0→1,1→0),然后再加1,将其结果送入原先的目的软元件中。指令说明如图5-45所示。

【实例5-17】求补指令应用

978-7-111-35634-9-Chapter05-45.jpg

图5-45 求补指令NEG举例

●如果X000断开,则不执行这条NEG指令,源、目中的数据均保持不变。

●如果X000接通,则执行求补运算,即将D10中的二进制数,进行“连同符号位求反加1”,再将求补的结果将送入D10中。

●求补的示意如图5-46所示。假设D10中的数为十六进制的H000C,执行这条求补指令时,就要对它进行“连同符号位求反加1”,求补结果为HFFF4再存入D10中。

978-7-111-35634-9-Chapter05-46.jpg

图5-46 求补示意图

●求补指令可以有32位操作方式,使用前缀(D)。

●求补指令也可以有脉冲操作方式。使用扩展名(P),只有在驱动条件由OFF→ON时进行一次求补运算。

●求补指令的32位脉冲操作格式为(D)OR(P)[D·]。同样,[D·]为目的软元件的首地址。

●求补指令一般使用其脉冲执行方式,否则每个扫描周期都将执行一次求补操作。

需要注意的是,求补同求补码是不同的。求补码的规则是:“符号位不变,数值位求反加1”,对H000C求补码结果将是H7FF4,两者的结果不一样。求补指令是绝对值不变的变号运算,求补前的H000C的真值是十进制+12,而求补后HFFF4的真值是十进制-12。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈