收藏 分销(赏)

MCS-51指令系统.ppt

上传人:s4****5z 文档编号:14002893 上传时间:2026-05-25 格式:PPT 页数:169 大小:4.36MB 下载积分:10 金币
下载 相关
MCS-51指令系统.ppt_第1页
第1页 / 共169页
MCS-51指令系统.ppt_第2页
第2页 / 共169页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章,MCS-51,指令系统,1,本 章 重 点,寻址方式,数据传送类指令,算术运算类指令,逻辑运算类指令,位操作指令,控制转移类指令,课时安排:,10,个课时,2,第,3,章,MCS-51,指令系统,3.1,指令系统简介,3.2,寻址方式,3.3,数据传送指令,3.4,算术运算指令,3.6,位操作指令,指令的英文全称,3.7,控制转移指令,3.5,逻辑运算指令,思考题,3,教学目的:,学习,MCS,51,单片机的指令系统机汇编语言程序设计方法,。,要求,:,1,熟悉,MCS,51,单片机的种寻址方法。,2,熟悉,MCS,51,单片机的指令系统(类指令)。,3,掌握汇编语言程序设计方法。,4,会用汇编语言编写基本程序段,。,重点,:,1,MCS,51,单片机的寻址方法。,2,MCS,51,单片机的指令系统。,3,基本程序设计方法。,难点,:,1.,各种转移类指令的寻址范围计算。,2.,各类指令的应用场合。,3.,注意各类指令对程序状态字的影响。,4,3.1,指令系统简介,高级语言,:,汇编语言,:,机器语言,:,程序设计语言:,用二进制代码表示指令和数据。,用助记符表示指令操作功能,用标号表示操作对象。,独立于机器,面向过程,接近自然语言和数学表达式,.,一、汇编语言程序设计的意义,什么是程序?,完成某项特定任务的指令的集合。,计算机按程序一条一条地依次执行指令,从而完成指定任务。,要让计算机完成各项任务,就应设计各种程序。,5,6,7,标号:指令 ;注释,1,),标号,:,是用户设定的一个符号,表示存放指令或数据的存储单元地址。,标号是由字母开始的,1,8,个字母或数字串组成。,标号后面必须紧跟冒号,“,:,”,,作为标号的结束。,一个标号只能表示一个地址,不允许多个地址使用同一个标号。,二、汇编语言的格式,8,2,),指令,:,指令分为两类,执行指令和伪指令,。,执行指令,是计算机指令系统给出的各种指令。已在前一章介绍过,即由,“,操作码,”,和,“,操作数,”,组成。,伪指令,是由汇编程序规定,仅在机器汇编时供汇编程序识别和执行,用来对汇编过程进行控制和操作,并不产生供机器直接执行的机器码,也不会直接影响存储器中代码和数据的分布。,9,指令,=,操作码,+,操作数,操作码,表示该指令所能执行的操作功能,。,操作数,表示参加操作的数本身或操作数所在的地址。,操作码与操作数之间用空格分开,操作数与操作数之间用逗号分开,带方括号的项可有可无。例如:,MOV A,30H,MCS-51,指令格式:,标号:,操作码助记符,第一操作数,,第二操作数,;注释,10,3,),注释,:,只是对程序的说明,注释信息和程序一起存储、打印,但汇编时不被翻译,不会出现在机器代码的目标程序中,也不影响程序的执行。,注释必须以分号,“,;,”,开始,,注释信息占用多行时,每行都必须以,“,;,”,开始。,11,三、指令中操作数的描述符号,Rn,当前寄存器组的8个通用,寄存器,R0 R7,。,Ri,可用作间接寻址的寄存器,只能是,R0,、,R1,。,Direct,8,位直接地址,在指令中表示直接寻址方式,寻,址包括片内低,128B RAM,单元地址、以及高,128B,RAM,区中的,26,个,SFR,地址。,#data,8,位立即数。,#data 16,16,位立即数。,addr 16,16,位目的地址,只限于在,LCALL,和,LJMP,指令中,使用。,addr 11,11,位目的地址,只限于在,ACALL,和,AJMP,指令中,使用。,rel,8,位带符号补码数,作为转移指令中的偏移量。,12,DPTR,16,位外部数据指针寄存器。,bit,内部,RAM,中的可直接寻址位。,A,累加器。,ACC,直接寻址方式的累加器。,B,寄存器,B,。,C,进、借位标志位,是布尔处理机的累加器,也称,之为位累加器。,间接寄存器前缀标志。,/,加在位地址前面,表示对该位状态求反。,(x),x,中的内容。,(x),x,中的地址中的内容。,当前指令存放的地址。,13,四、指令字节,在二进制的,80C51,指令中,单字节指令的操作码和操作数加起来只有,1B,;双字节指令的操作码和操作数各占,1B,;三字节指令的第,1,字节为操作码,第,2,、第,3,字节为操作数、操作数地址或符号。,1,单字节指令(,49,条),在,80C51,指令指令系统中,单字节指令可分为两大类:无操作数的单字节指令和含有操作数寄存器编号的单字节指令。,1,)无操作数单字节指令,这类指令只有操作码字段,操作数隐含在操作码中。,例如:,INC DPTR,指令码为,:,14,2,)含有操作数寄存器号的单字节指令,单字节的指令码由操作码字段和指示操作数所 在寄存器号的字段组成。,例如;,MOV A,,,Rn,指令码为:,其中,,rrr,为寄存器,Rn,的编号,15,2,双字节指令(,45,条),双字节指令的操作码字节在前;在后面的操作数字节可以是立即数,也可以是操作数所在的片内,RAM,地址。,例如:,MOV A,,,#23H,指令码为:,这条,8,位数传送指令的含义是把指令码第,2,字节立即数,23H,取出来存放到累加器(,A,)中。该指令的操作码占,1B,;,23H,为源操作数,也是,1B,;累加器(,A,)是目的操作数寄存器,隐含在操作码字段中。,16,3,三字节指令(,17,条),这条指令的指令码的第,1,字节为操作码;第,2,和第,3,字节为操作数或操作数地址,有如下,3,类。,1,),16,位数据,例如:,MOV DPTR,,,#26ABH,指令码为:,操作数,DPTR,同样隐藏在了操作码中,17,2,),8,位地址和,8,位数据,例如:,MOV 74H,,,#0FFH,指令码为:,3,),16,位地址,例如:,LCALL 2020H,指令码为:,在程序设计中,应尽可能选用字节少的指令。这样,指令所占存储单元少,执行速度也快。,18,19,3.2,寻址方式,3.2.4,立即寻址,3.2.2,直接寻址,3.2.1,寄存器寻址,3.2.3,寄存器间接寻址,3.2.5,变址寻址,3.2.7,相对寻址,3.2.6,位寻址,思考题,3.2.8,各种寻址方式小结,20,寄存器寻址方式就是操作数在寄存器中,因此指定了寄存器就能得到操作数。,寄存器寻址方式的指令中以符号名称来表示寄存器。,例如:,MOV A,R2,;其功能是把寄存器,R2,中的内容传送到,;累加器,A,中。由于操作数在,R2,中,因,;,此指令中指定了,R2,3.2.1,寄存器寻址,EA,程序存储器,2020,4A,4A,片内,RAM,区,R2,ACC,图,3-1,寄存器寻址示意图,21,说明,:,(,1,),寄存器寻址方式可以用在目的操作数中,也可以用在源操作数中。,(,2,),寄存器寻址的主要对象是通用寄存器,,共有,4,组通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是,R0,R7,。,(,3,),寄存器寻址还包括部分专用寄存器,SFR,,如累加器,A,、寄存器,B,(但仅限于乘法指令)、地址寄存器,DPTR,。,22,指令中操作数直接以单元地址的形式给出,就称之为直接寻址。例如:,MOV A,23H,图,3-2,直接寻址示意图,3.2.2,直接寻址,23,说明:直接寻址方式只能使用,8,位二进制数表示的地址,因此,这种寻址方式的寻址范围只限于内部,RAM,区,。即:,(,1,)低,128,字节。在指令中直接以单元地址的形式给出。,(,2,)专用寄存器区。可以以单元地址的形式给出,也可以以寄存器符号形式给出(,对,SFR,来说,地址一定、符号一定,寄存器符号等同于寄存器直接地址,这时程序编译是就确定下来的,)。,24,25,26,重要,ACC,与,A,的区别:,ACC,表示的是累加器的直接地址,E0H,(直接寻址),A,表示的累加器这样一个寄存器的内容(寄存器寻址),27,寄存器间接寻址方式中,寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的。例如:,MOV A,R0,3.2.3,寄存器间接寻址,E6,程序存储器,2030,4A,4A,片内,RAM,区,50,ACC,50,片内,RAM,区,(,R0,),00,图,3-3,寄存器间接寻址示意图,28,寄存器间接寻址方式的寻址范围是:,(,1,)内部,RAM,的低,128,字节。此时只能使用,R0,或,R1,作间址寄存器,其通用形式为,Ri,。,(,2,)外部,RAM,的,64KB,范围。此时一般使用,DPTR,作间址寄存器,其形式为,DPTR,。如,:MOVX A,DPTR,(,3,)外部,RAM,的低,256,字节。此时使用,R0,或,R1,作间址寄存器,。如,:MOVX A,R0,。(,有什么问题?,),(,4,)堆栈操作指令(,PUSH,和,POP,)也应算作是寄存器间接寻址,即以,SP,作间址寄存器的间接寻址方式。,29,当指令中的源操作数为,8,位或,16,位常数时,就称为立即寻址方式,例如:,MOV A,#23H,;其中第二操作数“,23H”,就是立即数,,含义是将立即数,23H,传送到累加器,;,A(,目的操作数,),中,MOV DPTR,#2000H,;将立即数,2000H,传送到数据指针,DPTR(16,位寄存器,),寄存器中,3.2.4,立即寻址,30,图,3-4,立即寻址示意图,31,说明:,立即数长度必须小于或等于目的操作数的长度。,在上例中,如果累加器,A,字长为,8,位,则不能将,16,位二进制数传送到累加器,A,中,即如下指令在汇编时将出错:,MOV A,#1234H,;由于累加器,A,长度只有,8,位,无法装入,16,位二进制数,1234H,但立即数长度可以小于目的操作数长度,例如:,MOV DPTR,#02H,MOV DPTR,#2H,32,变址寻址方式是为了访问,ROM,中的数据表格。,以,DPTR,或,PC,作基址寄存器,以累加器,A,作变址寄存器,,然后以两者内容相加形成的,16,位地址作为操作数地址,达到访问数据表格的目的。例如:,MOVC A,A+DPTR,3.2.5,变址寻址,93,47,程序存储器,2040,20,00,DPH,ALU,.,.,.,20E0,(,47,),E0,ACC,DPL,.,.,.,图,3-5,变址寻址示意图,33,说明:,(,1,)变址寻址方式只能对,ROM,进行寻址,或者说它是专门针对,ROM,的寻址方式,寻址范围可达,64KB,。,(,2,)变址寻址指令只有,3,条:,MOVC A,A+DPTR,MOVC A,A+PC,JMP A+DPTR,34,位寻址方式是单片机系统特有的一种寻址方式。位寻址指令中可以直接使用位地址。例如:,MOV C,23H ;,指令中的“,C”,是进位标志,Cy,的简称,,23H,是位寻址空间内的位地址,MOV C,ACC.7 ;,SFR,中的位既可以使用位地址也可以使 用符号,+,位序号,3.2.6,位寻址,35,位寻址的寻址范围:,(,1,)内部,RAM,中的位寻址区(,20H,2FH,)。位寻址区中的位有两种表示方法,一种是位地址;一种是单元地址加位。,(,2,)专用寄存器,SFR,的可寻址位。,36,相对寻址的含义是以,程序计数器,PC,的当前值加上指令中给出的相对偏移量,rel,作为程序计数器,PC,的值,,这一寻址方式用在条件转移指令中。例如:,JZ 20H,;,当累加器,A,为零时,,PCPC+2+rel,。而,当,A0,时,,PCPC+2,,即没有转移,顺,序执行“,JZ 20H”,指令的下一条指令,3.2.7,相对寻址,转移的目的地址可用如下公式表示:,目的地址 转移指令地址 转移指令字节数,rel,37,图,3-6,相对寻址示意图,38,3.2.8,各种寻址方式小结,小结,:,1.,对片外,ROM,只能用变址寻址方式,或者反过来说,变址寻址是一种专门用于程序存储器的寻址方式。,2.,片内,RAM,由于使用频繁,因此寻址方式多。,3.,对片外,RAM,,只能使用寄存器间接寻址。,4.,立即寻址方式只涉及,8,位或,16,位数据。,5.,相对寻址解决程序转移问题。,6.,本节所讲的各种寻址方式都是针对于源操作数,但实际上目的操作数也有寻址问题。,39,表,3-1,各种寻址方式及使用空间,(,A+PC,A+DPTR,),40,3.3,数据传送指令,3.3.1,内部数据传送指令,(,MOV,),3.3.2,外部数据传送指令,(,MOVX,),3.3.4,堆栈存取指令,(,PUSH,POP,),3.3.5,数据交换指令,(,XCH,XCHD,SWAP,),3.3.3,查表指令,(,MOVC,),概 述,41,在,MCS-51,指令系统中,数据传送指令包括:,概 述,数据传送指令是最常用、最基本的一类指令。这类指令一般是把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数。,片外程序,存储器,ROM,EPROM,特殊功能寄存器,SFR,片内,RAM,128,字节,片外数据,存储器,RAM,MOVC,MOVX,MOV,PUSH,POP,XCH,XCHD,42,(3),将程序存储器,ROM,中某一单元的信息传送到累加器,A,中的指令,这类指令使用“,MOVC,”,作为指令操作码的助记符(“,C”,是代码的意思)。,(4),堆栈操作指令(,PUSH,、,POP,)。,(5),字节交换指令,(,XCH、XCHD、SWAP,),。,(2),外部,RAM,与累加器,A,之间的数据传送,这类指令使用“,MOVX,”,作为指令操作码的助记符(“,X”,代表外部的意思)。,(1),内部,RAM,与特殊功能寄存器之间的数据传送,这类指令使用“,MOV,”,作为指令操作码的助记符。,43,图,3-1 MCS-51,数据传送示意图,内部,RAM(80H,-,FFH),内部,RAM(00,-,7FH),特殊功能寄存器,(80,-,FFH),立即数,(8,位,),累加器,A,立即数,(16,位,),数据指针,DPTR,工作寄存器,R7,-,R0,外部,RAM,程序存储器,ROM,44,3.3.1,内部数据传送指令(,MOV,),表,3-2,内部,RAM,与特殊功能寄存器之间的数据传送指令,指令名称,指令格式,机器码,功能,指令周期,以累加器,A,作,为目的操作数,MOV,A,Rn,11101rrr,ARn,1,MOV,A,direct,11100101,direct,A(direct),1,MOV,A,Ri,1110011i,A(,Ri,),1,MOV,A,#data,01110100,data,Adata,1,以,Rn,寄存器作,为目的操作数,MOV,Rn,A,MOV,Rn,direct,MOV,Rn,#data,11111rrr,10101rrr,direct,01111rrr,data,RnA,Rn(direct),Rndata,1,2,1,45,续表,3-2,以直接地址,direct,作为目的操作数,MOV,direct,A,MOV,direct,Rn,MOV,direct,2,direct1,11110101,direct,10001rrr,direct,10000101,direct1,direct2,directA,(direct)Rn,(direct2)(direct1),1,2,2,MOV,Ri,A,MOV,Ri,direct,MOV,Ri,#data,1111011i,1010011i,direct,0111011i,data,(,Ri)A,(Ri)(direct),(Ri)data,1,2,1,MOV,DPTR,#data16,10010000,D15,D8,D7,D0,DPHD15,D8,DPLD7,D0,2,16,立即数传送,以,Ri,寄存器间接地址为目的操作数,唯一的,16,位数据传送指令,46,(1),对于内部,RAM,的低,128,字节,(00H,7FH),,以及特殊功能寄存器,SFR,(,80H,0FFH,之间),可以直接传送,不一定需要经过累加器,A,,例如:,MOV 32H,90H ;,将特殊功能寄存器,90H,单元,(P1,口,),中的内容读到 内部,RAM 32H,单元中。该指令的目的操作数和,源操作数都使用了直接寻址方式。,MOV 32H,43H ;,将内部,RAM 43H,单元内容读到内部,RAM,的,32H,单元中,MOV 90H,,,0F0H ;,将特殊功能寄存器,0F0H,单元,(,寄存器,B),的内容传,送到特殊功能寄存器,90H,单元,(P1,口,),中。,47,(2),对于低,128,字节内部,RAM,,可以用直接寻址方式,也可以用寄存器间接寻址方式,例如:,MOV 32H,#23H ;,将立即数,23H,传送到内部,RAM,的,32H,单元中,,目的操作数使用直接寻址,MOV R0,#23H;,假设该指令执行前,,R0,中的内容为,32H,,则,该指令的作用与上条指令相同。只是目的操,作数采用寄存器间接寻址方式,(3),对于特殊功能寄存器,在指令中除了可以使用寄存器直接地址外,还可以引用寄存器名。如“,MOV P1,#23H”,与“,MOV 90H,,,#23H”,等价,只是书写方式不同而已。,48,注意:,MOV Rn,,,Rn,MOV Ri,Ri,MOV Rn,Ri,MOV#data,A,等,等指令是非法指令。,哇!好容易出错啊!,思考:通用寄存器之间的数据传送可以实现吗?,49,3.3.2,外部数据传送指令(,MOVX,),累加器,A,与外部数据存储器之间的数据传送是通过,P0,口和,P2,口进行的。片外数据存储器的地址总线低,8,位和高,8,位分别由,P0,口和,P2,口送出,数据总线也是通过,P0,口与低,8,位地址总线分时传送。,在8051指令系统中,,CPU,对片外,RAM,的访问只能用寄存器间接寻址的方式,且仅有4条指令:,50,表,3-3,外部,RAM,与累加器,A,之间的数据传送指令,指令名称,累加器,A,与外,部,RAM,之间,的数据传送,指令格式,MOVX A,DPTR,MOVX DPTR,A,MOVX A,Ri,MOVX Ri,A,机器码,11100000,11110000,1110000 x,1111000 x,功能,A(DPTR),(DPTR)A,A(Ri),(Ri)A,指令周期,2,2,2,2,注:执行,过程中会使,/WR,、,/RD,有效。,51,前两条指令以,DPTR,为片外数据存储器,16,位地址指针,寻址范围达,64KB,。其功能是在,DPTR,所指定的片外数据存储器与累加器,A,之间传送数据。,后两条指令是用,R0,或,R1,作低,8,位地址指针,由,P0,口送出,寻址范围是,256B,。此时,,P2,口仍可用作通用,I/O,口。这两条指令完成以,R0,或,R1,为地址指针的片外数据存储器与累加器,A,之间的数据传送(,强烈要求注意,)。,52,注:由于外部,RAM,与内部,RAM,之间不能直接传送,因此当需要将外部,RAM,传送到内部,RAM,时,可通过累加器,A,作为中介。,例如:通过如下指令将外部,RAM 3FFFH,单元内容传送到内部,RAM 2FH,单元:,MOV DPTR,#3FFFH ;,将外部,RAM,地址以立即数方式传送到数,据指针,DPTR,中,MOVX A,DPTR ;,将外部,RAM 3FFFH,单元内容读到累加器,A,MOV 2FH,A ;,将累加器,A,中的内容传送到内部,RAM,的,2FH,单元中,53,【,例,3.1】,把外部,RAM,的,2000H,单元内容传送到外部,3000H,单元中(两外部单元之间的数据传送)。,MOV DPTR,#2000H,;,DPTR2000H,单元地址,MOVX A,DPTR,;,Acc2000H,单元内容,MOV DPTR,#3000H,;,DPTR3000H,单元地址,MOVX DPTR,A,;,3000H,单元,Acc,54,【,例,3.2】,将外部,RAM 2000H,2020H,单元,共,32,字节传送到以,3000H,为首址的外部,RAM,中。,对于标准,MCS-51,来说,在外部,RAM,之间进行批量数据传送时,第一步,先将外部,RAM,数据传送到内部,RAM,中;第二步,再把数据从内部,RAM,传送到外部,RAM,的目标地址。,参考程序如下:,55,;,先将外部,RAM,数据传送内部,RAM 30H,4FH,中,MOV R0,#30H,;,R0,存放内部,RAM,的始址,MOV R7,#20H,;,R7,存放数据传送的个数,即,控制循环的次数,MOV DPTR,#2000H,LOOP1:,MOVX A,DPTR,MOV R0,A,INC DPTR,INC R0,DJNZ R7,LOOP1,56,;,再将暂存于内部,RAM 30H,4FH,中的数据送外部,RAM,目,标地址中,MOV R0,#30H,MOV R7,#20H,MOV DPTR,#3000H,LOOP2:,MOV A,R0,MOVX DPTR,A,INC DPTR,INC R0,DJNZ R7,LOOP2,思考:这段程序有没有问题?,57,3.3.3,查表指令(,MOVC,),为了取出存放在程序存储器中的表格数据,,MCS-51,提供了两条查表指令,这两条指令的操作码助记符为“,MOVC,”,,其中“,C”,的含义是“,Code(,代码,)”,,表示操作对象是,程序存储器。,指令名称,查表指令,指令格式,MOVC A,A+DPTR,MOVC A,A+PC,机器码,10010011,10000011,功 能,A(A+DPTR),A(A+PC),指令周期,2,2,表,3-4,查表指令,58,注:(,1,)“,MOVC A,A+DPTR”,指令以,DPTR,作为基址,加上累加器,A,的内容后,所得的,16,位二进制数作为待读出的程序存储器单元地址,并将该地址单元的内容传送到累加器,A,中,,这条指令主要用于查表。,可在,ROM,的,64KB,范围内查表。,(,2,)而以,PC,为基地址的指令只能在(,PC,),+1,为起点以下,256B,范围内查表。,59,MOV DPTR,#2000H,;假设字模存放在,2000H,开始的程序存储器,中,通过该指令将字模首地址传送到,DPTR,寄存器中,MOV A,#03H,;把待显示的数码传送到累加器,A,中,MOVC A,A+DPTR,;,2000H+03H,,即,2003H,单元的内容,(4F),读,到累加器,A,中,MOV P1,A,;将数码“,3”,对应的字模码“,4F”,输出到,P1,口,ORG2000H,DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,例如在程序存储器中,依次存放,0,F,的七段数码显示器的字模码,3F,、,06,、,5B,、,4F,、,66,、,6D,、,7D,、,07,、,7F,、,6F,、,77,、,7C,、,39,、,5E,、,79,、,71,,则当需要在,P1,口输出某一数码,如“,3”,时,可通过如下指令实现:,60,从程序存储器中读出某一字节时,也可以使用,PC,内容作为基址,通过“,MOVC A,A+PC”,取出,但使用这条指令读取,ROM,中表格数据时,表格数据项必须位于该指令后,灵活性差。,例如:,MOV A,#03H,;把待显示的数码传送到累加器,A,中,MOVC A,A+PC,;,PC+03H,单元内容,(4F),读到累加器,A,中,DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,由于程序存储器只能读出,不能写入,因此,也就没有写程序存储器指令。,61,表,3-5,堆栈操作指令,指令名称,指令格式,机器码,功 能,指令周期,数据入栈,PUSH,direct,11000000,direct,SPSP+1,(SP)(direct),2,数据出栈,POP,direct,11010000,direct,(direct)(SP),SP SP-1,2,3.3.4,堆栈指令,62,例,1,:设,(30H)=X,,,(40H)=Y,,试利用堆栈作为缓冲存储,编制程序交换,30H,和,40H,单元中的内容。,解:,MOV SP,#70H,;令栈底地址位,70H,PUSH 30H,;,SP (SP)+1,71H X,PUSH 40H,;,SP (SP)+1,72H Y,POP 30H,;,30H Y,SP (SP)-1,POP 40H,;,40H X,SP (SP)-1,63,完成以上功能的程序如下,:,MOV A,03H ;(A)03H,PUSH DPH ;,保护,DPTR,高,8,位入栈,PUSH DPL ;,保护,DPTR,低,8,位入栈,MOV DPTR,2000H ;(DPTR)2000H,MOVC A,A+DPTR ;(A)(2000H+03H),POP DPL ;,弹出,DPTR,低,8,位,POP DPH ;,弹出,DPTR,高,8,位,(先进后出),例,2,:在外部,ROM,的,2000H,单元开始依次存放,0,9,的平方值,当前数据指针,(DPTR)=3A00H,用,查表指令,取出,2003H,单元的数据后,要求保持,DPTR,中的内容不变,。,64,表,3-6 MCS-51,交换指令,指令名称,字节交换,指令,低,4,位对调,累加器半字节交换,指令格式,XCH,A,Rn,XCH,A,direct,XCH,A,Ri,XCHD,A,Ri,SWAP,A,机器码,11001rrr,11000101,direct,1100011i,1101011i,11000100,功 能,A,与,Rn,内容对调,A,与,(direct),内容对调,A,与,(Ri),内容,对调,A,低,4,位与,(Ri),低,4,位对调,A,高,4,位与,A,低,4,位对调,指令周期,1,1,1,1,1,3.3.5,字节交换指令,整字节交换,半字节交换,半字节交换,65,【,例,3.4】,已知,(20H)=33H,,试说明下面程序段中每条指令的作用,并分析当指令执行完后,,R0,中的内容是什么?,MOV A,#20H,MOV R0,#0A7H,XCH A,R0,SWAP A,XCHD A,R0,;,交换,R0,与,A,中的内容,则,(,R0,)=20H,,,(,A,)=0,A7H,;A,中的高,4,位和低,4,位对调,则,(,A,)=,7AH,;,交换,(,R0,),与,A,中内容的低,4,位,,(A)=73H,(20H)=3AH,66,【,例,3.5】,试编程将片外,RAM 40H,单元的内容与,R1,的内容交换。,解:根据题意编程如下,MOV R0,#40H,;,指定,R0,为间址寄存器,MOVX A,R0,;,将片外,40H,单元的内容传送到,A,中,XCH A,R1,;,交换内容,MOVX R0,A,;,将交换后的数据送回片外,40H,单元中,?,67,68,69,3.4.1,加法指令,(,ADD,ADDC,),3.4,算术运算指令,3.4.2,减法指令,(,SUBB,),3.4.6,十进制调整指令,(,DA A,),3.4.4,乘法指令,(,MUL,),3.4.3,加,1,和减,1,指令,(,INC,DEC,),3.4.5,除法指令,(,DIV,),70,指令名称,指令格式,机器码,功能,指令周期,不带进位,加法指令,ADD,A,Rn,00101rrr,AA+Rn,1,ADD,A,direct,00100101,direct,AA+(direct),1,ADD,A,Ri,0010011i,AA+(Ri),1,ADD,A,#data,00100100,data,AA+data,1,带进位,加法指令,ADDC,A,Rn,00111rrr,AA+Rn+Cy,1,ADDC,A,direct,00110101,direct,AA+(direct)+Cy,1,ADDC,A,Ri,0011011i,AA+(Ri)+Cy,1,ADDC,A,#data,00110100,data,AA+data+Cy,1,表,3-7 MCS-51,加法指令,3.4.1,加法指令,71,(1),所有加法指令的目的操作数均是,累加器,A,,,可以将内部,RAM(00,FFH),、特殊功能寄存器以及,8,位立即数与累加器,A,相加,结果存放在累加器,A,中。,(2),执行加法指令将影响进位标志,Cy,、溢出标志,OV,、辅助进位标志,Ac,以及奇偶标志,P,。,加法运算时,若,b7,位有进位,则,Cy,为,1,;反之为,0,。,b7,有进位,表示两个无符号数相加时,结果大于,255,,累加器,A,只能存放和的低,8,位。,72,(4),在确定相加后进位标志,CY,的值时,总是把两个操作数作为无符号数直接相加而得出进位,CY,值。,若是两个带符号数相加,CY,没有意义,。,(3),在求和时,总是把操作数直接相加,而无须任何变换。,例如:若,A=11010011B,,,R1=11101000B,,执行指令,ADD A,R1,时,其算式表达为,:,11010011,+11101000,1 10111011,相加后,(A)=10111011B,。若认为是无符号相加,则,A,的值代表十进制数,187,;若认为是,带符号补码数,相加,则,A,的值为十进制负数,-69,。,73,计算机并不知道参加运算的两个数是无符号数,还是有符号数,程序员只能通过溢出标志,OV,来判别带符号数相加是否溢出。,对于带符号数来说,,b7,是符号位,(0,表示正数,,1,表示负数,),,且负数以补码形式出现。,于是当两个,正数相加,时,如果累加器,A,的,b7,为,1,,表示结果是负数,这是不可能的。即和大于,+127,;同理,当两个负数相加时,如果累加器,A,的,b7,为,0,,表示结果是正数,同样是不可能的。即和小于,-,128,。即在加法指令中,,溢出标志,OV,为,1,的条件是:两个操作数的符号相同,(,即,b7,位同为,0,或,1),,但结果的符号位相反。对于带符号数加法运算来说,当溢出标志,OV,为,1,,结果不正确。,74,(5),两数相加后,若,b3,位向,b4,位进位,则,Ac,为,1,;反之,AC,为,0,。,(6),由于奇偶标志,P,总是体现累加器,A,中“,1”,的奇偶性。若,A,中结果里有奇数个“,1”,,则,P=1,,否则,P=0,。,(7),带进位加法指令中的累加器,A,除了加源操作数外,还需要加上程序状态字,PSW,寄存器中的进位标志,Cy,。,设置带进位加法指令的目的是为了实现多字节加法运算。,75,CLRC,;,将进位标志清零,MOV A,30H,;将被加数低,8,位传送到累加器,A,中,ADD A,32H,;与加数低,8,位,即,32H,单元内容相加,结果存放在累,加器,A,中,MOV,2,0H,A,;将和的低,8,位保存到,2,0H,单元中,MOV A,31H,;将被加数高,8,位传送到累加器,A,中,ADDC A,33H,;与加数高,8,位,即,33H,单元内容相加,结果存放在累,加器,A,中,由于低,8,位相加时,结果可能大于,0FFH,,,产生进位,因此在高,8,位相加时用,ADDC,指令,MOV,2,1H,A,;,将和的高,8,位保存到,2,1H,单元中,例如:可通过如下指令将存放在,30H,、,31H,单元中的,16,位二进制数与存放在,32H,、,33H,单元中的,16,位二进制数相加,假设结果存放在,20,H,、,2,1H,中。,76,表,3-8 MCS-51,减法指令,指令名称,指令格式,带借位,减法指令,SUBB,A,Rn,SUBB,A,direct,SUBB,A,Ri,SUBB,A,#data,机器码,10011rrr,10010101,direct,1001011i,10010100,data,功 能,AA,Rn,Cy,AA,(direct),Cy,AA,(Ri),Cy,AA,data,Cy,指令周期,1,1,1,1,3.4.2,减法指令,77,MCS-51,只有带借位的减法指令,被减数是累加器,A,,减数可能是内部,RAM,、,SFR,或立即数,操作结果存放在累加器,A,中。与加法指令类似,操作结果同样会影响标志位:,Cy,为,1,,表示被减数小于减数,产生借位;,Ac,为1,表示,相减时,,b3,位向,b4,位借位;反之为,0,。,奇偶标志,P,总是体现累加器,A,中“,1”,的奇偶性,因此,P,也会变化。,78,溢出标志,OV,用于判别两个带符号数相减后,差是否超出,8,位带符号数所能表示的范围,(,-,128+127),。当两个异号数相减时,差的符号与被减数相反,则溢出标志,OV,为,1,,结果不正确。例如,被减数为正数,减数为负数,相减后,结果应该是正数,但如果累加器,A,的,b7,为,1,,即负数,则表明结果不正确。,由于,MCS-51,指令系统只有带借位的减法指令,因此,当需要执行不带借位的减法指令时,可先通过“,CLR C”,指令,将进位标志,Cy,清零。,79,【,例,3.6】,用减法指令求内部,RAM,两单元的差值,(,假设被减数存放在内部,RAM 30H,单元中,减数存放在,31H,单元中,差放在,40H,单元中。,MOVA,30H,;先把被减数传送到累加器,A,中,CLR C,;进位标志,Cy,清零,SUBB A,31H,;与,31H,单元内容相减,MOV 40H,A,;将结果传送到,40H,单元中,80,表,3-9 MCS-51,加,1,指令,指令名称,指令格式,机器码,功 能,指令周期,增量指令,INC,A,00000100,AA+1,1,INC,Rn,00001rrr,RnRn+1,1,INC,direct,00000101,direct,(direct)(direct)+1,1,INC,Ri,0000011i,(Ri)(Ri)+1,1,INC,DPTR,10100011,DPTRDPTR+1,2,3.4.3,加,1,和减,1,指令,1.,加,1,指令,81,加,1,指令不影响标志位,只有操作对象为累加器,A,时,才影响奇偶标志位,P,。,尽管加,1,指令与加数为,1,的加法指令同样会使操作数增,1,,但彼此并不完全相同,例如:,INC A,;通过增量指令使累加器,A,内容加,1,该指令除了影响奇偶标志位,P,外,不影响其他标志位。,ADD A,#01H,;通过加法指令使累加器,A,内容加,1,该指令同样会使累加器,A,内容加,1,,但这条指令将影响,Cy,、,OV,、,Ac,以及,P,标志位,。,82,表,3-10 MCS-51,减,1,指令,指令名称,指令格式,机器码,功 能,指令周期,减,1,指令,DEC,A,00010100,AA,1,1,DEC,Rn,00011rrr,RnRn,1,1,DEC,direct,00010101,direct,(direct)(direct),1,1,DEC,Ri,0001011i,(Ri)(Ri),1,1,2.,减,1,指令,83,表,3-11 MCS-51,乘法指令,指令名称,指令格式,机器码,功 能,指令周期,AB,MUL AB,10100100,BAAB,4,被乘数放在累加器,A,中,(8,位无符号数,),;,乘数放在寄存器,B,中,(8,位无符号数,),;,乘积的高,8,位放在寄存器,B,中,(16,位无符号数,),;,乘积的低,8,位放在累加器,A,中,。,3.4.4,乘法指令,84,【,例,3-14】,两个无符号乘数分别放在,片外,的,40H,和,41H,单元中,编制程序使它们相乘,并把积的低,8,位和高,8,位分别
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服