单片机编程指令MOV A,00H和MOV A,R0的执行周期,为什么前者是2个周期,后者是1个周期?求详细解释!

2024-11-22 06:46:58
推荐回答(5个)
回答1:

老兄你搞错了吧,都是一周期啊,如下图。其实假如不是一样也很正常啊,因为跟本不是一个指令,mov只是助记符,用来助记传送类的,但只要操作数和目的数的类型不一样,最后写进单片机里对应的操作码都是不一样的,就不是一个指令,下表中的这些mov都是不同的指令。即便同一个寄存器你用它的不同格式也不行

回答2:

没有什么为什么,厂家这么做的,你能怎么样呢,前者是多字节指令,后者是个单字节指令,
R0地内存地址可不一定在00H上,因为有当前使和的寄存器组的设置,R0可能在第二组、第三组或第四组上。

从寄存器里取数据应当就是会比从内存里取数据要快些,这个所谓的快就是表现在指令的周期长短上了,即使这个寄存器与这个内存地址是同一地址,操作方式不同也没有理由要求它们指令周期相同吧,指令的长短和周期是生产厂商预先定下的,你只要知道如何用有什么区别,不需要知道为什么,好比阿拉伯数字,为什么2写成这样,3写成了那样,问这个为什么就很没有意义了

回答3:

这是由单片机的硬件结构所决定的,单片机内部有一个叫ALU的算术逻辑运算单元,这是单片机最核心的硬件。从单片机的内部结构中可以看出,ALU与寄存器之间是可以直接进行数据传送的,这就决定了诸如MOV A,R0这类对寄存器操作的指令执行速度最快。而MOV A,00H虽然也指向寄存器区(对51单片机而言),但却是通过内部总线与ALU传送数据的,相对于MOV A,R0显然是绕道而行,指令的执行多1个周期也就顺理成章了。

回答4:

前者为立即寻址:其中取指周期需要一个T,执行周期需要一个T后者为寄存器寻址:因为执行周期中完成两个通用寄存器A,R0之间的数据传送,由于时间充足,执行周期一般只需一个T。(严格来说T为一个CPU周期,包含若干个时钟周期)

回答5:

设计师决定的