首页 理论教育 数据转换:累加器1中的数据类型转换指令

数据转换:累加器1中的数据类型转换指令

时间:2023-06-29 理论教育 版权反馈
【摘要】:数据转换指令将累加器1中的数据进行数据类型的转换,转换的结果仍然在累加器1中。位28~位30在转换中不使用。例:DTB将长整型(32位)转换为BCD码指令格式为:DTBDTB将ACCU 1中的32位长整型转换为7位二进制编码的十进制数,结果存储在累加器1中。如必要,该指令会对结果取整。二进制补码指令相当于原码乘以“-1”。执行该指令时不涉及RLO,也不影响RLO。如果所转换数字的小数部分介于偶数和奇数结果之间,则该指令选择偶数结果。

数据转换:累加器1中的数据类型转换指令

数据转换指令将累加器1中的数据进行数据类型的转换,转换的结果仍然在累加器1中。寻址存储区均为I、Q、M、L、D。

1.语句表(STL)的转换指令

(1)BTI将BCD码转换为整型(16位)

指令格式为:BTI

BTI(3位BCD数从十进制二进制的转换)将ACCU 1-L(累加器的低字,下同)中的3位二进制编码的十进制数(BCD码)转换为16位整型,结果存储在累加器1的低字中,累加器1的高字和累加器2则保持不变。

ACCU 1-L中的BCD数字:BCD数字的允许值范围从“-999”~“+999”。位0~位11为数值,位15为BCD数字的符号(0=正,1=负)。位12~位14在转换中不使用。如果BCD数字的十进制(四位)数字处于10~15的无效范围,则在转换期间会出现错误代码B#16#21(表示出现BCD码转换错误)。通常,CPU会转入STOP模式。但是,通过对OB121编程可设计另一种出错响应,用以处理该同步编程错误。

例:

(2)ITB将整型(16位)转换为BCD码

指令格式为:ITB

ITB(16位整数从二进制到十进制的转换)将ACCU 1-L的16位整数转换为3位二进制编码的十进制数(BCD码),结果存储在累加器1的低字中。位0~位11包含BCD数字的值。位12~位15用来表示BCD数字的符号状态(0000=正,1111=负)。累加器1的高字和累加器2保持不变。BCD数字的范围为“-999”~“+999”。如果超出允许范围,则状态位OV和OS被置位为1。执行该指令时不涉及RLO,也不会影响RLO。

例:

(3)BTD将BCD码转换为整型(32位)

指令格式为:BTD

BTD(7位BCD数字从十进制到二进制的转换)将ACCU 1中的7位二进制编码的十进制数(BCD),转换为32位长整型,结果存储在累加器1中,累加器2则保持不变。ACCU 1中的BCD数字:BCD数字的允许值范围从“-9,999,999”~“+9,999,999”。位0~位27解释为数值,位31解释为BCD数字的符号(0=正,1=负)。位28~位30在转换中不使用。如果任何十进制数(BCD编码的四位组)处于10~15的无效范围,则在转换期间会出现BCDF错误。通常,CPU会转入STOP模式。但是,通过对OB121编程可设计另一种出错响应,用以处理该同步编程错误。

例:

(4)ITD将整型(16位)转换为长整型(32位)

指令格式为:ITD

ITD(16位整数转换为32位整数)将ACCU 1-L中的16位整数转换为32位长整数,结果存储在累加器1中。

例:

(5)DTB将长整型(32位)转换为BCD码

指令格式为:DTB

DTB(32位整数从二进制到十进制的转换)将ACCU 1中的32位长整型转换为7位二进制编码的十进制数(BCD码),结果存储在累加器1中。位0~位27包含BCD数字的值。位28~位31用来表示BCD数字的符号状态(0000=正,1111=负)。累加器2保持不变。

BCD数的范围为“-9,999,999”~“+9,999,999”。如果超出允许范围,则状态位OV和OS被置位为1。

例:

(6)DTR 将长整型(32位)转换为浮点型(32位IEEE-FP)

指令格式为:DTR

