【大学课件】MCS51单片机指令系统P114.ppt

上传人:本田雅阁 文档编号:3034234 上传时间:2019-06-28 格式:PPT 页数:114 大小:2.24MB
返回 下载 相关 举报
【大学课件】MCS51单片机指令系统P114.ppt_第1页
第1页 / 共114页
【大学课件】MCS51单片机指令系统P114.ppt_第2页
第2页 / 共114页
【大学课件】MCS51单片机指令系统P114.ppt_第3页
第3页 / 共114页
【大学课件】MCS51单片机指令系统P114.ppt_第4页
第4页 / 共114页
【大学课件】MCS51单片机指令系统P114.ppt_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《【大学课件】MCS51单片机指令系统P114.ppt》由会员分享,可在线阅读,更多相关《【大学课件】MCS51单片机指令系统P114.ppt(114页珍藏版)》请在三一文库上搜索。

1、,3.1 指令系统概述,3.2 MCS-51指令的寻址方式,3.3 MCS-51指令系统介绍,下页,http:/ 一台计算机所能执行的全部的指令集合,3.1 指令系统概述,指令是计算机中具有特定功能的操作命令, 程序与程序设计,按预定要求编排的指令序列称为程序。编排的过程称为程序设计, 指令系统,设计一种CPU,一般从设计指令系统开始,因而,一种机器的指令系统是机器本身固有的,决定了机器的性能,用户无法改变,必须继承、学习、掌握、应用,上页,下页,回目录,http:/ 程序设计语言,汇编语言:,高级语言:,符号语言:,上页,下页,回目录,如P55,图3-1所示。全是机器码,http:/ 源程序

2、,机器语言 (二进制代码),汇编,反汇编,上页,下页,回目录,MCS-51 交叉 汇编,http:/ 标号: 操作码 操作数 ;注释,其中除操作码部分是必须的,括号内的区段是任选项。,1、标号,标号是该指令的符号地址,可根据需要设定,必须以字母开始,以“ :”结束,长度不超过8个字符,系统中的保留字符不能作标号, 如: SFR名、ADD等,标号可被其他语句的操作数直接引用 源程序中,一个标号只能定义一个语句,不能相重,保持一义性,上页,下页,回目录,一个汇编语句分为四个区段,操作码,操作码,操作码,http:/ (B) , 十进制数 (D) ,十六进制数 (H),数字大于9,则数字应以“0”开

3、头,如:#0AFH,可以是操作数地址、立即数、标号、表达式如 M+3,目的操作数和源操作数之间用“,”分开,可以是寄存器名如A、B、R、DPTR,M,标号,被定义过的,上页,下页,回目录,Binary,Decimal,Hexadecimal,指出该语句的操作性质,http:/ ;”开头,是程序员对指令操作的解释, 以帮助阅读、理解程序的意义,可有可无,汇编时对这部分不予处理,不译成任何机器代码,可用英语或某种简洁的方式解释指令,或打印 程序清单,上页,下页,回目录,http:/ ORG,格式:,ORG H,功能:,给程序起始地址或数据块的起始地址赋值,例:,用法:,一般出现在每段源程序或数据块

4、的开始 一个源程序可多次出现ORG指令,上页,下页,回目录,首地址,首地址,http:/ END,格式:END,功能:汇编程序结束标志,附在一个源程序的结尾 一个源程序只能出现一次END指令,3、定义字节命令 DB,格式:,功能:,标号:DB 字节常数或字符串 (8位),定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元,用法:,有定义的内存单元地址,项或项表,上页,下页,回目录,http:/ 定义了数据块TAB的起始地址为8000H 伪指令DB定义了8000H8003单元的内容依次为:,(8000H)= 45H,(8001H)= 49H,(8002H)= 35H,(8003H

5、)= 41H,(8004H)= 05H,TAB,TAB1,(1) 由 ORG定义,(2) 跟在其他源程序之后,上页,下页,回目录,http:/ 字或字表,定义若干个字(双字节),例:,ORG 8000H,TAB:DW 7234H,8AH,10,(8000H)= 72H,(8001H)= 34H,(8002H)= 00H,(8003H)= 8AH,(8005H)= 0AH,汇编后:,(8004H)= 00H,上页,下页,回目录,按顺序存放!,http:/ DS,格式:,功能:,标号:DS 数据或字符及表达式,例:,(8008H)=30H,(8009H)=8AH,从指定单元地址开始,由数据或字符及

