本帖最后由 慢慢思考 于 2018-4-27 08:59 编辑
51单片机为8位机,所以其机器指令最多只能有256条。每一条机器指令在芯片内对应着一套硬件实现电路以达到快速运行的目的。 汇编指令是依据机器指令而编制的计算机编程语言,但我们在指令表中可以看出它们并不是一一对应关系,所以有汇编指令111条而机器指令为255条的说法。如”MOV A,Rn”是一条汇编指令,但对应的就是8个Rn均有不同的机器指令也即其对应8条机器指令,这8条机器指令同样也是各自对应一套硬件电路。 因此,在机器指令表中查不到的动作,你想实现就得自己编程,用已有的机器指令运行多次后来实现。 不要认为助记符本身就是汇编语言中的命令,”MOV A,R0”写全了才是一条完整的命令,什么叫完整?这条语句的执行全部是芯片里的硬件实现,所以它只有一个时钟周期就执行完了,它独占着一个机器指令。 对于SETB bit位操作,在这里面,SETB是一条完整的命令,它对应着一条机器指令,所以它先执行这条机器指令,然后再去处理bit;我们再看SETB C,它也是位操作,但在这里就不能把SETB看作一条完整的指令,它与C合起来才是一条完整的指令,所以我们在指令表中看到它单独对应一条机器指令,执行周期是一个时钟周期,而SETB bit是两个时钟周期,这样设计的目的不说自明。 前面说过,八位机机器指令最多只能做到256条,所以我们看到有些类汇编指令可以对R0、R1进行操作而对其它Rn不能操作,就是这个数量限制的原因,包括上面例子中说的位操作未能都按SETB C的规格做成一条机器指令,也是同样的原因。 结论:所以学汇编一定要熟悉了解机器指令。 扩展指令是怎么扩展的,没研究过。16位机理论上可以做到更多,但是,因为16位而可能会影响速度。 以上所说仅供参考,我所看的书上没有细说,也不知对不对。 |