单片机原理及应用李建忠课件第3章.ppt_第1页
单片机原理及应用李建忠课件第3章.ppt_第2页
单片机原理及应用李建忠课件第3章.ppt_第3页
单片机原理及应用李建忠课件第3章.ppt_第4页
单片机原理及应用李建忠课件第3章.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 MCS-51单片机指令系统 和汇编语言程序示例,3.1 MCS-51单片机指令系统概述 3.2 寻址方式 3.3 数据传送类指令 3.4 算术运算类指令 3.5 逻辑运算及移位指令 3.6 控制转移类指令 3.7 子程序调用与返回指令 3.8 位操作类指令 3.9 汇编程序格式与伪指令 3.10 汇编程序设计示例,3.1 MCS-51单片机指令系统概述, 指令、指令系统的概念 指令:计算机内部执行的一种操作,提供给用户编程使用的一种命令。 指令系统:计算机能够执行的全部操作所对应的指令集合。, 指令的三种属性 功能属性:每条指令都对应一个特定的操作功能; 时间属性:一条指令执行所用的时

2、间; 空间属性:一条指令在程序存储器中存储所占用的字节数。, MCS-51单片机指令系统及其指令格式 功能: 数据传送、算术操作、逻辑操作、程序转移、位操作等五大类; 空间属性: 单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条)。 时间属性: 单机器周期指令(64条)、双机器周期指令(45条)和只有乘、除法两条4个机器周期的指令。,结构:操作码+操作数。 操作码:表示计算机执行该指令将进行何种操作。 操作数:表示参加操作的数的本身或操作数所在的地址。 (无操作数、单操作数、双操作数),指令格式: 标号: 操作码助记符 目的操作数,源操作数 ;注释, 描述指令的一些符号

3、的约定意义的说明: Ri和Rn:表示当前工作寄存器区中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。 #data:表示包含在指令中的8位立即数。 #data16:表示包含在指令中的16位立即数。 rel:以补码形式表示的8位相对偏移量,范围为-128127,主要用在相对寻址的指令中。, addr16和addr11:分别表示16位直接地址和11位直接地址。 direct:表示直接寻址的地址。 bit:表示可位寻址的直接位地址。 (X):表示X单元中的内容。 (X):表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。 / 和符号:“/”表示

4、对该位操作数取反,但不影响该位的原值。“”表示操作流程,将箭尾一方的内容送入箭头所指另一方的单元中去。,3.2 寻 址 方 式,寻址方式:CPU执行一条指令时怎样找到该指令所要求的操作数的方式。, 立即寻址 寄存器寻址 寄存器间接寻址 直接寻址 变址寻址 相对寻址 位寻址, 立即寻址 操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找。 * 在一个数的前面冠以#符号作前缀。, 寄存器寻址 在指令选定的某寄存器中存放或读取操作数,以完成指令规定的操作。 * ACC,DPTR,AB,Rn,Cy, 寄存器间接寻址

5、由指令指出某一寄存器的内容作为操作数地址的寻址方法。 * 寄存器中的内容不是操作数本身,而是操作数的地址,到该地址单元中才能得到操作数。 * Ri,DPTR * 可寻址内部RAM(Ri)和外部数据存储器(Ri,DPTR),图3.1 寄存器间接寻址示意图, 直接寻址 指令中直接给出操作数所在的存储器地址供存取数。 * 直接寻址可用于访问片内数据存储器(低128字节)、SFR。, 变址寻址,基址寄存器加变址寄存器两者内容的和作为程序存储器地址,再寻址该单元,读取数据。 *以数据指针寄存器DPTR或PC作为基址寄存器,累加器A作为变址寄存器(DPTR+A, PC+A)。 * 常用于访问程序存储器中的

6、常数表。,图3.2 变址寻址示意图, 相对寻址 以当前程序计数器PC值加上指令中给出的偏移量rel,而构成实际操作数地址。 * 用于访问程序存储器,常出现在相对转移指令中。 * 当前PC值指相对转移指令的存储地址加上该指令的字节数。 * 偏移量rel是有符号的单字节数,以补码表示,范围是-128+127。转移的地址(目的地址)为: 目的地址=当前PC值+rel = 指令存储地址+指令字节数+rel, 位寻址 在位操作指令中直接给出位操作数的地址。 * 片内RAM中的128位和特殊功能寄存器SFR中的93位。,3.3 数据传送类指令, 访问片内数据存储器的一般数据传送指令 功能:实现数在片内RA