6、表达式的值来定义应保留的单元数,备用,即:8000H8007H单元保留备用,定义空间,上页,下页,回目录,http:/ EQU,格式:,字符名称 EQU 数据或汇编符号,功能:,将一个数据或汇编符号赋予标号段规定的字符名称,例:,;AA与R6等值,上页,下页,回目录,http:/ EQU 10 DELY EQU 07EBH MOV A,A10 LCALL DELY,;A10 = 10,;DELY = 07EBH,;转向入口地址 07EBH,使用EQU指令,须先赋值后使用,不能反之,上页,下页,回目录,http:/ DATA,格式:,字符名称 DATA 数据或表达式,功能:,此命令把数据/代码地

7、址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义,INDEXJ DATA 8389H,;INDEXJ这个字符名称的地址为8389H,例:,上页,下页,回目录,等价于,http:/ DATA的区别,(1) DATA与EQU相似,但DATA定义的字符名称, 可先使用后定义 ,EQU则不能,(2) EQU指令可把汇编符号赋给字符名称, DATA则不能,(3) DATA可把表达式的值赋给字符名称, EQU则不能,DATA常在程序中定义数据地址 EQU常在程序中定义字符数据,上页,下页,回目录,http:/ BIT,格式:,字符名称 BIT 位地址,功能:,把位地址赋予标号段的字符名称,;P1

8、.0, P2.0赋予位地址字符名称 A1、A2,在编程时可以直接把 A1、A2 当成位地址使用,上页,下页,回目录,http:/ 中的符号、表达式、标号 进行定义,处理伪指令, 建立符号表,上页,下页,回目录,显示 ERROR,并提示行号,显示 ERROR,并提示行号,修改!,修改!,第二次扫描(汇编),汇编成目标代码和汇编程序 清单,可执行的代码(机器码),http:/ 58,2s 40,4s 2,占居空间,占居时间,上页,下页,回目录,http:/ 共128位,布尔I/O口,P0P3口每位都可做布尔I/O口,布尔指令子集,17条布尔指令,上页,下页,回目录,http:/ 立即寻址, 直接寻

9、址, 寄存器寻址, 寄存器间接寻址, 基址寄存器加变址寄存器间接寻址, 相对寻址, 位寻址,上页,下页,回目录,http:/ 数据传送(29条), 算术运算(24条), 逻辑运算(24条), 控制转移(17条), 布尔处理(17条),上页,下页,回目录,http:/ 8位内部RAM单元地址 00H7FH, 专用特殊功能寄存器SFR的地址80HFFH, 立即数(8位),#data,#data16, 立即数(16位),n=07,i=0、1,上页,下页,回目录,P61,http:/ 16位目的地址,用于LCALL、LJMP指令 地址范围64KB ROM空间,addr11, 11位目的地址,用于ACA

10、LL、AJMP指令 地址范围2KB ROM空间,rel,DPTR, 数据地址指针,可做16位间址寄存器,bit, 内RAM或SFR中的直接位寻址,上页,下页,回目录,http:/ 累加器,B, 专用寄存器,用于MUL和DIV指令,C, 位累加器 ( PSW.7 ),进位/借位标志, 间址或基址寄存器前缀如 Ri , A+DPTR,/, 位操作的前缀,表示对该位操作数取反,(X), X中的内容,((X)), 由X寻址的单元中的内容,箭头左边的内容被箭头右边的内容所代替,DPTR , A+PC,上页,下页,回目录,http:/ MCS-51指令的寻址方式,用何种方式寻找指令的操作数 或指令的执行地

