您的位置 首页 数字

单片机仓库操作指令的用法介绍

单片机堆栈操作指令的用法介绍-第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。

仓库操作指令有两条:

PUSH direct

POP direct

第一条指令称之为推入,便是将direct中的内容送入仓库中,第二条指令称之为弹出,便是将仓库中的内容送回到direct中。推入指令的履行进程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例:

MOV SP,#5FH

MOV A,#100

MOV B,#20

PUSH ACC

PUSH B

则履行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因而履行完本条指令后, 内存60H单元的值便是100,相同,履行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即履行完本条指令后,61H单元中的值变为20。


 

POP指令的在单片机中履行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后边的那个direct中,然后SP减1。

接上例:

POP B

POP ACC

则履行进程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以履行完本条指令后B中的值是20,然后将SP减1,因而本条指令履行完后,SP的值变为60H,然后履行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以履行完本条指令后,ACC中的值是100。

这有什么含义呢?ACC中的值原本便是100,B中的值原本便是20,是的,在本例中,确实没有含义,但在实践工作中,则在PUSH B后一般要履行其他指令,并且这些指令会把A中的值,B中的值改掉,所以在程序的完毕,假如咱们要把A和B中的值康复原值,那么这些指令就有含义了。

还有一个问题,假如我不必仓库,比如说在PUSH ACC指令处用MOV 60H,A,在PUSH B处用指令MOV 61H,B,然后用MOV A,60H,MOV B,61H来代替两条POP指令,不是也相同吗?是的,从成果上看是相同的,可是从进程看是不相同的,PUSH和POP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令。更何况,仓库的效果不止于此,所以一般的计算机上都设有仓库,单片机也是相同,而咱们在编写子程序,需求保存数据时,常常也不选用后边的方法,而是用仓库的方法来完成。

例:写出以下单片机程序的运转成果

MOV 30H,#12

MOV 31H,#23

PUSH 30H

PUSH 31H

POP 30H

POP 31H

成果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例程能看出:运用仓库时,入栈的书写次第和出栈的书写次第有必要相反,才干确保数据被送回原位,否则就要出错了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/345541.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部