首页 理论教育 指令系统表示形式的优化

指令系统表示形式的优化

时间:2023-07-02 理论教育 版权反馈
【摘要】:一般功能指令都是以指定的功能号来表示,如FNC45。为了便于记忆,每个功指令都有一个助记符,对应FNC45的助记符是MEAN,表示“求平均值”。处理32位数据的指令是在助记符前加D标志,无此标志即为处理16位数据的指令。几乎所有寄存器的二进制位数都是16位,所以功能指令中16位的数据都是以缺省形式给出。图4-3 16位MOV指令2)功能指令中的32位数据。

指令系统表示形式的优化

1.应用指令的基本格式

功能指令同一般的汇编指令相似,也是由操作码和操作数两大部分组成。用功能框表示功能指令,即在功能框中用通用的助记符形式来表示,如图4-1所示。该图中X0常开触点是功能指令的执行条件,其后的方框即为功能指令。

一般功能指令都是以指定的功能号来表示,如FNC45。为了便于记忆,每个功指令都有一个助记符,对应FNC45的助记符是MEAN,表示“求平均值”。这样就能见名知义,比较直观。在编程器或FXGP软件中输入功能指令时,输入的是功能号FNC45,显示的却是助记符MEAN。不过,在FXGP软件中也可直接输入助记符MEAN。

(1)操作码部分

功能框第一段为操作码部分,表达了该指令做什么。

(2)操作数部分

功能框的第一段之后都为操作数部分,表达了参加指令操作的操作数在哪里。

操作数部分组成:

源操作数(源)目标操作数(目)数据个数

图4-1中源操作数为D0、D1、D2,目标操作数为D4Z0(Z0为变址寄存器),K3表示有3个数,当X0接通时,执行的操作为[(D0)+(D1)+(D2)]÷3→(D4Z0),如果Z0的内容为20,则运算结果送入D24中,当X0断开时,此指令不执行。

操作数排列次序:源在前,目在后,数据个数在最后,有些功能指令还要求多个操作数,也有的功能指令不需要操作数。

有的应用指令没有操作数,而大多数应用指令有1~4个操作数。图4-1所示为一个计算平均值指令,它有三个操作数,[S.]表示源操作数,[D.]表示目标操作数,如果使用变址功能,则可表示为[S.]和[D.]。源或目标不止一个时,用[S1.]、[S2.]、[D1.]、[D2.]表示。用n和m表示其他操作数,它们常用来表示常数K和H,或作为源和目标操作数的补充说明,当这样的操作数多时可用n1、n2和m1、m2等来表示。

978-7-111-38047-4-Chapter04-1.jpg

图4-1 应用指令表示格式

2.应用指令的执行方式与数据长度

(1)连续执行与脉冲执行

应用指令有连续执行和脉冲执行两种类型。如图4-2所示,指令助记符MOV后面有P则表示脉冲执行,即该指令只在X1接通(由OFF到ON)时执行(将D10中的数据送到D12中)一次;如果没有P则表示连续执行,即该在X1接通(ON)的每一个扫描周期指令都要被执行

978-7-111-38047-4-Chapter04-2.jpg

图4-2 功能指令的执行方式与数据长度的表示

(2)数据长度

应用指令可处理16位数据或32位数据。处理32位数据的指令是在助记符前加D标志,无此标志即为处理16位数据的指令。

1)功能指令中的16位数据。几乎所有寄存器的二进制位数都是16位,所以功能指令中16位的数据都是以缺省形式给出。图4-3所示为一条16位MOV指令。

MOV指令的含义是,当X000接通时,将十进制数100传送到16位的数据寄存器D10中去;当X000断开时,该指令被跳过不执行,源和目的内容都不变。

978-7-111-38047-4-Chapter04-3.jpg

图4-3 16位MOV指令

2)功能指令中的32位数据。功能指令也能处理32位数据,这时需要指令前缀符号(D)。图4-4所示为一条32位MOV指令。

978-7-111-38047-4-Chapter04-4.jpg

图4-4 32位MOV指令

978-7-111-38047-4-Chapter04-5.jpg

图4-5 错误32位MOV指令

凡是能前缀显式符号(D)的功能指令,就能处理32位数据。32位数据是由两个相邻寄存器构成的,但在指令中写出的是低位地址,源和目的都是这样表达的。所以对图4-4所示32位MOV指令含义应该这样来理解:当X000接通时,将由D11和D10组成的32位的源的数据传送到由D13和D12组成的目标地址中去。要避免出现类似的图4-5所示指令的错误:源由D11和D10组成,而目则由D12和D11组成,这里D11是源、目的重复使用,就会引起出错。所以建议32位数据首地址用偶地址。