DTR(32位整数转换为32位IEEE浮点数)将ACCU 1中的32位长整型转换为32位IEEE浮点数。如必要,该指令会对结果取整。32位整数比32位浮点数精度更高,结果存储在累加器1中。

例:

(7)INVI 对整数(16位)求反码

指令格式为:INVI

INVI(对整数求反码)在ACCU 1-L中形成16位数值的二进制反码。二进制反码是通过将各个位的值取反形成的,即用“0”替换“1”,用“1”替换“0”。结果存储在累加器1的低字中。

例:

(8)INVD 对长整数(32位)求反码

指令格式为:INVD

INVD(对长整数求反码)在ACCU1中形成32位数值的二进制反码。二进制反码是通过将各个位的值取反形成的,即用“0”替换“1”,用“1”替换“0”。结果存储在累加器1中。

例:

(9)NEGI 对整数(16位)求补码

指令格式为:NEGI

NEGI(对整数求补码)在ACCU 1-L中形成16位数值的二进制补码。二进制补码是通过将各个位取反(即用“0”替换“1”,用“1”替换“0”)后加“1”形成的。结果存储在累加器1的低字中。二进制补码相当于原码乘以“-1”。状态位CC 1、CC 0、OS和OV则根据函数运算的结果来设置。

例:

(10)NEGD 对长整数(32位)求补码

指令格式为:NEGD

NEGD(对长整数求补码)在ACCU 1中形成32位数值的二进制补码。二进制补码是通过将每个位取反(即用“0”替换“1”,用“1”替换“0”)后加“1”形成的,结果存储在累加器1中。二进制补码指令相当于原码乘以“-1”。执行该指令时不涉及RLO,也不影响RLO。状态位CC 1、CC 0、OS和OV则根据函数运算的结果来设置。

例:

(11)NEGR 对浮点数(32位,IEEE-FP)取反

指令格式为:NEGR

NEGR(将32位IEEE浮点数取反)将ACCU 1中的浮点数(32位,IEEE-FP)取反。该指令将ACCU 1中位31的状态(尾数符号)取反,结果存储在累加器1中。

例:

(12)CAW改变ACCU 1-L(16位)中的字节顺序

指令格式为:CAW

CAW反转ACCU 1-L中的字节顺序,即交换ACCU 1-L中的2B的位置。结果存储在累加器1的低字中,累加器1的高字和累加器2则保持不变。

例:

执行前后变化如下:

(13)CAD改变ACCU 1(32位)中的字节顺序

指令格式为:CAD

CAD反转ACCU 1中的字节顺序。结果存储在累加器1中,累加器2则保持不变。

例:

执行前后变化如下:

(14)RND取整

指令格式为:RND

RND(32位IEEE浮点数转换为32位整型)将ACCU 1中的32位IEEE浮点数(32位,IEEE-FP)转换为32位整型(长整型),并将结果取整为最接近的整数。如果所转换数字的小数部分介于偶数和奇数结果之间,则该指令选择偶数结果。如果数字超出允许范围,则状态位OV和OS被置位到1。结果存储在累加器1中。出现错误(使用了不能表示为32位整数的NaN或浮点数)时不执行转换并显示溢出。

例:

执行前后变化如下:

(15)TRUNC截尾取整

指令格式为:TRUNC

TRUNC(32位IEEE浮点数转换为32位整型)将ACCU 1中的32位IEEE浮点数转换为32位整型(长整型)。运算结果为所转换浮点数的整数部分(IEEE取整模式“取整到零”),小数部分舍去。如果数字超出允许范围,则状态位OV和OS被置位到1。结果存储在累加器1中。出现错误(使用了不能表示为32位整数的NaN或浮点数)时不执行转换并显示溢出。

例:

执行前后变化如下:

(16)RND+取整为高位长整数

指令格式为:RND+

RND+(32位IEEE浮点数转换为32位整型)将ACCU 1中的32位IEEE浮点数转换为32位整型(长整型),并将结果取整为大于或等于所转换浮点数的最小整数,亦即将浮点数转换为大于等于它的最小长整数。如果数字超出允许范围,则状态位OV和OS被置位到1。结果存储在累加器1中。出现错误(使用了不能表示为32位整数的NaN或浮点数)时不执行转换并显示溢出。