7、M单元之间、寄存器之间、寄存器与RAM单元之间的传送。 格式: MOV ,;目的操作数单元源 操作数(或单元),图3.3 访问片内RAM的一般传送指令操作关系图,表3.1 访问片内RAM的一般传送指令表, 片内特殊传送指令 堆栈操作指令,* 机器码分别为:C0 direct 和 D0 direct。, 数据交换指令, 片外数据存储器数据传送指令 指令助记符 操作功能注释 机器码(H) MOVX A,DPTR ; (A)(DPTR) E6 MOVX A,Ri ; (A)(Ri) E2、E3 MOVX DPTR ,A ; (DPTR)(A) F0 MOVX Ri,A ; (Ri)(A) F2、F3

8、 * 对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。, 访问程序存储器的数据传送指令 指令助记符 操作功能注释 机器码(H) MOVC A, A+DPTR ;(A)(A)+(DPTR) 93 MOVC A, A+PC ;(PC)(PC)+1,(A)(A)+(PC) 83,* 访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式。 *前一条指令采用DPTR作基址寄存器,数据表格可以存放在程序存储器64 KB地址范围的任何地方。 *后一条指令以PC作为基址寄存器,查表范围只能在256个字节范围内。编程时需要进行偏

9、移量的计算,即MOVC A,A+PC指令所在地址与表格存放首地址间的距离字节数的计算,并需要一条加法指令进行地址调整。偏移量计算公式为: 偏移量 = 表首地址-(MOVC指令所在地址+1),3.4 算术运算类指令,算术操作类指令共24条,包括加法、带进位加法、带减位减法、加1、减1、乘除及十进制调整指令。 * 算术运算结果影响标志位Cy、AC、OV 、P。,表3.2 加减法指令表, 加、减法指令,图3.4 加减法指令形式结构图 (a) 加减法指令关系图;(b) 加1、减1指令关系图, 十进制调整指令,* 若AC=1,CY=1同时发生,或者高4位虽等于9但低4位修正后有进位,则A应加66H修正。

10、 *十进制调整指令是一条对二-十进制的加法进行调整的指令。两个压缩BCD码按二进制相加,必须在加法指令ADD、ADDC后,经过本指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。 * DA指令不能对减法进行十进制调整。做减法运算时,可采用十进制补码相加,然后用 DA A指令进行调整。 机内十进制补码可采用:x补 = 9AH -x。, 乘、除法指令,MUL AB;,(B)(A)(B)158(A)(A)(B)70 CY0,机器码:A4H,* 乘数放在累加器A和寄存器B中,乘积16位数中的低8位存放在A中,高8位存放在B中。 * 若乘积大于FFH(255),OV置1,否则OV清零。 *

11、 乘法指令执行后CY总是零。,2除法指令,* 被除数放在累加器A,除数放在寄存器B中,商存于累加器A中,余数存于寄存器B中。 * 进位标志位CY和溢出标志位OV均被清零。 * 若B中的内容为0,OV被置1,CY仍为0。,3.5 逻辑运算及移位指令,表3.3 逻辑操作指令表,表3.3 逻辑操作指令表,图3.5 逻辑指令形式结构图,与加、减法指令寻址方式相同的逻辑指令; (b) 与加、减法指令寻址方式不同的逻辑指令,* 逻辑“或”指令常用来使字节中某些位置“1”,其它位保持不变。则欲置位的位用1与该位相或,保留不变的位用0 与该位相或。,* 逻辑异或指令常用来使字节中某些位进行取反操作,其它位保持

12、不变。欲某位取反该位与1相异或;欲某位保留则该位与0 相异或。还可利用异或指令对某单元自身异或,以实现清零操作。,* 用移位指令还可以实现算术运算,左移一位相当于原内容乘以2,右移一位相当于原内容除以2,但这种运算关系只对某些数成立。,3.6 控制转移类指令,控制转移类指令共17条,分为无条件转移指令、条件转移指令、子程序调用及返回指令。,3.6 控制转移类指令, 无条件转移指令,表3.4 无条件转移指令,1LJMP(长转指令) LJMP addr16 * 执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响标志位。 * 可以使程序从当前地址转移到64 KB程序存储器地址空间的

13、任意地址。 * 执行时间长,字节多。,2AJMP(绝对转移指令) AJMP addr11 * AJMP的机器码组成:,* 程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址。,转移目的地址(PC),PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0,* 程序可转移的位置和PC当前值在同一2 KB范围内。转移可以向前也可以向后,指令执行后不影响状态标志位。 例:1、若AJMP指令地址(PC)=2300H。执行指令AJMP 0FF

14、H后,转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。2、AJMP指令地址(PC)=2FFFH。执行指令AJMP 0FFH后,结果为:转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。 * 若addr11相同,AJMP指令的机器码相同,转移的目的地址却可能不同。,3SJMP(相对短转指令) SJMP rel * rel用8位带符号数补码表示,转移范围是:相对PC当前值向前转128字节,向后转127字节。 转移目的地址= SJMP指令所在地址+2+rel * 手工汇编时,rel的计算公式: 向前转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值