注意:32位计数器C200~C255不能作为16位指令操作数。

3.应用指令的数据格式

X、Y、M、S等只处理ON/OFF信息的软元件为位元件;而T、C、D等处理数值的软元件则称为字元件,一个字元件由16位二进制数组成。位元件与字元件如表4-1所示。(www.xing528.com)

表4-1 位元件与字元件

978-7-111-38047-4-Chapter04-6.jpg

(1)功能指令中的字元件

一个字元件由16位的存储单元构成,最高位(第15位)为符号位,第0~14位为数值位。图4-6所示为16位数据寄存器D0图示。

978-7-111-38047-4-Chapter04-7.jpg

图4-6 字元件

可以使用两个字元件组成双字元件,以组成32位数据操作数。双字元件是由相邻的寄存器组成,在图4-7中由D11和D10组成。低16位数据存放在低位元件D11中,高16位数据存放在高位元件D11中,存放原则是:低对低,高对高。双字元件中第31位为符号位,第0~30位为数值位。

978-7-111-38047-4-Chapter04-8.jpg

图4-7 双字元件

注意:在指令中使用双字元件时,一般只用其低位地址表示这个元件,但高位元件也将同时被指令使用。建议用偶数作为双字元件的地址。

(2)功能指令中的位元件

位元件只有ON或OFF两种状态,是用一个二进制位就能表达的元件,如X、Y、M、S等。功能指令中也能使用由只含一个位的位元件,以及位元件组合。位元件组合成组合元件的方法:将多个位元件按四位一组的原则来组合,也就是说用4位BCD码来表示1位十进制数,这样就能在程序中使用十进制数据了。组合方法的助记符是Kn+最低位位元件号,如Kn X、Kn Y、Kn M即是位元件组合,其中K表示后面跟的是十进制数,n表示四位一组的组数,16位数据:K1~K4,32位数据:K1~K8。

数据中的最高位是符号位。如K2M0由M0~M3和M4~M7两组的位元件组成一个8位数据,其中M7是最高位,M0是最低位;K4M10由M10~M25的四组位元件组成一个16位数据,其中M25是最高位,M10是最低位。

注意:

1)当一个16位数据传送到目标元件K1M0~K3M0时,由于目标元件不到16位,所以将只传送16位数据中的低位数据,高位数据将不传送。32位数据传送也一样。

978-7-111-38047-4-Chapter04-9.jpg

图4-8 源的数据不足16位

2)由于数据只能是16位或32位这两种格式,因此当用K1~K3组成字时,其高位不足16位部分均作0处理。如执行图4-8所示指令时,源的数据只有12位,而目标寄存器D20是16位的,传送结果D20的高4位自动添0,如图4-9所示。这时最高位的符号位必然是0,也就是说,只能是正数(符号位的判别是:正0负1)。

978-7-111-38047-4-Chapter04-10.jpg

图4-9 目高4位自动添0

3)由位元件组成组合位元件时,最低位元件号可以任意给定,如X000、X001和Y005均可。但习惯上采用以0结尾的位元件,如X000、X010和Y020等。

4.变址操作

FX2N的16个变址寄存器V和Z都是16位的(FX0N和FX0S只有两个变址寄存器V和Z),即V0~V7、Z0~Z7。除了能作为通用数据寄存器之外,主要用于运算操作数地址的修改,在传送、比较等指令中用来改变操作对象的元件地址,循环程序中也常使用变址寄存器。变址方法是将V、Z放在各种寄存器的后面,充当操作数地址的偏移量。操作数的实际地址就是寄存器的当前值和V或Z中的内容相加的值。

源的或目的寄存器用[S.]或[D.]表示时,就能进行变址操作。当进行32位数据操作时,V、Z自动组对成32位(V、Z)来使用,这时Z为低16位,而V充当高16位。可以用变址寄存器进行变址的软元件是X、Y、M、S、P、T、C、D、K、H、Kn X、Kn Y、Kn M、Kn S。

例如,求图4-10所示的梯形图中,执行加法操作后,源和目的操作数的实际地址。

978-7-111-38047-4-Chapter04-11.jpg

图4-10 变址操作示例

第一行指令执行10→V,第二行指令执行20→Z,所以变址寄存器的值为,V=10,Z=20,第三行指令执行(D5V)+(D15Z)→(D40Z)。

[S1.]为D5V:D(5+10)=D15源操作数1的实际地址

[S2.]为D15Z:D(15+20)=D35源操作数2的实际地址

[D.]为D40Z:D(40+20)=D60目的操作数的实际地址

所以,第三行指令实际执行:

(D15)+(D35)→(D60),即D15的内容和D35的内容相加,结果送入D60中去。

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

我要反馈