单片机的指令系统.ppt_第1页
单片机的指令系统.ppt_第2页
单片机的指令系统.ppt_第3页
单片机的指令系统.ppt_第4页
单片机的指令系统.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

第三章,单片机的指令系统与汇编语言程序设计 3.1 MCS-51指令系统与寻址方式 3.2 汇编语言程序设计 3.3 汇编程序设计与调试,3.1 MCS-51指令系统与寻址方式,指令的基本概念 单片机指令与分类 51单片机的寻址方式 不同空间的数据传输方法 作业题 P55-1、2,1 指令的基本概念,指令 是计算机能够识别的二进制数代码,指令系统的好坏决定计算机的性能和灵活性。 指令集 计算机能够识别的指令的集合,指令的组成,指令由操作码和操作对象组成。操作码指明执行什么操作,如数据传送、加、减运算等 操作对象可以是一个数,或者是一个数所在的内存地址。 51指令有单字节指令、双字节指令和三字节指令。单字节指令和双字节指令的操作对象隐含在操作码之中。 例如:MOV A, #0AH 740A 操作码MOV 和A 合并在一字节中 74H,2 单片机指令与分类,51系列单片机采用8位二进制数作为操作码,最多可有256种操作码 实际有111条指令,7 种寻址方式 42种助记符,说明33种操作功能 这些指令可分为四大类: 1数据传送指令; 2算术运算与逻辑运算指令; 3控制转移指令; 4位操作指令.,指令和助记符,为了容易记忆这些符号一般采用英文单词的缩写构成,这些符号称为指令助记符;由这些助记符描述的计算机语言称为汇编语言。 指令有指令代码和操作对象构成。 例:指令代码 助记符 操作对象 功能 740A MOV A,#0AH 将十六进制数0AH放 入累加器A中,3 寻址方式,寻址方式是计算机寻找操作数的具体办法。 51系列单片机有7种寻址方式: 源操作数 目的操作数,1立即寻址 2 直接寻址 3寄存器寻址 4 寄存器间接寻址 5 变址寻址 6 相对寻址 7 位寻址,.1立即寻址,指令中直接给出操作数的寻址方式。立即操 作数用前面加有#号的8位或16位数来表示。 例: MOV A,# 30H ;A#30H MOV DPTR,# 3400H; DPTR#3400H,立即寻址演示,30H 31H 32H 33H 34H 35H,累加器A,MOV A 30H,源地址寄存器,指令寄存器,PC ,74H,Z总线,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.2直接寻址,指令中直接给出操作数地址的寻址方式, 能进行直接寻址的存储空间有SFR寄存器和内 部数据RAM。 例: MOV PSW,# 20H ;PSW#20H MOV A,30H ;A(30H),直接寻址演示,30H 31H 32H 33H 34H 35H,累加器A,MOV A 30H,源地址寄存器,指令寄存器,PC ,74H,Z总线,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.3寄存器寻址,以通用寄存器的内容为操作数的寻址方式。 寄存器包括:通用寄存器R0R7和特殊功能寄存器A、B 、DPTR等。 例: MOV A, R0 ;A ( R0 ),.4寄存器间接寻址,以寄存器中内容为地址的寻址方式。间接寻址的存储空间包括内部数据RAM和外部数据RAM。 能用于寄存器间接寻址的寄存器有R0,R1和DPTR。 表示方式 是在寄存器名称前面加一个符号。 例: MOV A , R0 ;A (R0) MOVX DPTR,A ;外部RAM(DPTR)A,.5 变址寻址,变址寻址是以某个寄存器的内容为基本地址,加上偏移量作为操作数地址的寻址方式。 例: MOVC A, A+DPTR ;A(A+DPTR) MOVC A, A+PC ;A(A+PC),这些指令的用途主要是查表,寄存器存放表首地址,A存放偏移量,程序存储器,DPTR,0211H,11H,A,+,MOVC A, A+DPTR 操作示意图,变址寻址举例,0200H,0211H,0200H,11H,地址寄存器,1EH,0200H,.6 相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例: SJMP 08H ;PCPC+2+08H,SJMP 08H 操作示意图,相对寻址举例,.7 位寻址,位寻址是可位寻址单元的位操作。位寻址其实是一种直接寻址方式,不过其 操作对象是指定的1位。 例: SETB 10H ;将10H位置1 MOV 32H,C ;32H进位位C CLR PSW.4 ;将RS1位清0,操作数寻址方式总结,助记符 说明 MOV、MOVX、MOVC 传送操作 XCH、XCHD、SWAP 交换操作 PUSH、POP 堆栈操作,4 数据传送类指令,数据传送指令有以下三种类型,MOVX 片外RAM空间 MOVC ROM空间 其他片内RAM空间,单片机片内传送图,1 以累加器为目的操作数的指令(4条),MOV A,Rn MOV A,direct MOV A,Ri MOV A,#data 这组指令功能将源操作数指定内容送到A中。,.1,.2,MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。,2 以寄存器Rn为目的操作数的指令(3条),3 以直接地址为目的操作数的指令(5条),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。,.3,4 以间接地址为目的操作数的指令(3条),MOV Ri,A MOV Ri,direct MOV Ri,#data 功能:把源操作数指定的内容送入以R0或R1中内容为地址的片内存储单元。,.4,5 十六位数的传递指令(1条),MOV DPTR,#data16 这是唯一的一条16位立即数传递指令。 功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H 执行完了之后DPH中的值为12H,DPL中的值为34H。 如果我们分别向DPH,DPL送数,则结果也一样。 如下面两条指令: MOV DPH,#35H MOV DPL,#12H。 相当于执行了 MOV DPTR,#3512H。,.5,程序举例:把片内RAM中地址为30H3FH的字节单元 内容复制到地址为60H6FH的字节单元中去。 程序如下: COPY:MOV R0,#30H MOV R1,#60H MOV R2,#10H LP1: MOV A,R0 MOV R1, A INC R0 INC R1 DJNZ R2, LP1 RET,采用了间址寻址,6 A与片外RAM间的数据传递类指令(4条),MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A 说明: 1 与外部RAM存储器打交道的只可以是累加器A 。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。 内部RAM间可以直接进行数据的传递,而外部则不行。,.6 片外RAM操作,2.要读或写外部RAM,必须要知道RAM的地址,采用DPTR时,地址被直接放在DPTR中的。采用Ri(R0或R1)时,由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。 3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。,.6续,将外部RAM中100H单元中的内容送入外部200H单元中。,例:这段程序做了什么事?左右两块等价吗? MOV DPTR,#0100H MOV P2,#01H MOVX A,DPTR MOV R0,#00H MOV DPTR,#0200H MOVX A,R0 MOVX DPTR,A MOV P2,#02H MOVX R0,A,举例: 1、读入片外RAM中0080H地址单元的内容 2、向端口号为8FFEH的端口写入0,或:MOV P2,#00H MOV R0, #80H MOVX A, R0,MOV DPTR,#80H MOVX A, DPTR,MOV A, #0 MOV DPTR,8FFEH MOVX DPTR, A,7 读程序存储器指令(2条),MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中,也被称为查表指令,常用此指令来查一个已做好在ROM中的表格 例:如果R0=3程序执行后累加器A的值是多少? MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100H DB 0,1,4,9,16,25,.7 ROM操作,有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5),8 堆栈操作(2条),PUSH direct POP direct (不能为Rn) 第一条为压入指令,将direct中的内容送入堆栈中, 第二条为弹出指令,将堆栈中的内容送回到direct中。 例: MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 执行第一条PUSH 40H指令是这样的:将SP中的值加1,变为11H,然后将40H中的值送到11H单元中,因此执行完本条指令后,内存11H单元的值是50H,同样,执行POP 30H时,是将11H中的值送入到30H单元中,即执行完本条指令后,30H单元中的值变为50H。,.8 堆栈操作,9 交换指令(5条),XCH A,Rn XCH A, direct XCH A, Ri XCHD A, Ri SWAP A 例: 已知A中的内容为34H ; A R6 MOV R6, #29H ; 34H 29H XCH A, R6 ; 29H 34H SWAP A ; 92H 34H XCH A, R6 ; 34H 92H,.9 交换指令,判断以下指令对错,并改正错误的指令: 1、MOVX DPTR, 0 2、MOV R4,R0 3、MOV R1 ,R2 4、MOV A, R2 5、 MOV 38H,60H 6、 MOVC B,A+DPTR 7、 POP R1 8、 XCH 10H,20H 9、 XCHD A ,50H, MOVX DPTR,A, 不允许 Rn Rn, 不允许 Rn Ri, 只有R0、R1可用于间接寻址, MOVC A,A+DPTR, Rn不可作为POP的操作数, XCH必须以A为源操作数, XCHD A,Ri,5 算术运算指令 包括加、减、乘、除运算;第一操作数一般为A;一般影响标志位 CY、AC、OV和P。 共24条指令,分成七个小类。 一、不带进位加法指令(4条) ADD A,Rn ;(A)+(Rn)A ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A ADD A,#data ;(A)+#dataA 例3-1(A)=0C3H,(R0)=0AAH 执行“ADD A,R0”的和为 ? ,标志位CY= ? ,OV= ? ,AC= ? 。 OV=C7 C6 对第6、第7位的进位位C7、C6异或。,6DH,1,1,0,二、带进位加法指令(4条) ADDC A,Rn ;(A)+(Rn)+CYA ADDC A,direct ;(A)+(direct) +CY A ADDC A,Ri ;(A)+(Ri) +CY A ADDC A,#data ;(A)+#data +CY A 三、带借位减法指令(4条) SUBB A,Rn ;(A)- CY -(Rn)A SUBB A,direct ;(A)- CY -(direct)A SUBB A,Ri ;(A)- CY -(Ri) A SUBB A,#data ;(A)- CY - #data A,注意!,无不带借位的减法指令,例:编写双字节加法指令 设一个加数高字节、低字节分别放在片内31H 、30H中,另一个加数高字节、低字节分别放在片内41H、 40H中,要求其加法结果高、低字节分别放入51H、50H中。 试编写该程序。,MOV A,30H ADD A,40H MOV 50H,A MOV A,31H ADDC A,41H MOV 51H, A,四、乘除法指令(2条) 1、乘法指令 (8位无符号数乘法) MUL AB ;(A)(B)B158,A70 说明: 若结果的B0,则OV=1, 若B=0, 则OV=0; CY总是为0。 2、除法指令 (8位无符号数除法) DIV AB ;(A)/(B)的商A,余数B 说明: 若除数B=0,则OV=1, 若B 0, 则OV=0; CY=0。,举例: 1、编程序实现将片内RAM中 38H单元的16进制数转换成非压缩BCD码,放在30H、31H、32H中。,程序如下: MOV A, 38H MOV B, #10 DIV AB MOV 32H, B MOV B, #10 DIV AB MOV 31H, B MOV 30H, A,五、加1指令(5条) INC A ;(A)+1 A INC Rn ;(Rn)+1 Rn INC direct ;(direct)+1 direct INC Ri ;(Ri)+1 (Ri) INC DPTR ;(DPTR)+1 DPTR 说明:此类指令不影响标志CY、AC和OV,六、减1指令(4条) DEC A ;(A)-1 A DEC Rn ;(Rn)-1 Rn DEC direct ;(direct)-1 direct DEC Ri ;(Ri)-1 (Ri) 说明:此类指令不影响标志CY、AC和OV,注意: 无 DEC DPTR 指令,七、十进制数调整指令(1条) DA A ;把中按二进制相加后的结果调整成按 ;BCD相加的结果 什么是BCD加法? 说明: (1)此指令常跟在ADD或ADDC指令之后,将A中的和调整为BCD码,并且ADD或ADDC的两个操作数是BCD码; (2)调整方法: 若(A03)9或AC=1,则(A03) +6 (A03); 若(A47)9或CY=1,则(A47) +6 (A47); (3)对标志的影响:若结果A99,则CY=1;不影响OV。,比如:37H+25H=62H,作业: P56 3.13 两个4位BCD码数相加,设被加数和加数分别存于片内RAM的40H41H、45H46H单元中,和数存于50H、51H中(均是低位在前,高位在后),试编写程序。,6 逻辑操作指令 包括清除、求反、移位、与、或、异或等操作。这类指令一般不影响标志位CY、AC和OV。共24条指令,分成五个小类。 一、累加器A清0与取反指令(2条) 1、累加器A清 0 指令 CLR A ;0 A 说明:只影响标志位P。 2、累加器A取反指令(按位取反) CPL A ;(/A) A,相当于0FFH - A A 说明:不影响标志位。 如: (A)=56H CPL A ;结果为0A9H,注意只能以为操作数,二、移位指令(4条) 1、累加器A循环左移 RL A ; 2、累加器A循环右移 RR A ; 3、累加器A带进位位循环左移 RLC A ; 4、累加器A带进位位循环右移 RRC A ; 说明: (1)各条指令每次只移动一位; (2)左移一位相当于乘以2;右移一位相当于除以2; (3)带进位移动影响标志位CY和P。,只能以为操作数,三、逻辑“与”指令(6条) ANL A,Rn ;(A)(Rn)A ANL A,direct ;(A)(direct)A ANL A,Ri ;(A)(Ri)A ANL A,#data ;(A) #data A ANL direct,A ;( direct )(A)direct ANL direct,#data ;( direct ) #data direct 说明: (1)目的操作数只能是A或者direct; (2)没有 ANL direct,direct ANL direct,Rn 或ANL direct,Ri 的形式。,(3)前4条指令仅影响标志位P;后两条不影响标志位; (4)与运算常用于使某些位清0。,例1: 试编写程序,将片内RAM中45H单元内容的高4位清0。 例2: 试编写程序,将片外RAM中1045H单元内容的高4位清0。,ANL 45H,#0FH,MOV DPTR,#1045H MOVX A,DPTR ANL A, #0FH MOVX DPTR,A,四、逻辑“或”指令(6条) ORL A,Rn ;(A)(Rn)A ORL A,direct ;(A)(direct)A ORL A,Ri ;(A)(Ri)A ORL A,#data ;(A) #data A ORL direct,A ;( direct )(A)direct ORL direct,#data ;( direct ) #data direct 说明: (1)目的操作数只能是A或者direct; (2)没有 ORL direct,direct ORL direct,Rn 或 ORL direct,Ri 的形式。,(2)前4条指令仅影响标志位P;后两条不影响标志位。 (3)或运算常用于使某些位置1。,例1: 试编写程序,将片内RAM中45H单元内容的低4位置1。 例2: 试编写程序,将片外RAM中1045H单元内容的低4位置1。,ORL 45H,#0FH,MOV DPTR,#1045H MOVX A,DPTR ORL A, #0FH MOVX DPTR,A,五、逻辑“异或”指令(6条) XRL A,Rn ;(A)(Rn)A XRL A,direct ;(A)(direct)A XRL A,Ri ;(A)(Ri)A XRL A,#data ;(A) #data A XRL direct,A ;( direct )(A)direct XRL direct,#data ;( direct ) #data direct 说明: (1)目的操作数只能是A或者direct; (2)没有 XRL direct,direct XRL direct,Rn 或 XRL direct,Ri 的形式。 (3)用1异或使对应位取反,用0异或使对应位不变,异或运算常用于使某些位取反。,例: 试编写程序,将片外RAM中2100H单元内容的奇数位变反,偶数位不变,MOV DPTR,#2100H MOVX A,DPTR XRL A , #1010 1010B MOVX DPTR, A,7 控制程序转移类指令 包括无条件转移、条件转移、子程序调用和返回指令等,共17条。 只有比较转移指令影响标志位。,1、AJMP 绝对转移 2、LJMP 长转移 3、SJMP 相对转移 4、JMP A+DPTR 间接转移,程序,一、无条件转移指令(4条),正常执行,1、短转移(绝对转移)指令 AJMP addr11(字节) 举例: AJMP A1 A1: MOV A ,#0 说明: 应用时必须保证目标地址与下一条指令首地址的高5位相同,即目标地址与下一条指令在同一个2KB范围,否则出错。,(PC),2、长转移指令 LJMP addr16 ;addr16PC (字节指令) 如:LJMP NEXT NEXT: ,(PC),说明: 转移范围是 64KB全程序空间任何单元, 即目标地址可以是 0000HFFFFH任意值。,3、相对转移指令 SJMP rel (2字节) 如:SJMP NEXT NEXT: 说明: 应用时应保证目标地址在距离转移指令的下一条指令的-128+127字节距离范围内。 例如: SJMP $ ;无限循环执行本指令,,4、间接转移指令 JMP A+DPTR ;(A)+(DPTR)PC 目的地址为 A+DPTR 说明:(1)具有多分枝转移功能,即散转功能,又叫散转指令; (2)转移范围:是以DPTR为首地址的256B。,例3-11 根据累加器A中的命令键键值,设计命令键操作跳转程序。 MOV DPTR,#JPTAB JMP A+DPTR JPTAB: AJMP CCS0 AJMP CCS1 AJMP CCS2 :,二、条件转移指令(8条) 均为相对寻址方式。 1、累加器A为零(非零)转移指令 JZ rel ;当A=0时,转移; ;当A0时,顺序执行。 JNZ rel ; 当A0时,转移; ;当A=0时,顺序执行。,2、比较转移指令 4条,均为三字节指令。一般形式为: CJNE (目的操作数),(源操作数),rel 不等则转移,同时置CY,等则顺序执行。 (1) CJNE A,direct,rel ;若A (direct) ,则(PC)+relPC,且0CY; ;若A #data ,则(PC)+relPC,且0CY; ;若A #data ,则(PC)+relPC,且1CY; ;若A = #data ,则顺序执行,且0CY。,(3)CJNE Rn,#data,rel ;若(Rn) #data ,则(PC)+relPC,且0CY; ;若(Rn) #data ,则(PC)+relPC,且0CY; ;若(Ri) #data ,则(PC)+relPC,且1CY; ;若(Ri) =#data ,则顺序执行,且0CY。,说明: CY,实际是A-(direct)操作的借位值送CY; CY可以作为进一步操作的依据。 如:CJNE A,38H,FIRST CJNE A,#56H,SECOND CJNE R2,#32,THIRD CJNE R1,#48H,FOURTH,3、循环转移指令 DJNZ Rn,rel ;(Rn)-1Rn; ;若(Rn)0, 则转移 ; ;若(Rn) = 0, 则结束循环, 顺序执行 DJNZ direct,rel ;( direct )-1 direct ; ;若(direct)0,则转移 ; ;若(direct) = 0,则结束循环, 顺序执行 说明: (1)PC的含义同上; (2) Rn、direct相当于控制循 环的计数器。,举例: 统计片内RAM区的60H70H地址单元中30的个数。,程序: TJ : MOV R2,#10H ;计数器 MOV R0,#60H ;给指针赋初值 MOV R3, #0 ;统计30个数计数器 LP1: CJNE R0, #30, NEXT INC R3 NEXT: INC R0 DJNZ R2, LP1 RET,三、子程序调用和返回指令(3条),CALL指令,执行子程序,RET指令,程序,子程序调用指令可完成保护断点的工作,以便正确返回,ACALL 子函数名、 LCALL 子函数名、 RET子程序返回 RETI 中断子程序返回,三、子程序调用和返回指令(3条) 1、短(绝对)调用指令 ACALL addr11 说明: 要求与绝对调用指令同,即目的地址要与转移指令下一条指令地址在同一个2KB范围,即高5位地址相同。,如: ACALL SUB SUB : RET,2、长调用指令 LCALL addr16 说明: 转移范围是整个程序存储空间,64KB范围,即目标地址可为0000HFFFFH范围任意值 。,如: LCALL SUB SUB : RET,3、返回指令 RET: 子程序返回指令,与子程序调用指令配合使用 ;(SP) PC 815 , (SP) -1SP ; (SP) PC 07 , (SP) -1SP RETI: 中断服务子程序返回指令,处于中断服务子程 序末尾处。 ;(SP) PC 815 , (SP) -1SP ; (SP)

温馨提示

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

评论

0/150

提交评论