首页 理论教育 STL编程常用指令详解

STL编程常用指令详解

时间:2023-06-25 理论教育 版权反馈
【摘要】:装入指令将源操作数装入累加器1,而累加器1原有的数据移入累加器2。表3-9 比较指令用于比较累加器1与累加器2中的数据大小,被比较的两个数的数据类型应该相同。表3-13 整数数学运算指令(续)表3-14 浮点数数学指令9.移位与循环移位指令表3-15所示为移位指令,它对累加器1中的数操作,结果在累加器1中。

STL编程常用指令详解

装入(L,Load)指令将源操作数装入累加器1,而累加器1原有的数据移入累加器2。装入指令可以对字节(8位)、字(16位)、双字(32位)数据进行操作。传送(T,Trans-fer)指令将累加器1中的内容写入目的存储区中,累加器1的内容不变。

1.立即寻址的装入与传送指令

立即寻址的操作数直接在指令中。

【实例】 使用立即寻址的例子。

978-7-111-45066-5-Chapter03-44.jpg

2.直接寻址的装入与传送指令

直接寻址在指令中直接给出存储器或寄存器的区域、长度和位置,例如用MW200指定位存储区中的字,地址为200。

【实例】 直接寻址的程序实例:

978-7-111-45066-5-Chapter03-45.jpg

3.寄存器间接寻址

在存储器间接寻址指令中,给出一个作地址指针的存储器,该存储器的内容是操作数所在存储单元的地址。在循环程序中经常使用存储器间接寻址。

地址指针可以是字或双字,定时器(T)、计数器(C)、数据块(DB)、功能块(FB)和功能(FC)的编号范围小于65535,使用字指针就够了。

其他地址则要使用双字指针,如果要用双字格式的指针访问一个字、字节或双字存储器,必须保证指针的位编号为0,例如P#Q20.0。

978-7-111-45066-5-Chapter03-46.jpg

存储器间接寻址的双字指针格式如图3-35所示,共有两种。

978-7-111-45066-5-Chapter03-47.jpg

图3-35 存储器间接寻址的双字指针格式

其中,第0~2位(xxx)为被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号(0~65535)。第24~26位(rrr)为被寻址地址的区域标识号,第31位x=0为区域内的间接寻址,第31位x=1为区域间的间接寻址。

第一种地址指针格式存储区的类型在指令中给出,例如L DBB[AR1,P#6.0]。在某一存储区内寻址,第24~26位(rrr)应为0。

第二种地址指针格式的第24~26位还包含存储区域标识符rrr,为区域间寄存器间接寻址。表3-8为寄存器间接寻址的区域标识位。

表3-8 寄存器间接寻址的区域标识位

978-7-111-45066-5-Chapter03-48.jpg

如果要用寄存器指针访问一个字节、字或双字,必须保证指针中的位地址编号为0。指针常数#P5.0对应的二进制数为2#0000 0000 0000 0000 0000 0000 0010 1000。

【实例】 区内间接寻址的例子。

978-7-111-45066-5-Chapter03-49.jpg

【实例】 区域间间接寻址的例子。

978-7-111-45066-5-Chapter03-50.jpg

P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0中已经包含有区域信息,使用间接寻址的指令T W[AR1,P#50]中没有必要再用地址标识符M。

4.地址寄存器的装入与传送指令

可以不经过累加器1,与地址寄存器AR1和AR2交换数据。

【实例】 应用地址寄存器AR1和AR2的实例。

978-7-111-45066-5-Chapter03-51.jpg

5.比较指令

表3-9所示为比较指令,表中“?”可以是“==”,“<>”,“>”,“<”“>=”,“<=”。(www.xing528.com)

表3-9 比较指令

978-7-111-45066-5-Chapter03-52.jpg

用于比较累加器1与累加器2中的数据大小,被比较的两个数的数据类型应该相同。如果比较的条件满足,则RLO为1,否则为0。状态字中的CC0和CC1位用来表示两个数的大于、小于和等于关系(见表3-10)。

表3-10 指令执行后的CC1和CC0

978-7-111-45066-5-Chapter03-53.jpg

【实例】 比较两个浮点数的例子。

978-7-111-45066-5-Chapter03-54.jpg

6.数据转换指令

表3-11所示为数据转换指令,其中3位BCD码和7位BCD码的格式如图3-36所示。

表3-11 数据转换指令

978-7-111-45066-5-Chapter03-55.jpg

978-7-111-45066-5-Chapter03-56.jpg

图3-36 BCD码格式

7.取反与求补指令

表3-12所示为取反与求补指令。

表3-12 取反与求补指令

978-7-111-45066-5-Chapter03-57.jpg

8.数学运算指令

表3-13所示为整数数学运算指令,表3-14为浮点数数学运算。图3-37所示为数学运算的累加器变化。需要注意的是,语句表中“I”指令的运算结果为32位整数,梯形图中MUL_I指令的运算结果为16位整数。

表3-13 整数数学运算指令

978-7-111-45066-5-Chapter03-58.jpg

(续)

978-7-111-45066-5-Chapter03-59.jpg

表3-14 浮点数数学指令

978-7-111-45066-5-Chapter03-60.jpg

9.移位与循环移位指令

表3-15所示为移位指令,它对累加器1中的数操作,结果在累加器1中。需要注意的是:用指令中的参数<number>来指定移位位数,16位移位指令为0~15,32位移位指令为0~3。如果<number>等于0,移位指令被当做NOP(空操作)指令来处理;如果指令没有参数<number>,移位位数放在累加器2的最低字节中(0~255),而如果移位位数等于0,移位指令被当做NOP(空操作)指令来处理。一旦有符号字的移位位数>16时,移位后被移位的数的各位全部变成了符号位。

978-7-111-45066-5-Chapter03-61.jpg

图3-37 数学运算的累加器变化

表3-15 移位指令

978-7-111-45066-5-Chapter03-62.jpg

10.其他指令

逻辑运算指令如AW、OW、XOW、AD、OD、XOD分别表示字与、字或、字异或、双字与、双字或、双字异或。还有累加器指令、逻辑控制指令、程序控制指令、数据块指令请参考西门子说明书与本书附赠光盘,此处不再赘述。

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

我要反馈