11、址,1、立即寻址,寻址空间:,指令形式:,程序存储器,指令的操作数存放在程序存储器中,操作数紧跟操作码OP后面,立即寻址:,在 哪 里 ?,用何种方式寻找,OP #data,Immediate Addressing,上页,下页,回目录,指令的寻址方式:,指令的寻址方式:,http:/ A,# 30H,例1:,30H,MOV DPTR,# 8000H,例2:,80H,00H,上页,下页,回目录,http:/ SFR 的唯一方法,Direct Addressing,上页,下页,回目录,00H7FH 80HFFH,CPU内部,直接 间接,http:/ A, 30H,例1:, ,ANL 30H,#30

12、H,例2:, ,“结果”,http:/ A,R3,例1:,ADD A,R3,例2:,寄存器寻址:,Register Addressing,操作数隐含,操作数显然,隐含寻址,上页,下页,回目录,http:/ Indirect Addressing,上页,下页,回目录,http:/ R0,A,例1:,;累加器传送指令, ,MOVX A,DPTR,例2:, ,“读”,“读”,上页,下页,回目录,http:/ 两者相加形成操作数地址。,寻址空间:,程序存储器(A+DPTR、A+PC),指令形式:,上页,下页,回目录,http:/ A,A+DPTR,例:,设(A)= 0FH (DPTR)= 2400H,

13、 ,“读”,“读”,MOVC A,A+DPTR,上页,下页,回目录,http:/ Addressing,上页,下页,回目录,寻址指令 执行地址 目标地址,http:/ rel,例:,; 累加器A不等零则转移 设:rel=23H,(PC)=2002H,rel=23H,修正后转移 目标地址D (PC) = 2025H,上页,下页,回目录,(PC) = 2 0 0 2 H,Rel = 2 3 H,),0,0,5,2,0,2,H,D =,http:/ 目标地址 D (PC) = 2104H,上页,下页,回目录,例:DJNZ R7,rel ;(R7) 1不为“0”则转,(PC) = 2 1 1 2 H,

14、Rel = F 2 H,),F,F,4,0,1,2,H,D =,http:/ 位地址:00H7FH 请参看图2-15 共128位,SFR中12个能被8整除的字节地址 位地址请参看 图2-16 共93位,Bit Addressing,以访问触发器的方式,对内部RAM、SFR 的位地址空间进行访问,称为位寻址。位地址 用于布尔指令。,上页,下页,回目录,请参看 P43,专为布尔指令设计,http:/ 指令系统,3.3.0 指令分类,按指令的功能, MCS -51 指令系统可分为下列 5 类: (1) 数据传送;(29条) (2) 算术运算;(24条) (3) 逻辑运算; (24条) (4) 位操作

15、; (17条) (5) 控制转移。 (17条),http:/ 数据传送类指令(29条),图 3 1 MCS -51传送指令示意图,http:/ 3-2 数据传送类指令一览表,http:/ 3-2 数据传送类指令一览表,http:/ 数据传送到累加器A的指令 MOV A, Rn MOV A, direct MOV A, Ri MOV A, data 这组指令的功能是:把源操作数的内容送入累加器A。例如: MOV A, 10H, 该指令执行时将立即数 10H送入累加器A中。,注意:数据传送指令一般不影响状态标志位(PSW:CY,AC,RS1,RS0,OV,P),但累加器A中1的个数影响P位。,ht

16、tp:/ 数据传送到工作寄存器Rn的指令 MOV Rn, A MOV Rn, direct MOV Rn, data 这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。,http:/ 数据传送到内部RAM单元或特殊功能寄存器SFR的指令 M

