电工吧
◎ 电工吧 >> 设为首页 >> 加入收藏>> 联系方式 >> 投稿 >>留言 
网站首页 · 电工新闻 · 电工基础 · 电力技术 · 电子技术 · 电工图片 · 电工法规 · 电工图书 · 电工搜索 · 论坛交流
 
      最新电子论文
 · [DSP技术]我的学习经验―― 
 · 什么是单片机? 
 · 单片机基础知识(一) 
 · 单片机基础知识(二) 
 · [DSP技术]开始入门 DSP 注 
 · 做DSP最应该懂得157个问题 
 · [技术资料]高手5分钟可以学 
 · 单片机入门的几点建议 
      推荐电子论文

 · [DSP技术]开始入门 DSP 注意事
 · C编译器错误信息中文翻译
 · 51单片机C语言学习
 · 单片机教学 第二十课
 · MCS-51单片机实用子程序库(一
 · PIC单片机的C语言使用(一)

  ■ 所在位置:首页>>电子技术>>单片机学习>>正文
 

单片机指令(三)

  这有什么意义呢?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 (30H)<=12
MOV 31H,#23 (30H)<=23
PUSH 30H 将30H单元的内容(即12)压入堆栈
PUSH 31H 将31H单元的内容(即23)压入堆栈
POP 30H 将堆栈顶的内容(即23)弹出到30H单元内
POP 31H 将堆栈顶的内容(即12)弹出到31H单元内

  结果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反,才能保证数据被送回原位,否则就要出错了。

本新闻共2页,当前在第2页  [1]  [2]  

 
         相关文章

·
·
·
·
·
·

 
 
  关于本站 | 友情站点 | 联系方式 | 版权声明 | 电工技术服务与支持中心
Copyright© 2005-2006 Dg8.Com.CN ,All Rights Reserved
电工网 电工吧 电子吧