首页 理论教育单片机基础及应用-指令冗余技术

单片机基础及应用-指令冗余技术

【摘要】:MCS-51的所有指令均不超过3个字节,且多为单字节指令。为了使“乱飞”程序在程序区迅速纳入正轨,应在编程时多用单字节指令,并在关键的地方人为地插入一些单字节指令NOP,或将有效单字节指令重写,称之为指令冗余。需要注意的是,乱飞的PC必须指向程序运行区,并且必须执行到冗余指令才能使PC纳入正确轨道。

MCS-51的所有指令均不超过3个字节,且多为单字节指令。指令由操作码和操作数两部分组成,操作码指明CPU完成什么样的操作(如传送、算术运算、转移等),操作数是操作码的操作对象(如立即数、寄存器、存储器等)。单字节指令只有操作码,隐含操作数;双字节指令第一个字节是操作码,第二个字节是操作数;3字节指令第一个字节为操作码,后两个字节为操作数。CPU取指令的过程是先取操作码,后取操作数。某个数据是操作码还是操作数完全由取指令顺序决定。CPU复位后,首先取指令的操作码,尔后顺序取出操作数。当一条完整指令执行完后,紧接着取下条指令的操作码和操作数,这些操作时序完全由程序计数器PC控制。因此,一旦PC因干扰而出现错误,程序便脱离正常运行轨道“乱飞”,出现操作数数值改变以及将操作数当做操作码的错误。当程序“乱飞”到某个单字节指令上时,便自己自动纳入正轨;当“乱飞”到某个双字节指令上时,若恰恰在取指令时刻落到其操作数上,就会将操作数当做操作码,程序仍将出错;当程序“乱飞”到某个三字节指令上时,因为它们有两个操作数,误将操作数当做操作码的出错概率更大。

为了使“乱飞”程序在程序区迅速纳入正轨,应在编程时多用单字节指令,并在关键的地方人为地插入一些单字节指令NOP,或将有效单字节指令重写,称之为指令冗余。

1.NOP的使用

可在双字节指令和三字节指令之后插入两个单字节NOP指令,以保证其后的指令不被拆散。因为“乱飞”的程序即使落到操作数上,由于两个空操作指令NOP的存在,不会将其后的指令当做操作数执行,从而使程序纳入正轨。

对程序流向起决定作用的指令(如RET、ACALL、LJMP、JZ等)和某些对系统工作状态起重要作用的指令(如SETB EA等)之前插入两条NOP指令,可保证乱飞程序迅速纳入轨道,确保这些指令正确执行。(www.chuimin.cn)

2.重要指令冗余

对程序流向起决定作用的指令(如RET、ACALL、LJMP、JZ等)和某些对系统工作状态起重要作用的指令(如SETB EA等)的后面,可重复写上这些指令,以确保这些指令正确执行。

需要注意的是,乱飞的PC必须指向程序运行区,并且必须执行到冗余指令才能使PC纳入正确轨道。