17、OV direct, A MOV direct, Rn MOV direct, direct ; 功能较强;如:mov 02h,03h。 但MOV R2,R3在WAVE6000中通不过(mov 02h,03h可以) MOV direct, Ri MOV direct, data ;如:MOV SP,#30H MOV Ri, A MOV Ri, direct MOV Ri, data MOV DPTR, data16,http:/ 8086汇编:MOV 1000H,33H ;MOV 1000H,2000H 都是不合法的指令。 MCS-51汇编:MOV 00H,#30H;MOV 32H,39H 都

18、是正确的。,http:/ P1口当前的状态为AAH。分析下面程序的结果。 MOV R0,#70H MOV A,R0 MOV R1,A MOV B,R1 MOV R0,P1,http:/ 累加器A与外部数据存储器之间的传送指令 MOVX A, DPTR ;读 MOVX A, Ri ;读 MOVX DPTR, A ;写 MOVX Ri, A ;写 注:与外部存储器(数据或程序)或I/O口进行数据传送时,必须经过累加器A ;当访问外部RAM时, 只能使用R0、 R1及DPTR作为地址指针。,http:/ 120H单元的内容传送到片外RAM 地址为78H的单元。,MOV DPTR,#0120H,MOV

19、X A,DPTR,MOV R0,#78H,MOVX R0,A,例:将片内RAM 12H单元的内容传送到片内RAM 地址为78H的单元。,MOV 78H,12H,;外部RAM送累加器A,;累加器内容送外RAM,http:/ 堆栈操作指令 PUSH direct POP direct 在MCS -51 单片机的内部RAM中, 可以设定一个先进后出的区域, 称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP, 它指出栈顶的位置。 进栈指令的功能是: 首先将堆栈指针SP的内容加1, 然后将直接地址所指出的内容送入SP指出的内部RAM单元; 出栈指令的功能是: 将SP所指出的内部RAM单元的内容送入由直接

20、地址所指出的字节单元, 接着将堆栈指针SP的内容减 1。,http:/ 进入中断服务子程序时, 把程序状态寄存器PSW、 累加器A、 数据指针DPTR进栈保护。设当前SP为 60H。则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH 执行后, SP内容修改为 64H, 而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前, 如下程序段(SP保持 64H不变),http:/ DPH POP DPL POP ACC POP PSW 执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H单元中的内容

21、依次弹出到DPH、DPL、A、PSW中。 MCS -51 提供一个向上升(“向上生长”)的堆栈, 因此SP设置初值时要充分考虑堆栈的深度, 要留出适当的单元空间, 满足堆栈的使用。,http:/ MOVC A, A+PC (PC固定) MOVC A, A+DPTR (DPTR可变) 这是两条很有用的查表指令, 可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器, A的内容作为无符号数和 PC的内容 ( 下一条指令的起始地址)相加后得到一个 16 位的地址, 并将该地址指出的程序存储器单元的内容送到累加器A。 这条指令的优点是不改变特殊功能寄存器和PC的状态, 只要根据

22、A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的 256 个单元之中, 表格的大小受到限制, 而且表格只能被一段程序所利用。,只读!,http:/ 累加器A的内容作为无符号数与DPTR内容相加, 得到一个 16 位的地址, 并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关, 与该指令存放的地址无关, 因此, 表格的大小和位置可以在 64 KB程序存储器中任意安排, 并且一个表格可以为各个程序块所共用。,http:/ MOV DPTR,#TABLE MOVC A,A+DPTR ;改用MOVC A,A+PC指令行不行?为什

23、么? XCH A,R0 (占1B空间) RET (占1B空间) TABLE:DB 0,1,4,9,16,25,36,49,64,81,http:/ 字节交换指令 XCH A, Rn XCH A, Ri XCH A, direct XCHD A, Ri ;A03 Ri03 SWAP A ; A03 A47 前三条指令是将累加器A的内容和源操作数内容相互交换; 后两条指令是半字节交换指令, 最后一条指令是将累加器A的高 4 位与低 4 位之间进行交换, 而另外一条指令是将累加器 A 的低 4 位内容和(Ri)所指出的内部RAM单元的低 4 位内容相互交换。,http:/ 题,例: (A)=80H,

