单片机论坛—独特的51教程之三下.pdfVIP

  • 1
  • 0
  • 约4.52千字
  • 约 6页
  • 2018-05-30 发布于广东
  • 举报
不一样的51教程 之三 指令系统 与 寻址方式(下) 数据传送类指令的通用格式是: MOV 目的操作数,源操作数 源操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址 direct、间接地址和立即数; 目的操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址 direct和间接地址; [1]. 以累加器A为目的操作数类指令(4条) !--[if !supportLineBreakNewLine]-- !--[endif]-- [2]. 以寄存器Rn为目的操作数的指令(3条) [3]. 以直接地址为目的操作数的指令(5条) !--[if !supportLineBreakNewLine]-- !--[endif]-- [4]. 以间接地址为目的操作数的指令(3条) // 上边这四种,我认为你要搞清楚的问题是,数据可以从什么地方传送到 什么地方,以哪一种寻址方式——不要记名字,要理解内容——这句话我好像 重复了很多次,不好意思让你觉得厌烦了。 不过,我始终认为,指令系统就放在那,几张纸可以装完,是让人查 的,不是让人背的,但是你首先要理解它们可以干什么——有什么潜力,至于 怎么做,怎么写这条指令,这才是接下来要查的内容。 因为,如果你不知道能做什么——那么,就算你能把111条指令默下来 都是多余的。 !--[if !supportLineBreakNewLine]-- !--[endif]-- [5]. 查表指令(2条) MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址单元中的内容送 到累加器A中 MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格 地址单元中的内容送到累加器A中 !--[if !supportLineBreakNewLine]-- !--[endif]-- 所谓查表这个东西,要弄清楚两个问题: 1 表在那里?在ROM里还是RAM里,分别用哪一句? 2 查表其实是什么? 如果你懂的C语言或者别的任何编程语言,请把这个跟数组联系起来 考虑。数组是一个很特别的计数方式,它可以把一连串没什么规律的数据按照 一个顺序存储(这个顺序就是下标),这样就可以很方便地在循环中完成遍 历。 比如数码管段码值的查询。 [6]. 累加器A与片外数据存储器RAM传送指令(4条) 关于这一点,归入前面四类。 [7]. 堆栈操作类指令(2条) 关于这一部分,因为我以前用汇编没写过大程序,所以其实我从来没有 用过…… 而用C语言的话,这一部分是不用我管的。 我看了看刚才介绍的内容,做了一个简单总结: 首先理解什么叫 堆栈。 堆栈首先是在RAM里的一个连续区域,它的用途是在程序进入中断或者 子程序以前存储诸如A B C等重要存储器内容。 堆栈的操作有一个特点,就是以一个地址开始,然后每次存入一个内容 (这个动作叫 压栈,英语和指令叫 PUSH。)地址值向后推,这里有个术语, 叫 生长方向,所谓生长是以树来比喻,存储地址是越来越大的,所以叫 向上 生长。 对应于 压栈,还有 弹栈,所谓弹栈,就是把先前存储过的数据传送回 原来的地方。弹

文档评论(0)

1亿VIP精品文档

相关文档