15、) 向后转移:rel=FEH-(SJMP指令地址与目的地址差的绝对值)-2 * SJMP $(80 FEH) 造成单指令的无限循环,进入等待状态。,4JMP A+DPTR(相对长转移指令) * 数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64 KB范围内无条件转移。 * 转移地址可以在程序运行中加以改变。, 条件转移指令 共有8条指令,分为累加器判零条件转移指令、比较条件转移指令和减1条件转移指令三类。,* 当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。 * 转移的条件可以是前面指令的执行结果(标志位),也可以是条件转移指令本身包含的某种运算结果。 *

16、指令采用相对寻址,程序可在以当前PC值为中心的-128+127范围内转移。,表3.5 条件转移指令,1判零条件转移指令 以累加器A的内容是否为0作为转移的条件。 JZ指令:为0转移,不为0则顺序执行; JNZ指令:不为0转移,为0则顺序执行。 累加器A的内容由这条指令以前的指令执行的结果决定。 指令不作任何运算,也不影响标志位。,2比较转移指令 * 先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。若两个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。 * 比较是进行一次减法运算,但其差值不保存,两个数的原值不受影响,标志位要受到影响。利用标志位CY作进一步的判断,可实

17、现三分支转移。,3减1条件转移指令 * 第一操作数减1,结果仍保存在第一操作数中,然后判断是否为零。若不为零,则转移到指定的地址单元,否则顺序执行。 * 对于构成循环程序是十分有用的,可以指定任何一个工作寄存器或者内部RAM单元作为循环计数器。,3.7 子程序调用与返回指令, 子程序调用指令 子程序调用指令有长调用和绝对调用两条,它们都是双周期指令。,* LCALL和ACALL指令类似于转移指令LJMP和AJMP,不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后,才将子程序入口地址addr16(或addr11)送PC,实现转移。 * LCALL可调用64 KB范围内的子程序。该

18、指令为3字节,所以执行该指令时首先应执行(PC)(PC)+3,获得下一条指令地址,并把此时的PC内容压入堆栈(先压入低字节,后压入高字节)作为返回地址,堆栈指针SP加2指向栈顶,然后把目的地址addr16送入PC。 * 指令执行不影响标志位。,* ACALL与AJMP一样提供11位地址,只能调用与PC在同一2 KB范围内的子程序。指令为2字节指令,执行该指令时应执行(PC)(PC)+2以获得下一条指令地址,并把该地址压入堆栈作为返回地址。 * 机器码的组成如下:,* 被调用子程序的目的地址由执行 ACALL指令的当前PC值的高5位与指令中提供的11位直接地址形成。, 返回指令,* RET指令必

19、须作子程序的最后一条指令;RETI必须作中断服务程序的最后一条指令。 * RETI指令除恢复断点地址外,还恢复CPU响应中断时硬件自动保护的现场信息。执行RETI指令后,将清除中断响应时所置位的优先级状态触发器,使得已申请的同级或低级中断申请可以响应;而RET指令只能恢复返回地址。, 空操作指令 NOP ;(PC)(PC)+1 * 在设计延时程序、拼凑精确延时时间及在程序等待或修改程序等场合是很有用的。,3.8 位操作类指令,位地址的表示方法: 直接位地址表示,如D5H。 点表示,如PSW.5。 位名称表示,如直接用F0表示。 用户定义名称表示,如用户定义用FLG代替F0。,表3.6 条件转移

20、指令,图3.6 硬件逻辑电路图,3.9 伪指令,伪指令能够帮助进行汇编,不产生目标程序,不影响程序的执行。 主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。, 设置目标程序起始地址伪指令ORG 格式: 符号: ORG 地址(十六进制表示) 功能:放在一段源程序(主程序、子程序)或数据块的前面,规定后面的目标程序或数据块的起始地址。 ORG 2000H START:MOV A,#7FH * 一个源程序中,可以多次使用ORG指令来规定不同程序段的起始位置,但各程序段之间不能重叠。, 结束汇编伪指令END 格式: 符号: END

21、功能:汇编语言源程序的结束标志,表示汇编结束。 * 一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。 END前面若加标号,应与被结束程序段的起始点的标号一致,表示结束的是该程序段。, 定义字节伪指令DB 格式: 标号: DB 项或项表 功能:把项或项表的数据(字符串按字符顺序以ASCII码)存入从标号地址开始的连续存储单元中。 项或项表指一个字节数据,用逗号分开的字节数据串,或以引号括起来的字符串。,ORG 2000H TAB1: DB 30H,8AH,7FH,73 DB 5,A,BCD,(2000H)=30H (2001H)=8AH (2002H)=7FH (2003H)=49H ;十进制数73以十六进制数存放 (2004H)=35H ;35H是数字5的ASCII码 (2005H)=41H ;41H是字母A的ASCII码 (2006H)=42H ;42H是字符串BCD中B的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论