收藏 分销(赏)

MCS-51单片机指令系统及程序设计.ppt

上传人:s4****5z 文档编号:13985113 上传时间:2026-05-22 格式:PPT 页数:129 大小:1.10MB 下载积分:10 金币
下载 相关 举报
MCS-51单片机指令系统及程序设计.ppt_第1页
第1页 / 共129页
MCS-51单片机指令系统及程序设计.ppt_第2页
第2页 / 共129页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,10,章,MCS-51,单片机指令系统 及程序设计,内容安排,一,.MCS-51,指令寻址方式,二,.MCS-51,单片机指令系统,三,.,汇编语言及程序设计,10.1 MCS-51,指令寻址方式,指令,:是计算机用于控制某个功能部件完成某一指定动作的指示和命令,指令系统,:所有指令的集合,MCS,51,汇编语言指令,操作码,操作数,操作数的,形式,:,指令中直接携带着参加操作的数据,该类数据前面加,“,#”,号,表示立即数。例如,,#35H,、,#25,、,#1001B,等,寄存器中存放着操作数,指令中给出被访问寄存器的名字,如寄存器,A,和寄存器,B,操作数在内部,RAM,的某个单元中存放着,操作数在外部,RAM,的某个单元中存放着,寄存器中存放着操作数的地址,能做该类操作数形式的寄存器只能是各工作区中的,R0,和,R1,,以及,DPTR,,该类寄存器前应加,“,”,符号,操作数在外设中存放着,操作数在四个接口的锁存器中存放着,寻址方式,:指,CPU,寻找操作数或操作数地址的方法,寻址方式,寄存器寻址,寄存器间接寻址,基址加变址寄存器间接寻址,立即寻址,直接寻址,位寻址,相对寻址,1.,立即寻址,操作数直接由指令给出,通常紧跟指令操作码之后的字节是操作数,该操作数被称为立即数,立即数,:,8/16,位二进制数,如,:,MOV A,,,#7AH,MOV DPTR,,,#1234H,注意,:,立即数前加“,#,”,号,以区别直接地址,如:,MOV A,,,#30H,;,(,A,),30H,MOV A,,,30H,;,(,A,),(,30H,),立即寻址方式的指令是双字节的,(第,1,个字节,为操作码,第,2,个字节是操作数),操作数是放在,ROM,内的常数,2.,直接寻址,指令中直接给出操作数所在的单元地址或位地址,直接寻址可访问的存储空间,:,(,1,)内部,RAM,低,128,个单元,在指令中直接以单元地址形式给出,地址范围,00H7FH,(,2,)特殊功能寄存器,SFR,直接寻址是,SFR,惟一,的寻址方式,,SFR,可以用单元地址给出,也可用寄存器符号形式给出,(,但,A,、,AB,、,DPTR,除外,),(,3,),211,个位地址空间,内部,RAM,中可位寻址的,20H2FH,单元对应的,128,个位地址空间,11,个,SFR,中,83,个可用的位地址空间,注意:,适当选择,SFR,。,寻址,SFR,时,可以用直接地址,也可以用寄存器名,但后者更容易理解和阅读,如,:,MOV A,,,0D0,H,;,(,A,),(,D0H,),MOV A,,,PSW,;,(,A,),(,PSW,),直接寻址,适当选择累加器的表达式,A,ACC,E0H,累加器,A,表达方式,;,05E0H,双字节,如,:,INC A,INC ACC,INC 0E0H,;,04H,单字节,寄存器寻址,注意地址的区别,(位地址与字节地址),如:,MOV A,,,30H,;(,A,),(,30H,),字节操作,MOV C,,,30H,;(,C,),(,30H,),位操作,操作数在寄存器中,3.,寄存器寻址,可用寄存器,有:,(,1,)四组工作寄存器,R0R7,共,32,个工作寄存器,由,PSW,中的,RS1,、,RS2,两位状态来选择当前寄存器组,(,2,),SFR,中有,A,、,AB,、,DPTR,及,CY,如,:,MOV R3,,,#12H,MOV A,,,R3,;,(,A,),(,R3,),注:,寄存器,B,只有在执行乘除法指令时,才是寄存器寻址方式,如,:,MUL AB,;,B,寄存器寻址,MOV A,,,B,;,B,直接寻址,4.,寄存器间接寻址,指令给出的寄存器中存放的不是操作数本身,而是操作数的单元地址,用来存放所寻操作数地址的寄存器称为,指针,(,1,)用于间接寻址的寄存器有:,R0,、,R1,、,DPTR,及,SP,(,2,)寄存器间接寻址也需要以寄存器符号的形式表示,但需在寄存器名前加“,”,,以区别寄存器寻址方式,如:,MOV A,,,R1,(,3,)寄存器间接寻址可寻址范围如下:,内部,RAM,低,128,单元,地址范围,00H7FH,,用,R0,、,R1,和,SP,作为间接寄存器,(堆栈,SP,),与,P2,口配合使用,用,Ri,指示低,8,位地址,可寻址片外,RAM,或,I/O,口的,64KB,区域,如:,MOVR1,,,#18H,MOVP2,,,#20H,MOVX A,,,R1,;,将片外,RAM,单元(,2018,)(,A,),DPTR,间接寻址寄存器,可寻址片外,ROM,或片外,RAM,及,I/O,口的各自,64kB,如:,MOV DPTR,,,#2018H,MOVX A,,,DPTR,;,将片外,RAM,单元(,2018,)(,A,),注意:,寄存器间接寻址,拓宽单片机寻址范围,寄存器间接寻址方式不能用于对,SFR,寻址,如:,MOV R0,,,#0F0H,MOV A,,,R0,B,地址,5.,基址加变址寄存器间接寻址,方式,:以,DPTR,或,PC,作为基址寄存器,以,A,作为变址寄存器,并以两者内容相加形成新的,16,位地址作为操作数地址,寻找该地址,读取数据,功能,:用于,读出,ROM,中的数据到,累加器,A,中,如:,MOV A,,,#50H,;机器码,7450H,MOVC A,,,A+PC,;机器码,83H,A,ROM,01110100,01010000,10000011,00110111,PC,PC,PC+2,PC+3,(,A,),变址寻址指令有:,(,单字节两周期指令,),PC,值不变,PC,值变,MOVC A,,,A+PC,MOVC A,,,A+DPTR,JMP A+DPTR,A,中的数是无符号数,范围,00HFFH,注意,:,变址寻址方式,只能对,ROM,(包括片外、片内),寻址,因此,只能用于读取数据,,而不能用于存放数据,主要用于,查表,性质的访问,6.,相对寻址,如,:,JC,rel,假设:,rel,=85H,,,CY=1,85H,是负数,其,16,位二进制补码,FF85H,2007H,ROM,01000000,10000101,PC+2,PC,2005H,PC,1F8CH,常用符号表示,用于访问,ROM,,只出现在,转移指令,中,“寻址”不是寻找操作数的地址,而是要得到程序跳转地址,PC,值,以,PC,的,当前值,加上指令中给出的相对偏移量,(,rel,),形成转移地址,相对偏移量,(,rel,),是一个,带符号的,8,位二进制数,,以,补码,形式出现,因此程序的转移范围是以,PC,当前值为中心,-128+127,字节之间,7.,位寻址,MCS-51,设有独立的位处理器,又称为布尔处理器,可对位地址空间的,211,个位地址进行运算和传送操作,(,1,),位寻址范围,片内,RAM,低,128,字节中的位寻址区,单元地址为,20H,2FH,,共,16,个单元的,128,位,位地址为,00H,7FH.,片内,RAM,高,128,字节中的,11,个字节地址能被,8,整除的特殊功能寄存器,实有位地址,83,位,(,2,)位地址位在指令中的,4,种表达方式,以,PSW,中,AC,位进行操作为例,直接使用位地址形式,MOV C,,,0D6H,;(,0D6H,)(,C,),,D6H,是,PSW,的第,6,位,单元地址加位序号的表示形式,MOV C,,,0D0H.6,;(,0D0H.6,)(,C,),,D0H.6,是,PSW,的第,6,位,位的符号地址(位名称)的形式,MOV C,,,AC,;(,AC,)(,C,),,P,是,PSW,的第,6,位,注,:对于部分特殊功能寄存器,其各个位均有一个特定的名字,所以可以用它们的位名称来访问该位,专用寄存器符号加位序号的形式,MOV C,,,PSW.6,;(,PSW.6,)(,C,),,PSW.6,表示,PSW,的第,6,位,CY,AC,F0,RS1,RS0,OV,P,D7,D6,D5,D4,D3,D2,D1,D0,PSW,D0H,总结,:,寻址方式针对的对象是源操作数和目的操作数,对于,MCS-51,:,源操作数,寻址方式:,立即,、直接、寄存器、间接、,变址,、位寻址,目的操作数,寻址方式:直接、寄存器、间接、位寻址,MCS-51,单片机编址方式特点:一是内部,RAM,与内部,I/O,端口统一编址;二是外部,RAM,与外部,I/O,端口也是统一编址,这说明对,I/O,口的操作与同,RAM,操作一样,即对内部,RAM,的直接寻址方式的一切操作,内部,I/O,口同样适用。对于,ROM,来说,与,RAM,严格分开,操作不同,20H2FH,1.,数据,传送类指令,:,29,条,用途,:主要用于数据的保存及交换等场合,操作,:是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数,标志位影响,:不影响任何标志位,但目标地址为,A,时,只会对奇偶标志,P,有影响,数据传送,数据交换(,5,),栈操作(,2,),数据传送类指令,内部数据传送指令(,MOV,),16,外部数据传送指令(,MOVX,),4,ROM,与,A,传送指令(,MOVC,),2,10.2 MCS-51,指令系统,(,1,),内部数据传送指令,(,MOV,),格式,:,MOV,目的操作数,源操作数,功能,:把源操作数指定的字节变量,复制,到目的操作数所规定的单元或寄存器中,源字节不变,注意,:该指令的源操作数和目的操作数都在单片机内部,(可以是片内,RAM,地址,也可以是,SFR,地址),,源操作数也可以是立即数,立即数传送指令,(,5,条),源操作数是立即数,功能,:是把立即数送到指定单元或寄存器,8,位立即数传送指令,16,位立即数传送指令,8,位立即数传送指令,(,4,条),MOV A,,,#data,;,data,(,A,),MOV,Rn,,,#data,;,data,(,Rn,),MOV ,Ri,,,#data,;,data,(,Ri,),MOV direct,,,#data,;,data,(,direct,),2,个字节,3,个字节,例,10-1,:已知(,R0,),=30H,,问,8051,执行如下指令后,累加器,A,、,R4,、,30H,和,31H,单元中的内容是什么?,MOV A,,,#10H,MOV R4,,,#36H,MOV R0,,,#7AH,MOV 31H,,,#01H,解,:,8051,执行上述指令后的结果为:,(,A,),=10H,,(,R4,),=36H,,(,30H,),=7AH,,(,31H,),=01H,16,位立即数传送指令(,1,条),MOV DPTR,,,#data16,;,data16,(,DPTR,),3,个字节,如,:,MOV DPTR,,,#2009H,MOVX A,,,DPTR,功能,:是将立即数的高,8,位送到,DPH,,立即数的低,8,位送到,DPL,注意,:,惟一,的一条,16,位数传送指令;,16,位立即数一般看作片外,RAM/ROM,的地址,是专门配合外部数据传送指令使用,内部,RAM,(,Rn,、,片内,RAM,、,SFR,),与累加器,A,之间数据传送,(,6,条),MOV A,,,Rn,;(,Rn,)(,A,),MOV,Rn,,,A,;(,A,)(,Rn,),MOV A,,,Ri,;(,Ri,)(,A,),MOV ,Ri,,,A,;(,A,)(,Ri,),MOV A,,,direct,;(,direct,)(,A,),MOV direct,,,A,;(,A,)(,direct,),2,个字节,1,个字节,注意,:,Ri,是寄存器间接寻址,Direct,是,8,位直接地址,(片内,RAM,低,128,个单元及,SFR,地址),,属于直接寻址方式,例,10-2,:读下面程序,写出,41H,、,42H,单元内容,MOV R0,,,#40H,MOV R1,,,#41H,MOV A,,,#11H,MOV 40H,,,#32H,MOV R1,,,A,MOV 42H,,,R0,解,:,(,41H,),=11H,,(,42H,),=32H,内部,RAM,中,Rn,、,SFR,与片内,RAM,之间数据传送,(,5,条),MOV direct,,,Rn,;(,Rn,)(,direct,),MOV,Rn,,,direct,;(,direct,)(,Rn,),MOV direct,,,Ri,;(,Ri,)(,direct,),MOV ,Ri,,,direct,;(,direct,)(,Ri,),MOV direct2,,,direct1,;(,direct1,)(,direct2,),3,个字节,2,个字节,2009H,ROM,direct1,direct2,2007H,2006H,操作码,如,:,MOV P2,,,P1,MOV P1,,,R1,总结,:,内部传送指令,MOV,相互关系见下图,每条指令格式和功能由厂家规定,用户只能按规定使用,不得任意制造指令,如,:,MOV R7,,,R1,MOV R6,,,R3,A,(累加器),Ri,(,间接地址,),direct,(,直接地址,),Rn,(寄存器),#data,(立即数),要清楚每种寻址方式的寻址范围,如,:,MOV R0,,,#90H,MOV A,,,R0,因为,90H,是,P1,口的物理地址,而,P1,为,SFR,,只能直接寻址,如,:,MOV 20H,,,0A1H,0A1H,在内部,RAM,中无意义,以累加器,A,为目的寄存器的传送指令会影响,PSW,中的奇偶标志位,其余传送指令对所有标志位均无影响,(,2,),外部数据传送指令,(,MOVX,):,4,条,功能,:实现外部,RAM,(或,I/O,接口)和,累加器,A,之间的数据传送,用,DPTR,进行间接寻址的指令,MOVX A,,,DPTR,;(,DPTR,)(,A,),MOVX DPTR,,,A,;(,A,)(,DPTR,),1,个字节,DPTR,为,16,位数据指针,该指令可访问外部,RAM,的,64KB,字节区,地址范围是,0000H,FFFFH,,地址低,8,位由,P0,口输出,地址高,8,位由,P2,口输出,数据通过,P0,口读入,/,写出,用,Ri,进行间接寻址的指令,MOVX A,,,Ri,;(,Ri,)(,A,),MOVX ,Ri,,,A,;(,A,)(,Ri,),1,个字节,如,:,MOV,P2,,,#20H,MOVR0,,,#0FEH,INCR0,MOVXA,,,R0,MOVDPTR,,,#20FEH,INCDPTR,MOVXA,,,DPTR,寻址范围,:,若外部,RAM,地址范围,0000H00FFH,,可用,Ri,间接寻址进行数据传送,,8,位地址足够使用,若外部,RAM,地址,(,0100HFFFFH,),单元数据传送,须用,P2,口输出高,8,位地址,用,Ri,表示低,8,位地址,,P0,口分时作低,8,位地址线和数据线,,P2,口应事先预置,例,10-3,:将内部,50H,单元中的数,X,送到外部,2500H,单元中,再送入内部,40H,单元,最后通过间接寻址的方式再送入内部,30H,单元中,程序,:,MOV A,,,50H,;(,50H,)(,A,),MOV DPTR,,,#2500H,;,#2500H,(,DPTR,)建立外部数据存储器指针,MOVX DPTR,,,A,;(,A,)(,2500H,),;把,A,中的数送到了外部,2500H,单元中,MOVX A,,,DPTR,;(,DPTR,)(,A,)把,DPTR,所指向的外部,;,2500H,单元中的数送到累加器,A,中,MOV 40H,,,A,;(,A,)(,40H,)通过累加器,A,把,X,送到内部,;,40H,单元中,MOV R0,,,#30H,;,#30H,(,R0,),,R0,做内部,RAM,的数据指针,MOV R0,,,40H,;(,40H,)(,R0,)把内部,40H,中的数通过,;间接寻址方式送入,R0,指针所指向的,30H,单元中,(,3,),ROM,与累加器,A,传送数据指令,(,MOVC,):,2,条,MOVC A,A+DPTR,;(A)+(DPTR)(A),MOVC A,A+PC,;(PC)+1(PC),(A)+(PC)(A),功能,:是把累加器,A,作为变址寄存器,,DPTR,、,PC,作为基址寄存器,二者内容相加得到,ROM,某单元地址,再把该地址单元内容送到,A,中,指令执行后,不改变基址寄存器(,DPTR,、,PC,)内容。主要用于,查表,,即完成从,ROM,中读取数据的功能,1,个字节,注意,:,这两条指令使用基址寄存器不同,相应地适用范围也不同,第一条指令以,DPTR,为基址寄存器,查表时用于存放表格的起始地址,通过指令,MOV DPTR,,,#data16,,,对其赋值,因此该指令适用范围较广,表格常数可以设置为,64KBROM,中的任何位置,第二条指令以,PC,作为基址寄存器,由于,A,中为,8,位无符号数,使该指令查表范围以,PC,当前值,开始向后,256,个地址范围,查表时,PC,的当前值不一定恰好是表的起始地址,因此常常需要在这条指令前安排一条加法指令,以便把,PC,中当前值修正为表的起始地址,A,的值包含两部分:对表的始址的偏移量和修正量,此修正量是查表指令的下一条指令到表首地址的距离,即,修正量,=,表首地址,-PC,当前值,用户不能修改,PC,值,例,10-4,:,已知累加器,A,中有一个,0,9,范围内的数,用以上查表指令编出能查出,0,9,的平方值的程序。设平方表首地址为,2000H,方法二,:采用,PC,作为基址寄存器,程序:,1FF9H MOV A,,,#data,1FFBH ADD A,,,#02H,1FFDH MOVC A,,,A+PC,1FFEH SJMP$,2000H DB 0,2001H DB 1,2002H DB 4,2009H DB 81,END,方法一,:采用,DPTR,作为基址寄存器,程序:,MOV DPTR,,,#2000H,MOVC A,,,A+DPTR,(,4,),堆栈操作指令,(,PUSH,、,POP,):,2,条,功能,:分别用于保护现场和恢复现场,进栈指令,PUSH,用于保护片内某个单元内容,出栈指令,POP,用于恢复片内某个单元内容,PUSH direct,;(,SP,),+1,(,SP,),(,direct,)(,SP,),POP direct,;(,SP,)(,direct,),(,SP,),-1,(,SP,),2,个字节,特点,:堆栈中的数据是“后进先出,”,方式,由堆栈指针,SP,自动跟踪栈顶地址,MCS-51,单片机堆栈编址采用向上生长方式,即栈底占用较低地址,栈顶占用较高地址,堆栈操作指令,均为,直接地址,寻址方式,例,10-5,:设(,30H,),=X,,(,40H,),=Y,,,试利用堆栈区域实现,30H,和,40H,单元中的数据交换,注意,:使用栈操作指令时,应注意指令操作码后紧跟,直接地址,,要注意书写格式,PUSH A,POP A,PUSH R0,POP R0,PUSH ACC,POP E0H,PUSH 00H,POP 00H,改正,MOV SP,,,#60H,;设栈底的地址为,60H,PUSH 40H,;,Y,(,61H,),PUSH 30H,;,X,(,62H,),POP 40H,;,X,(,40H,),POP 30H,;,Y,(,30H,),(,5,),数据交换指令,:,5,条,整字节交换指令,(,XCH,),XCH A,,,Rn,;(,A,),(,Rn,),XCH A,,,Ri,;(,A,),(,(,Ri,),XCH A,,,direct,;(,A,),(,direct,),1,个字节,2,个字节,功能,:将累加器,A,的内容与内部,RAM,、,SFR,中的内容互换,影响标志位,低半字节交换指令,(,XCHD,),XCHD A,,,Ri,;(,A,),30,(,Ri,),30,功能,:累加器,A,的低四位与片内,RAM,某单元的低四位交换,高四位不变,例,10-6,:利用数据交换指令,将,60H,中的低四位,BCD,码转换成,ASC,码,并将结果存到外部,2500H,中,注意,:数据传送类指令在程序设计中使用频率最高的一类指令;一般优先选用字节少的指令,提高软件抗干扰能力,MOV R0,,,#60H,;,#60H,(,R0,),MOV A,,,#30H,;,#30H,(,A,),XCHD A,,,R0,;(,A,),30,(,R0,),30,MOV DPTR,,,#2500H,;,#2500H,(,DPTR,),MOVX DPTR,,,A,;(,A,)(,DPTR,),累加器,A,高低半字节交换指令,(,SWAP,),SWAP A,;,A,74,A,30,功能,:将累加器,A,中的高,4,位与低,4,位内容互换,不影响标志位,1,个字节,2.,算术运算类指令,:,24,条,功能,:执行加、减、乘、除法四则运算和加,1,、减,1,操作以及十进制的调整,特点,:,支持,8,位无符号数操作,借助溢出标志可对带符号数进行补码运算,算术运算类指令执行结果影响,PSW,加法指令,带借位减法指令(,4,),加,1,、减,1,指令(,9,),算术运算类指令,乘法和除法指令(,2,),十进制调整指令(,1,),不带进位加法指令(,4,),带进位加法指令(,4,),(,1,),加法指令,:,8,条,不带进位,的加法指令,(,4,),ADD A,,,#data,;(,A,),+data,(,A,),ADD A,,,direct,;(,A,),+,(,direct,)(,A,),ADD A,,,Rn,;(,A,),+,(,Rn,)(,A,),ADD A,,,Ri,;(,A,),+,(,Ri,)(,A,),2,个字节,1,个字节,功能,:把源地址所指示的操作数和累加器,A,中操作数相加,并把两数之和保留在累加器,A,中,使用时应,注意的问题,:,参加运算的两个操作数和操作结果都必须是,8,位二进制数,其中一个操作数必须在,A,中,且运算结果也在,A,中,对,PSW,中所有标志位产生影响,参加运算的两个二进制数可被“看作”无符号数(,0,255,),也可以被“看作”有符号数的补码(,-128,+127,)。计算结果为补码形式,无符号数运算时,判断运算结果是否超出范围(,0,255,),看,CY,,若,CY=1,,,表示运算结果,255,,,若,CY=0,,,表示运算结果,255,;,带符号数运算时,判断运算结果是否超出范围(,-128,+127,),看,OV,,若,OV=C,8,C,7,=1,,,表示运算结果溢出,若,OV=0,,,表示运算结果有意义,例,10-7,:编程求,9AH+75H,,,并分析对,PSW,相关标志位的影响,若把两个操作数看成无符号数,,CY=1,,超出无符号数的表示范围(,0255,),考虑,CY,位,则操作结果为,271,若把两个操作数看成带符号数,,OV=0,,无溢出,(,-102,),+117=15,,结果正确,解,:,MOV A,,,#9AH,ADD A,,,#75H,带,进位,的加法指令,(,4,),ADDC A,,,#data,;(,A,),+data+,(,CY,)(,A,),ADDC A,,,direct,;(,A,),+,(,direct,),+,(,CY,)(,A,),ADDC A,,,Rn,;(,A,),+,(,Rn,),+,(,CY,)(,A,),ADDC A,,,Ri,;(,A,),+,(,Ri,),+,(,CY,)(,A,),2,个字节,1,个字节,功能,:将源操作数、累加器,A,和,CY,中的值相加,并把操作结果保留在累加器,A,中,用途,:常用于多字节加法运算,注意,:,该类指令执行结果将影响标志位,CY,、,AC,、,OV,、,P,使用该类指令前,应对,CY,清零,CLR C,例,10-8,:已知:(,A,),=85H,、(,R0,),=30H,、(,30H,),=11H,、(,31H,),=0FFH,、(,CY,),=1,,,试问,8051,执行如下指令后累加器,A,和,CY,中的值是多少?,ADDC A,,,R0 ADDC A,,,31H ADDC A,,,R0 ADDC A,,,#85H,操作结果,:,A=B6H,,,CY=0 A=85H,,,CY=1,A=97H,,,CY=0 A=0BH,,,CY=1,(,2,),带借位减法指令,:,4,条,SUBB A,,,#data,;(,A,),-data-,(,CY,)(,A,),SUBB A,,,direct,;(,A,),-,(,direct,),-,(,CY,)(,A,),SUBB A,,,Rn,;(,A,),-,(,Rn,),-,(,CY,)(,A,),SUBB A,,,Ri,;(,A,),-,(,Ri,),-,(,CY,)(,A,),2,个字节,1,个字节,功能,:,把累加器,A,中操作数减去源地址所指操作数及指令执行前的,CY,值,并把结果保留在累加器,A,中,使用时应,注意的问题,:,参加运算的两个操作数和操作结果都必须是,8,位二进制数,其中一个操作数必须在,A,中,且运算结果也在,A,中,对,PSW,中所有标志位产生影响,在加法运算中,,CY,、,AC,、,C,8,、,C,7,表示相应的进位,在减法运算中,,CY,、,AC,、,C,8,、,C,7,表示相应的借位,无符号数减法运算存在借位问题,无溢出问题;只有带符号数减法运算才有溢出问题,由,OV,判断,,OV=1,溢出,否则无溢出,MCS-51,指令中,,没有,不带,CY,的减法指令(,SUB,),,如果想不考虑借位位,就在该减法指令前加一条,CY,的清零指令,CLR C,例,10-9,:已知:(,A,),=A9H,、(,20H,),=98H,,,试问,8051,执行如下指令后累加器,A,和,CY,中的值是多少?,执行结果,:,(,A,),=11H,,(,PSW,),=00H,CLR C,MOV A,,,#0A9H,MOV R0,,,#20H,MOV 20H,,,#98H,SUBB A,,,R0,(,3,),加,1,、减,1,指令,:,9,条,加,1,指令(又称增量指令),:,5,条,INC A,;(,A,),+1,(,A,),INC,Rn,;(,Rn,),+1,(,Rn,),INC,Ri,;(,Ri,),+1,(,Ri,),INC DPTR,;(,DPTR,),+1,(,DPTR,),INC direct,;(,direct,),+1,(,direct,),注意,:,只有第一条指令影响,PSW,的,P,标志位,其余四条都不影响标志位,指令,INC DPTR,是,MCS-51,指令中惟一一条,16,位算术运算指令,1,个字节,2,个字节,例,10-10,:设,20H21H,单元存放一个,16,位二进制数,X1,(高,8,位存入,21H,单元),,30H31H,单元存放另一个,16,位二进制数,X2,(高,8,位存入,31H,单元),求,X1+X2,,,和存入,20H21H,,,设两数之和不超过,16,位,INCR1,MOVA,,,R0,ADDCA,,,R1,MOV R0,,,A,SJMP$,END,程序,:,ORG2000H,CLRC,MOVR0,,,#20H,MOVR1,,,#30H,MOVA,,,R0,ADDA,,,R1,MOV R0,,,A,INCR0,减,1,指令,:,4,条,DEC A,;(,A,),-1,(,A,),DEC,Rn,;(,Rn,),-1,(,Rn,),DEC,Ri,;(,Ri,),-1,(,Ri,),DEC direct,;(,direct,),-1,(,direct,),注意,:,只有第一条指令影响,PSW,的,P,标志位,其余三条都不影响标志位,没有,DEC DPTR,指令!,可用,DEC DPH,和,DEC DPL,指令实现,1,个字节,2,个字节,(,4,),乘法和除法指令:,2,条,乘法指令,:,1,条,MUL AB,;(,A,),(,B,)(,B,)(,A,),注意,:,乘法指令中,,A,、,B,只能是寄存器寻址,执行乘法指令需要,4,个机器周期,对标志位的影响,:,CY=0,;,P,为累加器,A,的奇偶校验位;当积大于,255,(即,B,中的内容不为,0,),时,则,OV=1,,否则,OV=0,1,个字节,功能,:将累加器,A,和累加器,B,中,8,位无符号,数进行乘运算,结果的高八位存入,B,中,低八位存入,A,中,除法指令,:,1,条,DIV,AB,;(,A,),(,B,),(,A,)(,B,),功能,:将累加器,A,和累加器,B,中,8,位无符号,数进行除运算,商数存入,A,中,余数存入,B,中,应用乘除法指令注意,:操作数只能是,8,位无符号数;,A,、,B,只能是寄存器寻址;除法指令中,(,B,),0,,否则,OV=1,;关注结果的存放位置,对标志位的影响,:,CY=0,;,P,为累加器,A,的奇偶校验位;当除数为,0,时,除法无意义,,OV=1,,否则,OV=0,注意,:,除法指令中,,A,、,B,只能是寄存器寻址,执行除法指令需要,4,个机器周期,1,个字节,(,5,),十进制调整指令:,1,条,DA,A,功能,:用于,BCD,码,加法,运算,调整规则,:,若,AC=1,或(,A,),30,9,,则(,A,),+06H,(,A,),若,CY=1,或(,A,),74,9,,则(,A,),+60H,(,A,),1,个字节,注意,:,DA,指令使用时,应跟在,ADD,或,ADDC,指令之后,不能用,DA,指令对,BCD,码减法操作进行直接调整,DA,指令不影响,OV,借助标志位可实现多位,BCD,码加法结果的调整,BCD,码,加法,如果两个,BCD,数相加结果也是,BCD,数,则该加法为,BCD,加法,MCS-51,没有专门的,BCD,码加法指令,实现,BCD,码加法,方法,:在一条加法指令,(,ADD,、,ADDC,),后,加上,DA,指令,例,10-11,:编写程序完成,78+53,的加法程序,并对调整过程进行分析,ORG2000H,MOV A,,,#78H,ADD A,,,#53H,DA A,SJMP$,END,程序,:,BCD,码,减法,如果两个,BCD,数相减结果也是,BCD,数,则该减法为,BCD,减法,MCS-51,没有专门的,BCD,码减法指令,实现,BCD,码减法,思想,:采用,BCD,补码运算法则,,被减数,-,减数,被减数,+,减数,的补码,然后,对其和用,DA,指令调整,实现,BCD,码减法,步骤,:,求,BCD,减数的补码:,9AH,减数,被减数加,BCD,减数的补码,进行十进制加法调整,DA,例,10-12,:,在,30H,和,31H,中分别存有被减数,91,和减数,36,,试编程求差,结果以,BCD,码形式存入,32H,中,程序,:,ORG2100H,CLRC,MOV A,,,#9AH,SUBBA,,,31H,ADD A,,,30H,DA A,MOV32H,,,A,SJMP$,END,高四位出现非,BCD,码,高四位加,6,调整,进位,结果仍为,BCD,码,+91,BCD,=10010001B,11110101B,1,01010101B,01100000B,+,-36,BCD,=00110110B,9A,=10011010B,01100100B,3.,逻辑运算及位操作指令,:,36,条,(,1,),逻辑,运算指令,:,20,条,功能,:对两,8,位二进制数进行与、或、非和异或逻辑运算,对标志位的影响,:除了以累加器,A,为目标寄存器指令外,其余指令均不会影响,PSW,中任何标志位,逻辑“与”、“或”、“异或”指令,:,18,条,ANL,(,ORL,、,XRL,),A,,,Rn,ANL,(,ORL,、,XRL,),A,,,Ri,ANL,(,ORL,、,XRL,),A,,,direct,ANL,(,ORL,、,XRL,),direct,,,A,ANL,(,ORL,、,XRL,),A,,,#data,ANL,(,ORL,、,XRL,),direct,,,#data,2,个字节,3,个字节,1,个字节,注意,:,“与”指令有屏蔽作用,“或”指令有置位作用,“异或,”,指令有清零作用,MOV A,,,#38H,ANL A,,,#0FH,MOV A,,,#38H,ORL A,,,#0FH,MOV A,,,#38H,XRL,A,,,#38H,如,:,例,9-13,:已知片外,RAM 2000H,单元中有一个数,8FH,,编程使它的高,4,位取反,低,4,位不变,程序,:,ORG 2000H,MOV DPTR,,,#2000H,MOVX A,,,DPTR,XRL A,,,#0F0H,MOVX DPTR,,,A,SJMP$,END,清零、取反指令,:,2,条,CLR A,;,0,(,A,),,累加器,A,清零,CPL A,;(,A,)(,A,),,累加器,A,取反,注意,:,这两条指令都不影响,PSW,中的标志位,这两条指令都是单字节,虽然采用数据传送类指令或逻辑异或指令也可以实现上述功能,但它们至少需要两个字节,针对的对象是累加器,A,中的内容,1,个字节,(,2,),移位,指令:,4,条,RL A,;,累加器,A,中的内容左环移,RR A,;,累加器,A,中的内容右环移,RLC A,;,累加器,A,中的内容通过,CY,左环移,RRC A,;,累加器,A,中的内容通过,CY,右环移,1,个字节,例,10-13,:执行下面的程序,观察累加器,A,中内容的变化,MOV A,#02H,RL A,RL A,RL A,注意,:,针对的对象是累加器,A,中的内容,且是,无符号数,都是单字节指令,左移相当于乘,2,,右移相当于除,2,;,02H,(,A,),;,04H,(,A,),;,08H,(,A,),;,10H,(,A,),(,3,),位操作,指令:,12,条,位操作指令的操作数是字节中的某一位,每位取值只能是,0,或,1,,故又称为布尔变量操作指令,操作对象:片内,RAM,的位寻址区,20H2FH,(,128,个),+SFR,中,11,个寄存器(,83,个),共计,211,个位,布尔处理器的位累加器,CY,在指令中简写成,C,位传送指令,位变量修改指令,位逻辑运算指令,位传送指令,:,2,条,MOV C,,,bit,;(,bit,)(,CY,),MOV bit,,,C,;(,CY,)(,bit,),例,10-14,:设并行,I/O,口的,P2.0P2.2,与译码器输入端连接如图所示,欲使累加器,A,中的低,3,位送译码器,试编写程序实现之,设最低位由,P2.0,输出,2,个字节,程序,:,ORG2200H,CLRC,RRCA,MOVP2.0,,,C,RRCA,MOVP2.1,,,C,RRCA,MOVP2.2,,,C,END,P2.0,P2.1,P2.2,A,B,C,8031,VCC,VCC,138,译,码,器,功能,:将源操作数指定的位变量传送(复制)到目的操作数指定单元,其中一个操作数为位地址,另一个必为位累加器,C,位变量修改指令,:,6,条,CLR C,;,0,(,CY,),SETB C,;,1,(,CY,),CPL C,;(,CY,)(,CY,),CLR bit,;,0,(,bit,),SETB bit,;,1,(,bit,),CPL bit,;(,bit,)(,bit,),功能,:分别完成位清,0,、置位及取反操作,1,个字节,2,个字节,注意,:执行结果不影响其它标志位,除,C,外,位逻辑运算指令,:,4,条,ANL C,,,bit,;(,CY,)(,bit,)(,CY,),ANL C,,,/bit,;(,CY
展开阅读全文

开通  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 

客服