例:

执行前后变化如下:

转换前的值 转换后的值

(17)RND-取整为低位长整数

指令格式为:RND-

RND-(32位IEEE浮点数转换为32位整型)将ACCU 1中的32位IEEE浮点数转换为32位整型(长整型),并将结果取整为小于或等于所转换浮点数的最大整数,亦即将浮点数转换为小于等于它的最小长整数。如果数字超出允许范围,则状态位OV和OS被置位到1。结果存储在累加器1中。出现错误(使用了不能表示为32位整数的NaN或浮点数)时不执行转换并显示溢出。

例:

执行前后变化如下:(www.xing528.com)

2.梯形图(LAD)的比较指令

转换指令读取参数IN的内容,然后进行转换或改变其符号。可通过参数OUT查询结果。寻址存储区均为I、Q、M、L、D。参数EN为起用输入,ENO为起用输出,IN为待转换的值,OUT为转换结果。

(1)BCD_I BCD码转换为整型

指令符号为:

BCD_I(BCD码转换为整型)将参数IN的内容以3位BCD码数字(+/-999)读取,并将其转换为整型值(16位)。整型值的结果通过参数OUT输出。ENO始终与EN的信号状态相同。

例:

如果输入I0.0的状态为“1”,则将MW10中的内容以3位BCD码数字读取,并将其转换为整型值。结果存储在MW12中。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(2)I_BCD 整型转换为BCD码

指令符号为:

I_BCD(整型转换为BCD码)将参数IN的内容以整型值(16位)读取,并将其转换为3位BCD码数字(+/-999)。结果由参数OUT输出。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0的状态为“1”,则将MW10的内容以整型值读取,并将其转换为3位BCD码数字。结果存储在LW12中。如果产生溢出或未执行指令(I0.0=0),则输出Q4.0的状态为“1”。

(3)I_DINT 整型转换为长整型

指令符号为:

I_DINT(整型转换为长整型)将参数IN的内容以整型(16位)读取,并将其转换为长整型(32位)。结果由参数OUT输出。ENO始终与EN的信号状态相同。

例:

如果I0.0为“1”,则MW10的内容以整型读取,并将其转换为长整型。结果存储在LD12中。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(4)BCD_DI BCD码转换为长整型

指令符号为:

BCD_DI(将BCD码转换为长整型)将参数IN的内容以7位BCD码(+/-9999999)数字读取,并将其转换为长整型值(32位)。长整型值的结果通过参数OUT输出。ENO始终与EN的信号状态相同。

例:

如果I0.0的状态为“1”,则将MD10的内容以7位BCD码数字读取,并将其转换为长整型值。结果存储在MD14中。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(5)DI_BCD 长整型转换为BCD码

指令符号为:

DI_BCD(长整型转换为BCD码)将参数IN的内容以长整型值(32位)读取,并将其转换为七位BCD码数字(+/-9999999)。结果由参数OUT输出。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0的状态为“1”,则将MD10的内容以长整型读取,并将其转换为7位BCD码数字。结果存储在MD14中。如果产生溢出或未执行指令(I0.0=0),则输出Q4.0的状态为“1”。

(6)DI_REAL 长整型转换为浮点型

指令符号为:

DI_REAL(长整型转换为浮点型)将参数IN的内容以长整型读取,并将其转换为浮点数。结果由参数OUT输出。ENO始终与EN的信号状态相同。

例:

如果I0.0的状态为“1”,则将MD10中的内容以长整型读取,并将其转换为浮点数。结果存储在MD14中。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(7)INV_I 对整数求反码

指令符号为:

INV_I(对整数求反码)读取IN参数的内容,并使用十六进制掩码W#16#FFFF执行布尔“异或”运算。此指令将每一位变成相反状态。ENO始终与EN的信号状态相同。

例:

如果I0.0为“1”,则将MW8的每一位都取反,例如:MW10=0100000110000001取反结果为MW12=1011111001111110。

如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(8)INV_DI 对长整数求反码