24、 (R7)=97H 执行:XCH A , R7 结果:(A)=97H, (R7)=80H 例:将片内RAM 60H单元与61H单元的数据交换。 XCH 60H,61H 对吗? 例:(R0)=60H, (60H)=3EH, (A)=59H 执行: XCHD A, R0 结果:(A) 5E H (60H)39 H,http:/ P1, #0FEH ; 11111110B 可以使P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,http:/ P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1,

25、 #88H ; 显示 A,http:/ 算术运算类指令(24条) (除个别INC、DEC指令 只影响P位外,其它指令一般都影响标志位。),表 3-4 算术运算指令,http:/ 3-4 算术运算指令,http:/ 3.3 影响标志位的指令,注:表示对该标志位会产生影响,0或1表法对该标志位置0或1,http:/ 3.3 影响标志位的指令,http:/ 加法指令,1. 普通加法指令 ADD A, Rn ; A (Rn)+(A) ADD A, direct ADD A, Ri ADD A, data 注意:判断无符号数的运算结果是否正确看CY位;判断带符号数的运算结果是否正确看OV 位。,http

26、:/ +120 和 +100 之和为 220, 显然大于 127, 相加时,0 1 1 1 1 0 0 0 120(补码,78H) 0 1 1 0 0 1 0 0 100 (补码,64H) 1 1 0 1 1 1 0 0 220,+,符号位(最高位)由 0 变 1, 两个正数相加结果变负, 实际上它是和数的最高位, 符号位移入了进位标志, 此时位 6 有进位而位 7 无进位, 置位溢出标志OV, 结果溢出。,CY=0,DF=1,故OV=1溢出!,http:/ 120和100 相加, 结果应为220, 显然小于128, 相加时,1 0 0 0 1 0 0 0 -120的补码 1 0 0 1 1

27、1 0 0 -100的补码,+,1 0 0 1 0 0 1 0 0 -220的补码,符号位由1变为0, 两个负数相加结果变为正数, 这是因为符号位移入进位标志, 位 6 无进位而位 7 有进位, 置位溢出标志OV, 由此可判断结果溢出。,CY=1,DF=0,故OV=1溢出!,http:/ 带进位加法指令 ADDC A, Rn ;A (Rn)+(A)+(C)Y ADDC A, direct ADDC A, Ri ADDC A, data 这组指令的功能与普通加法指令类似, 唯一的不同之处是, 在执行加法时, 还要将上一次进位标志Cy的内容也一起加进去, 对于标志位的影响也与普通加法指令相同。,h

28、ttp:/ 增量指令(除INC A影响P位外,其它不影响任何标志) INC A INC Rn INC direct INC Ri INC DPTR 最后一条指令是对16 位的数据指针寄存器DPTR执行加 1 操作, 指令执行时, 先对低 8 位指针 DPL的内容加 1, 当产生溢出时就对高 8 位指针DPH加 1, 但不影响任何标志。,http:/ 十进制调整指令 DA A 这条指令对累加器A参与的BCD码加法运算所获得的 8 位结果进行十进制调整, 使累加器A中的内容调整为二位压缩型 BCD码的数。使用时必须注意, 它只能跟在加法指令之后, 不能对减法指令的结果进行调整, 且其结果不影响溢出

29、标志位。 执行该指令时, 判断 A中的低4 位是否大于 9 和辅助进位标志 AC是否为“1”, 若两者有一个条件满足, 则低 4 位加 6 操作; 同样, A中的高 4 位大于 9 或进位标志 Cy为“1”两者有一个条件满足时, 高 4 位加 6 操作。例如: 有两个 BCD数 36 与 45 相加, 结果应为 BCD码 81, 程序如下:,http:/ A, 36H ADD A, 45H DA A,这段程序中, 第一条指令将立即数36H(BCD码36)送入累加器A; 第二条指令进行如下加法:,0 0 1 1 0 1 1 0 36 0 1 0 0 0 1 0 1 45,0 1 1 1 1 0