指令符号为:

INV_DI(对长整数求反码)读取IN参数的内容,并使用十六进制掩码W#16#FFFF FFFF执行布尔“异或”运算。此指令将每一位转换为相反状态。ENO始终与EN的信号状态相同。

例:

如果I0.0为“1”,则MD8的每一位都取反,例如:MD10=F0FF FFF0取反结果为MD14=0F00 000F。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(9)NEG_I 对整数求补码

指令符号为:

NEG_I(对整数求补码)读取IN参数的内容并执行求二进制补码指令。二进制补码指令等同于乘以(-1)后改变符号(例如:从正值变为负值)。ENO始终与EN的信号状态相同,以下情况例外:如果EN的信号状态=1并产生溢出,则ENO的信号状态=0。

例:

如果I0.0为“1”,则由OUT参数将MW10的值(符号相反)输出到MW12。MW8=+10结果为MW10=-10。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。如果EN的信号状态=1并产生溢出,则ENO的信号状态=0。

(10)NEG_DI 对长整数求补码

指令符号为:

NEG_DI(对长整数求补码)读取参数IN的内容并执行二进制补码指令。二进制补码指令等同于乘以(-1)后改变符号(例如:从正值变为负值)。ENO始终与EN的信号状态相同,以下情况例外:如果EN的信号状态=1并产生溢出,则ENO的信号状态=0。

例:

如果I0.0为“1”,则由OUT参数将MD10的值(符号相反)输出到MD14。MD8=+1000结果为MD12=-1000。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。如果EN的信号状态=1并产生溢出,则ENO的信号状态=0。

(11)NEG_R 浮点数取反

指令符号为:

NEG_R(取反浮点)读取参数IN的内容并改变符号。指令等同于乘以1)后改变符号(例如:从正值变为负值)。ENO始终与EN的信号状态相同。

例:

如果I0.0为“1”,则由OUT参数将MD10的值(符号相反)输出到MD14。MD10=+5.234结果为MD14=-5.234。如果未执行转换(ENO=EN=0),则输出Q4.0的状态为“1”。

(12)ROUND 取整为长整型

指令符号为:

ROUND(取整为长整型)将参数IN的内容以浮点数读取,并将其转换为长整型(32位)。结果为最接近的整数(“取整到最接近值”)。如果浮点数介于两个整数之间,则返回偶数。结果由参数OUT输出。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0的状态为“1”,则将MD10中的内容以浮点数读取,并将其转换为最接近的长整数。函数“取整为最接近值”的结果存储在MD14中。如果产生溢出或未执行指令(I0.0=0),则输出Q4.0的状态为“1”。

(13)TRUNC 截取长整数部分

指令符号为:

TRUNC(截断长整型)将参数IN的内容以浮点数读取,并将其转换为长整型(32位)。(“向零取整模式”)的长整型结果由参数OUT输出。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0的状态为“1”,则将MD10中的内容以实型数字读取,并将其转换为长整型值。结果为浮点数的整型部分,并存储在MD14中。如果产生溢出或未执行指令(I0.0=0),则输出Q4.0的状态为“1”。

(14)CEIL向上取整

指令符号为:

CEIL(向上取整)将参数IN的内容以浮点数读取,并将其转换为长整型(32位)。结果为大于该浮点数的最小整数(“取整到+无穷大”)。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0为1,则将MD10的内容以浮点数读取,并使用取整函数将其转换为长整型。结果存储在MD14中。如果出现溢出或未处理指令(I0.0=0),则输出Q4.0的状态为“1”。

(15)FLOOR 向下取整

指令符号为:

FLOOR(向下取整)将参数IN的内容以浮点数读取,并将其转换为长整型(32位)。结果为小于该浮点数的最大整数部分(“取整为-无穷大”)。如果产生溢出,ENO的状态为“0”。

例:

如果I0.0为“1”,则将ID10的内容以浮点数读取,并按取整到负无穷大模式将其转换为长整型。结果存储在ID14中。如果产生溢出或未执行指令(I0.0=0),则输出Q4.0的状态为“1”。

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

我要反馈