30、1 1 7B 0 0 0 0 0 1 1 0 06,+,+,1 0 0 0 0 0 0 1 81,得结果 7BH; 第三条指令对累加器 A进行十进制调整, 低 4 位(为 0BH)大于 9, 因此要加 6, 得调整的 BCD码 81。,http:/ 减法指令 1. 带进位减法指令 SUBB A, Rn ;A (A)-(Rn)-(cy) SUBB A, direct SUBB A, Ri SUBB A, data 这组指令的功能是: 将累加器A的内容与第二操作数及进位标志相减, 结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位, 则进位标志Cy置“1”, 否则清“0”; 如果位 3

31、(D3)有借位, 则辅助进位标志AC置“1”, 否则清“0”; 如位 6 有借位而位 7 没有借位, 或位 7 有借位而位 6 没有借位, 则溢出标志OV置“1”, 否则清“0”。 若要进行不带借位的减法操作, 则必须先将Cy清“0”。,http:/ CLR C MOV A,30H SUBB A,40H MOV 30H,A MOV A,31H SUBB A,41H MOV 31H,A,http:/ 减1指令(除DEC A影响P位外,其它不影响任何标志) DEC A DEC Rn DEC direct DEC Ri 注:没有专门的DEC DPTR 指令,要实现其功能可编程实现。,http:/ 乘

32、法指令(Multiplication),MUL AB ; (A)(B) 低8位A 高8位B A、B中都是无符号整数 如果积大于255,OV1,否则OV0;进位标志总是清零 Cy0。 注意P91的例3-13中的:ADDC A,#0指令的用法。,http:/ 除法指令(Division),DIV AB ; (A)(B) 商 A 余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0; 进位标志总是清零 Cy0。,http:/ 逻辑运算指令,除带进位的循环指令RRC、RLC对标志位有影响外,其它指令不影响标志位。,http:/ 简单逻辑操作指令,CLR A ; A “0” CPL A

33、 ; A A SWAP A ; A03 A47 例: (A)=3AH, CPL A, (A)=0C5H 0011 1010B 1100 0101B (A)=3AH, SWAP A, (A)=0A3H 注:指令SWAP,也可看成一个4位循环移位指令,不影响标志位。,http:/ 循环指令,(1)、左循环指令 (Rotate Accumulator Left) RL A ;左移1位 例 (A)6CH = 0110 1100B RL A (A)=1101 1000B=0D8H,http:/ Accumulator Left through Carry flag),RLC A ;左移1位,对标志位CY

34、有影响 例(A)6CH = 0110 1100B, (C) =1 RLC A (A)=1101 1001B=0D9H, (C) =0,http:/ Accumulator Right),RR A ;右移1位 例(A)6CH = 0110 1100B RR A (A)=0011 0110B=36H,http:/ A Right with C),RRC A ;右移1位,对标志位CY有影响 例(A)6CH = 0110 1100B, (C) =1 RRC A (A)=1011 0110B=0B6H, (C)=0,这组指令除了带进位标志位的移位指令外,其它都不影响Cy, AC, OV等标志。,http

35、:/ 逻辑与指令,ANL A, Rn ANL A, direct ANL A, data ANL A, Ri ANL direct, A ANL direct, data “与” , “有0即0,全1为1” 0000 0111 ) 1111 1101 0000 0101 B 05H,X0=0;X1=X,XX=X,http:/ 逻辑或指令,ORL A, Rn ORL A, direct ORL A, data ORL A, Ri ORL direct, A ORL direct, data “或” , “有1即1,全0为0” 0000 0110 ) 0110 1101 0110 1111 B 6FH,X0=X;X1=1,XX=X,ht

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1