收藏 分销(赏)

2022年单片机学教程PPt指令系统.ppt

上传人:二*** 文档编号:12674901 上传时间:2025-11-22 格式:PPT 页数:93 大小:789.04KB 下载积分:5 金币
下载 相关 举报
2022年单片机学教程PPt指令系统.ppt_第1页
第1页 / 共93页
本文档共93页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第3章:51单片机指令系统,Instruction Set,1.Keil软件的使用;,2.7种寻址方式;,3.MCS-51指令集(难点、重点);熟练掌握、记住指令的英文全称,多上机调试,不要杜撰指令;把8086汇编指令忘记,完全不同,容易混淆,4.(复习)把所有指令英文全称过一遍,1,3.1 Keil 软件的使用,3.2 指令、指令系统的概念,3.3 汇编指令的格式,3.4 单片机指令的寻址方式,3.4.1 寄存器寻址 3.4.2 立即寻址,3.4.3 寄存器间接寻址3.4.4 直接寻址,3.4.5 变址寻址 3.4.6 相对寻址,3.4.7 位寻址,3.5 单片机汇编指令集,3.5.1 数据传送类指令 3.5.2 算术运算类指令,3.5.3 逻辑运算及移位类指令3.5.4 控制转移类指令,3.5.5 位操作类指令,2,3.1 Keil 软件的使用(Keil软件演示),Keil实例教程,uVision2入门教程,(一)Keil工程文件的建立、设置与目标文件的获得1.Keil 工程的建立-建立工程文件,源文件的建立2.工程的详细设置3.编译、连接(二)Keil的调试命令、在线汇编与断点设置1.常用调试命令2.在线汇编3.断点设置,3,(三)Keil 程序调试窗口1.存储器窗口2.工程窗口寄存器页3.观察窗口(四)Keil 的辅助工具和部份高级技巧辅助工具1、外围接口2、性能分析3、变量来源浏览4、代码作用范围分析部份高级调试技巧1、串行窗口与实际硬件相连2、从端口送入信号3、直接更改内存值,4,1.检查源程序;,2.测出源程序中的语法错误,并给出出错信息;,(1)expression type does not match instruction,(2)syntax error,目标文件(.OBJ),,并可给出,列表文件,(同时列出汇编语言源程序和机器语言目标程序的文件,称之为,.LST文件,)和,交叉索引文件,(列出程序中使用的符号、变量和标号以及引用情况,称之为.,CRF文件,)。,5,(了解,计算机工作机理),汇编之后生成的OBJ文件必须经过,链接过程,才能成为扩展名.EXE的可执行文件。,链接的过程就是调用),对OBJ文件进行,定位、链接,,最后生成扩展名为EXE的可执行文件。,如果需要,也可生成MAP文件和LIB文件。,6,view-memory window,I:,00H 内部RAM(256 0 x00-0 xff),X:,00H 外部RAM(64k 0 x0000-0 xffff),C:,00H ROM,鼠标右键modify memory 可以修改其中的数,7,扩展(了解):,HEX是,intel的目标文件格式,hex是结果输出的目标文件格式,至少Intel和Franklin是采用“intel hex格式”。hex格式不难辨认,它的格式是文件中的所有字节是可打印的ASCII字符.其它更紧凑格式“BIN”以单一字节表示每个程序代码字节,这样文件中有许多非打印的ASCII字符代码。,HEX文件中的,冒号(:)标示一个新记录,接着的,两个字符是以实际数据字节数表示的记录块的长度四个字符,是十六进制数用于表示块中数据的,起始地址,.再下面的两个字符是块的类型码:00表示是可重定位数据,01是文件的结束标志.接下去是实际数据,每个十六进制的数字对表示一个字节,16字节数据以32个字符表示.最后两位数字表示校验和,很容易与数据混淆.当所有的两字符十六进制值与校验和加起来以256取模,整个结果为0。,8,9,3.2 指令、指令系统的概念,指令(Instruction),是使计算机内部执行的一种操作,提供给用户编程使用的一种命令.由构成计算机的电子器件特性所决定,计算机只能识别二进制代码。,以二进制代码来描述指令功能的语言,称之为,机器语言,.由于机器语言不便被人们识别/记忆/理解和使用,因此给每条机器语言指令赋予助记符号来表示,这就形成了,汇编语言,(assembly),.,也就是说,汇编语言是便于人们识别/记忆/理解和使用的一种指令形式,它和机器语言指令一一对应,也是由计算机的硬件特性所决定的。,10,(了解)指令的描述形式有两种:,机器语言形式和汇编语言形式目标程序,.采用汇编语言编写的程序称之为,源程序,.计算机能够直接识别并执行的只有机器语言.汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个,中间过程叫做汇编,。,汇编有两种方式:,机器汇编和手工汇编,。机器汇编是用专门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇编语言指令逐条翻译成机器语言指令.现在主要使用机器汇编,但有时也用到手工汇编.,11,指令一般有,功能、时间和空间,三种属性(了解)。,功能属性,是指每条指令都对应一个特定的操作功能;,时间属性,是指一条指令执行所用的时间,一般用机器周期来表示,空间属性,是指一条指令在程序存储器中存储所占用的字节数。,这三种属性在使用中最重要的是功能,但时间、空间属性在有些场合也要用到.如一些实时控制应用程序中,有时需要计算一个程序段的确切执行时间或编写软件延时程序,都要用到每条指令的时间属性;在程序存储器的空间设计,或相对转移指令的偏移量计算时就要用到指令的空间属性.,12,51系列单片机指令集含有,111条指令,(1)每条指令在程序存储器ROM中占据一定的,空间,以字节为单位。按指令所占,字节数,分类:,单字节(49条);双字节(46条);3字节(16条),(2)每条指令在执行时要花去一定的,时间执行时间,分类:,单周期(64条);双周期(45条);,4周期(2条),(3)按指令的,功能,分类,可分为5大类:,数据传送类(29条);算术运算类(24条),逻辑运算及移位类(24);控制转移类(17条),位操作类(17条),13,指令的,字节数,(1),单字节指令,:指令只有一个字节,操作码和操作数同在一个字节中。,INC DPTR,(A3H),MOV A,R,N,(E8HEFH),(2),双字节指令,:一个字节为,操作码,,另一个字节是,操作数,。,MOV A,#data,(74H data),(3),三字节指令,:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。,MOV DPTR,#4000H,(90H 40H 00H),MOV 30H,#80H (75H,30H,80H),CJNE A,#20H,rel (B5H,20H,rel),14,3.3 汇编指令的格式,(1)方括符 表示可选项,(2),标号,代表指令所在地址,1-8个字母/数字,“:”结尾,(3)操作码就是指令功能,助记符,指令实体,操作码表示计算机执行该指令将进行何种操作,(4)目的操作数/源操作数 操作数表示参加操作的数的本身或操作数所在的地址,标号:操作码 目的操作数,源操作数;注释,例1:,loop:djnz r7,next,;R7-10 跳转到next,next:,15,(5)4个区段之间要用分隔符分开,(6)标号与操作码之间用,“:”(冒号),隔开,(7)操作码与操作数之间用空格隔开,(8)操作数与,注释,之间用,“;”(分号),隔开,(9)如果操作数有两个以上,则在操作数之间要用逗号,“,”,隔开 (乘法指令和除法指令除外),(10)这些符号“,:;,”必须是在,英文状态,下输入,(11),大小写不敏感,例2:LED1:MOV DPTR,#4000H,16,指令的一些符号的意义:,Rn,当前寄存器区的8个工作寄存器R0R7(n=07)。,Ri,当前选中的寄存器区中可作间接寻址寄存器的2个寄存器R0、,R1(i=0,1),Direct,直接地址,即8位的内部数据存储器单元或特殊功能寄存器的地址。,#data,包含在指令中的,8位立即数,。Mov a,#60h,#data16,包含在指令中的,16位立即数,(对DPTR作用)。,rel,相对转移指令中的偏移量,为8位的带符号补码数(选择标号),DPTR,数据指针,可用作16位的地址寄存器。,17,bit,内部RAM或特殊功能寄存器中的直接寻址位,C或Cy,进位标志位或位处理机中的累加器。,addr11,11位目的地址,addr16 16位目的地址,$,当前指令的地址(sjmp$,JNB TI,$)(常用),the same address of the current instruction,18,3.4 单片机指令的,寻址方式,5.变址寻址(基址寄存器+变址寄存器间接寻址),寻址方式:指令按地址获得操作数的方式,七种,寻址方式,一条指令可能含多种寻址方式,19,Immediate Addressing,操作数直接就出现在指令中,例4:MOV A,#64H;(A)立即数 64H,ADD A,#,0,F5H;(A)(A)+立即数 F5H,注意:,符号“#”表明其后跟的是立即数,立即数就是数字量本身.,例如:MOV A,#30H 指令中30H就是立即数.这一条指令的功能是执行将立即数30H传送到累加器A中的操作.,mov a,#20h;()十六进制数,mov a,#20;()=mov a,#20D;十进制数,mov a,#10000101b;(),mov a,#10000101;(X),21,Register Indirect Addressing,寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数,NOTE:,1)“间接”表示某寄存器中的,“内容”,只是一个“单元,地址,”,这个地址单元中存放的数据才是要找的“操作数”.(注意区分“内容、地址”的关系),2)符号,“”表示“在”,其含义与读音皆同,“at”.,MOV R1,#30H;(R1)立即数30H,MOV R1,#0FH;(30H)立即数0FH,MOV A,R1,;(A)(30H)=#0FH,22,理解地址和内容的关系(自学),例如:,MOV A,R1,指令的源操作数是寄存器间接寻址。该指令的功能是将以工作寄存器R1中的内容为地址的片内RAM单元的数据传送到A中去。例如:若R1中的内容为80H,片内RAM地址为80H的单元中的内容为2FH,则执行该指令后,片内RAM 80H单元的内容2FH被送到A中。寄存器间接寻址示意图如图所示。,23,寻址范围:,(1)访问内部RAM低128个单元,其通用形式为Ri,R0,R1;()R2,R7;(x),(2)对片外数据存储器的64K字节的间接寻址,MOVX A,DPTR,(3)片外数据存储器的低256字节 MOVX A,,Ri,(4)堆栈区:堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针(SP)作间址寄存器,24,Direct Addressing,指令中直接直接给出存放数据的地址或名称,例:MOV R1,1FH ;(R1)(1FH),MOV 30H,4AH ;(30H)(4AH),NOTE:访问,SFR只能采用直接寻址,方式.例如:,MOV A,SP,;(A)(SP),MOV A,81H ;(A)(SP),MOV P1,#5AH,;(P1)(#5AH),MOV 90H,#5AH ;(P1)(#5AH),MOV B,30H ;(B)(30H),相同,相同,25,在本单片机中访问特殊功能寄存器,SFR只能采用直接寻址方式,的,原因,:SFR分布在80H0FFH范围内,而52系列单片机有256字节的片内RAM,其中的80H0FFH的RAM与SFR所占地址重叠。,MOV A,90H 等效于 MOV A,P1 属直接寻址,MOV A,R0 ;事先已知(R0)=#90H 执行的操作:A(90H)属寄存器间接寻址,MOV A,85H(X),!,于是规定:,80H0FFH范围内的RAM只能用寄存器间接寻址方式,而,SFR只能用直接寻址方式,.从而解决了地址冲突的问题.,26,复习:存储器配置(片内RAM),89C51片内RAM 128字节(00H7FH),89C52片内RAM 256字节(00H0FFH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有,的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH,其中92个位可位寻址,80H,FFH,89C51,128字节,89C52,256字节,只能直接寻址,只能寄存器间接寻址,27,Index,Addressing,也称为:基址寄存器+变址寄存器,以,16位的地址指针寄存器DPTR或16位的PC寄存器为,基址寄存器,以累加器A,为,变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数.,MOVC A,A+DPTR ;(A)(A)+(DPTR),MOVC A,A+PC ;(A)(A)+(PC),JMP A+DPTR,28,例:设A中已存有#A4H,DPTR中已存有#1234H,MOVC A,A+DPTR;(A)(A)+(DPTR),操作:将A4H+1234H=12D8H单元中的数放进累加器A,29,Comparatively Addressing,当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址,(跳到标号指向的地方),例:SJMP rel,操作:跳转到的目的地址=当前16位PC值+rel(了解),NOTE:,1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;,2)符号“rel”表示“偏移量”,是一个带符号的单字,节数,范围是:-128+127(80H7FH),3)在实际编程中,“rel”通常用标号代替,30,也称为查表指令,寻址方式属:,MOVC A,A+PC,POP DPH ;弹出DPTR高位,CPL C ;(C)NOT(C),MOVX A,DPTR;(A)(DPTR),Rotate accumulator Left through the Carry flag,3F 3E 3D 3C 3B 3A 39 38,位操作(布尔操作)类指令 (17条),MOVX A,A+DPTR(X),INC R0 ;使R0的内容由7EH变为7FH,(3)DJNZ R1,$(原地等待),条件转移(判断跳转):(难点),单字节乘/除法运算:(MUL,DIV2条),MOV A,#data (74H data),MOV A,#03H;(A)03H,Bit,Addressing,指令中直接给出了操作数所在的位地址。,例:CLR P1.0 ;(P1.0)0,SETB ;(ACC.7)1,CPL C ;(C)NOT(C),NOTE:,1)位地址里的数据只可能是,0或1,2)有的位地址十分明确,如 P1.0,ACC.7等,有的位地址则“,不太明确,”,,比较:,MOV A,17H,;(A)(17H),17H是,字节地址,MOV ACC.0,17H,是,位地址,所以该指令中的17H,是22H单元的第7位,31,寻址范围包括:,(1)内部RAM中的位寻址区.位有两种表示方法,例如,17H;另一种是,单元地址加上位,例如,22H.6(常用),指的是22H单元中的第7位,它们是等价的。,(2)特殊功能寄存器中的可寻址位,在指令中有如下4种的表示方法:,a.直接使用位地址,例如的位地址为0D5H.,(常用),例如PSW.5是F0标志位,可使用,F0表示该位,。,c.单元地址加位数的表示方法,例如(0D0H).5。,d.,特殊功能寄存器符号加位数,的表示方法(常用),例如,PSW.5。,32,片内RAM中有128个位可按位寻址的位,位地址:00H7FH分布在:20H2FH单元;,另外,在SFR中还有92个位可按位寻址,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有,的RAM区,普通RAM区,位寻址区,工作寄存器区,27H,22H,21H,20H,26H,24H,25H,23H,28H,07 06 05 04 03 02 01 00,0F 0E 0D 0C 0B 0A 09 08,17 16 15 14 13 12 11 10,1F 1E 1D 1C 1B 1A 19 18,27 26 25 24 23 22 21 20,2F 2E 2D 2C 2B 2A 29 28,37 36 35 34 33 32 31 30,3F 3E 3D 3C 3B 3A 39 38,47 46 45 44 43 42 41 40,2FH,7F 7E 7D 7C 7B 7A 79 78,位地址,总共128个可按位寻址的位,单元地址,17,D7 D6 D5 D4 D3 D2 D1 D0,复习,33,3.5 51单片机汇编指令集,Instruction Set,学习要点:1.多上机熟悉指令;2.了解指令的操作,了解指令的寻址方式,了解指令对PSW的影响;3.合理使用指令,只用正确使用指令的权利,不可制造指令;4.养成良好的编程习惯(首行缩进 参考:,华为编程规范,),34,MCS-51指令集(五大类功能),了解,1.数据传送类指令 (29条),2.算术运算类指令 (24条),3.逻辑运算及移位类指令 (24条),4.控制转移类指令 (17条),5.位操作(布尔操作)类指令 (17条),35,内部存储器间传送:(MOV16条),外部数据存储器与累加器间传送:,(MOVX4条),程序存储器向累加器传送:,(MOVC2条),数据交换:(XCH/XCHD/SWAP5条),堆栈操作:(PUSH/POP2条),3.5.1 数据传送类指令(5种/29条),36,Acc 累加器,Direct 直接寻址,Ri 间接寻址,Rn 寄存器,#data,立即数,Rn:R0R7,Ri:R0,R1,#data:8位立即数,#data16:16位立即数,direct:直接地址,rel:8位带符号偏移量,内部存储器间,传送指令(16条):,MOV 类指令的操作方向总是,后面,的操作数,指向,前面,的操作数!,例:MOV A,30H;(A),(,30H),37,(1)立即寻址型传送指令,NOTE:,MOV A,#0FFH (),MOV A,#18H(),MOV A,#12(),MOV A,#13D(),MOV A,#00101111B(),MOV A,#FEH(X),MOV A,#0AF(X),MOV A,#00101111(X),MOV A,#data ;dataA,MOV Rn,#data ;data Rn,MOV Ri,#data;data(Ri),MOV direct,#data;datadirect,MOV DPTR,#DATA16;DATA16DPTR eg:mov dptr,#4000h,38,(2)直接寻址型传送指令,MOV A,direct;(direct)A,MOV direct,A;A(direct),MOV Rn,direct;(direct)Rn,n=07,MOV direct2,direct1,;,MOV Ri,direct;(direct)(Ri),例:M EQU 40H,N EQU 50H,MOV M,N,MOV M,A,39,(3)寄存器寻址型传送指令,MOV R2,R1(X),(4)以寄存器间接地址为目的操作数的指令,MOV Rn,A ;(A)Rn,n=07,MOV A,Rn ;(A)Rn,n=07,MOV direct,Rn;(direct)Rn,n=07,MOV A,Ri ;(Ri)A,i=0,1,MOV Ri,A ;A(Ri),i=0,1,MOV,direct,Ri;(Ri)direct ie:MOV B,R0,MOV A,Ri+1 (X),MOV A,R3 (X),MOV R0,R1 (X),40,Programming Hint:When you find yourself in a situation that you need to execute a type of MOV instruction that doesnt exist,it is generally helpful to use the accumulator,.If a given MOV instruction doesnt exist it can usually be accomplished by using two MOV instructions that both,use the accumulator as a transfer or temporary register.,41,例1:设内部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=0CAH(11001010B),分析以下程序执行后各单元及寄存器、P2口的内容。(,keil,I:peripherial),MOV R0,#30H;(R0)30H,MOV A,R0;(A)(R0),A=40H,MOV R1,A;(R1)(A),R1=40H,MOV B,R1;(B)(R1),B=10H,MOV R1,P1;(R1)(P1),(40H)=0CAH,MOV P2,P1;(P2)(P1),P2=0CAH,MOV 10H,#20H;(10H)20H,(10H)=20H,执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。,42,外部数据存储器RAM与累加器,间传送(4条):,MOVX类指令可在,累加器,与以,DPTR或,Ri,所代表的,外部 RAM之间,进行数据传送。MOV,X,(,eXternal 外部的,),MOVX B,DPTR(X),MOVX DIRECT,DPTR(X),MOVX A,30H(X),MOVX 30H,DPTR(X),MOVX A,A+DPTR(X),MOVC A,A+DPTR,(),MOVX A,R7,(X),Ri i=0 or 1,MOV,X,A,,DPTR;(A),(DPTR,),MOVX,A,,Ri ;(A),(Ri),MOVX DPTR,A,;,(DPTR,),(A),MOVX Ri,A,;(Ri),(A),43,例2:设外部RAM(0203H)=0CFH,分析以下指令执行后的结果。(,KEIL,X:),MOV DPTR,#0203H ;(DPTR)0203H,MOVX A,DPTR ;(A)(DPTR)a=0CFH,MOV 30H,A ;(30H)(A),(30H)=0CFH,MOV A,#0FH ;(A)0FH,MOVX DPTR,A ;(DPTR)(A),(0203H)=0FH,执行结果为:(DPTR)=0203H,(30H)=0CFH,(0203H)=(A)=0FH。,44,程序存储器,向,累加器,传送指令(2条),(,Code 代码,),MOVC A,A+DPTR,MOVC A,A+PC,也称为,查表指令,,寻址方式属:,“基址寄存器+变址寄存器间接寻址”,A+DPTR或A+PC,指向程序存储器中的某单元.拟传送给累加器ACC的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令DB,DW等定义在程序中。,NOTE:,MOVC A,DPTR (X)MOVX A,DPTR,(),MOVC A,DPTR+A (X),45,数据交换指令(5条):,XCH,A,direct (字节互换),Exchange 交换,XCH A,Ri (字节互换),XCH A,Rn (字节互换),(A)(direct),或(Ri),或(Rn),XCHD A,Ri,exchange the low-order nibble of the accumulator(bit3-0),少用,累加器 Acc的低4位与(Ri)的低4位互换,各自的高4位不变,SWAP A,swap nibbles within the accumulator,累加器 Acc的低4位与自身的高4位互换,46,例4:,设(R0)=30H,30H=4AH,(A)=28H,则,执行XCH A,R0后,结果为(A)=4AH,(30H)=28H。,执行XCHD A,R0后,结果为(A)=2AH,(30H)=48H。,执行SWAP A后,结果为(A)=82H。,NOTE:The,SWAP A,instruction is,identical(相同的),to executing,four RL A instructions or four RR A instructions,.,47,堆栈操作指令(2条):,push direct;入栈 sp,sp+1,(sp),(direct),pop,direct,;出栈(direct),sp,(sp),sp-1,Note:,注意PUSH POP 指令数据变化的,顺序(考试必考),堆栈区由特殊功能寄存器,堆栈指针SP,管理,堆栈区可以安排在RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是,放在RAM区的靠后的位置(30-FFH MOV SP,#70H),堆栈总是指向,栈顶单元,通常PUSH与POP两条指令,成对使用,PUSH DPTR(X 字)PUSH DPL,(,字节,),Push dph(,),EXPRESSION TYPE DOES NOT MATCH INSTRUCTION,PUSH A(X)PUSH ACC(,),48,NOTE:The stack operates on a,Last In-First Out(LIFO),basis.This means if you PUSH the values,4,5,and 6,(in that order),POPping them one at a time will,return 6,5,and then 4,.The,value,most recently added to the stack is the first value that will come off,when you execute a POP instruction.,NOTE:When PUSHing or POPping the Accumulator,you must refer to it as ACC,since that is the memory location of the SFR,.You may not assemble the instruction,PUSH A nor POP,A-both of these will result in an,assemble-time error,in most,if not all,8052 assemblers.,49,例5:设(A)=7BH,(35H)=11H,并且(SP)60H,PUSH ACC ;(61H),#7BH,PUSH 35H ;(62H),(35H)即:(62H)#11H,POP ACC ;(A),(62H)即:(A)#11H,POP 5AH ;(5AH),(61H)即:(5AH)#7BH,50,例6:,若在外部程序存储器中2000H单元开始依次存放09的平方值,数据指针(DPTR)=3A00H,用查表指令取得2003H单元的数据后,要求保持DPTR中的内容不变。,完成上述功能的程序如下:,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低位,POP DPH ;弹出DPTR高位,执行结果:(A)09H,(DPTR)=3A00H。,51,3.5.2 算术运算类指令(6种/24条),加法运算:(ADD4条),带进位加法运算:(ADDC4条),带借位减法运算:(SUBB4条),加1/减1操作:(INC,DEC9条),单字节乘/除法运算,:(,MUL,DIV2条),十进制调整:(DA A1条),52,加法运算:(ADD4条),带进位加法运算:(ADDC4条),带借位减法运算:(SUBB4条),1.所有的加法(ADD),带进位加法(ADDC),带借位减法(SUBB)运算都是以,A为一个加数或被减数,最终结果也存进A。,2.加法(ADD),带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了,进位或借位,将自动对PSW中的,Cy标志位置“1”,。,3.带进位加法(ADDC):(A),(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A),(A)-(Cy)-(第二操作数),53,共有4条加法运算指令:,NOTE:,ADD SUM,A(X),ADD DIRECT,DIRECT (X),ADD M2,M1 (X),ADD A,Ri+1 (X),ADD R1,DIRECT(X),ADD,A,Rn;(A)+(Rn)A,n=07 ADD,A,direct ;(A)+(direct)A,ADD,A,Ri ;(A)+(Ri)A,i=0,1,ADD,A,#data ;(A)+#dataA,54,这4条8位二进制数加法指令的一个加数总是,来自累加器A累加器A,中。,使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响:,(1)如果,位7有进位,则,置“1”进位标志Cy,否则清“0”Cy,(2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac(Ac为PSW寄存器中的一位),(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV。,55,2.,带进位加法,指令,(Add with Carry),进位标志位Cy参加运算,因此是三个数相加。共4条:,例7:(A)=85H,(20H)=FFH,Cy=1,执行指令,ADDC A,20H,结果为:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数),ADD,C,A,Rn;(A)+(Rn)+CA,n=0-7,ADD,C,A,direct;(A)+(direct)+CA,ADD,C,A,Ri ;(A)+(Ri)+CA,i=0,1,ADD,C,A,#data;(A)+#data+CA,56,NOTE:Many other(non-8052)architectures only have a single type of ADD instruction-one that always includes the carry bit in the addition.The reason 8052 assembly language has,two,different types of ADD instructions,is to avoid the need to start every addition calculation with a CLR C instruction.Using the,ADD instruction,is the,same as,using the,CLR C instruction,followed by the ADDC instruction.,57,带借位的减法指令,(subtract with borrow),4条指令:,NOTE:没有SUB指令 SUB A,#20H(X),从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。,如果位7需借位则置“1”Cy,否则清“0”Cy;,如果位3需借位则置“1”Ac,否则清“0”Ac;,如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。,SUBB A,Rn ;(A)-(Rn)-CyA,n=07,SUBB A,direct ;(A)-(direct)-CyA,SUBB A,Ri;(A)-((Ri))-CyA,i=0,1,SUBB A,#data ;(A)-#data-CyA,58,NOTE:Since SUBB always includes the carry bit in its operation,it is necessary to,always clear the carry bit,(CLR C)before executing the,first SUBB in a subtraction operation,so that the,prior(先前的)status,of the carry flag does not affect the instruction.,59,例8:(A)=C9H,(R2)=54H,Cy=1,执行指令:,SUBB A,R2,结果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位),例9:设(A)=49H,(R0)=6BH,分析执行指令ADD A,R0后的结果。,结果为:(A)=B4H,OV=1,CY=0,AC=1,P=0。,例10:设(A)=C3H,数据指针低位(DPL)=ABH,CY=1,分析执行指令ADDC A,DPL后的结果。,结果为:(A)=6FH,CY=1,AC=0,P=0。,例11:设(A)=52H,(R0)=B4H,分析执行如下指令后的结果,CLR C ;是位操作指令,是进位位清零,SUBB A,R0,结果为:(A)=9EH,CY=1,AC=1,OV=1,P=1。,60,加1/减1操作:(INC,DEC9条),INC,DEC与用加/减法指令做加1/减1操作不同之处在于,INC/DEC不影响标志位(记忆),.,不影响程序状态字PSW中的任何标志,.若变量原来为FFH,加1后将溢出为00H(指前4条指令),标志也不会受到影响,。,低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,并不影响标志Cy的状态。,INC A;,Increase,INC Rn ;n=07,INC direct,INC Ri ;i=0,1,INC DPTR,61,NOTE:无DEC DPTR指令,完成dptr-1功能的程序,(自学),DEC_DPTR:XCH A,DPL,DEC A,CJNE A,#0FFH,DEC_DPTR,DEC DPH,DEC_DPTR2:XCH A,DPL,DEC A;(A)-1A,DEC Rn ;(Rn)-1Rn,n=07,DEC direct;(direct)-1direct,DEC Ri;(Ri)-1(Ri),i=0,1,减1指令不影响标志位。,减1指令,decrease,62,例12:(R0)=7EH,(7EH)=FFH,(7FH)=38H,(DPTR)=10FEH,分析逐条执行下列指令后各单元的内容。,INC R0 ;使7EH单元内容由FFH变为00H,INC R0 ;使R0的内容由7EH变为7FH,INC R0 ;使7FH单元内容由38H变为39H,INC DPTR ;使DPL为FFH,DPH不变,INC DPTR ;使DPL为00H,DPH为11H,INC DPTR ;使DPL为01H,DPH不变,63,BCD码是指“用二进制表达的十进制数”,。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码,0010,0000B 或 20H 表示。,4个二进制位就可以表示一位BCD码:,00001001 可表示十进制数(BCD数)09;8个二进制位就可以表示,两位压缩的BCD码,:0000000010011001 表示 0099。,十进制,调整,:(1条),DA A,;,Decimal-Adjust Accumulator for addition,用于两个BCD码之间的相加,这条指令,只能跟在ADD或ADDC 加法指令后面,64,若(A),30,9或(AC)=1则(A),30,(A),30,6;若(A),74,9或(CY)=1则(A),74,(A),74,6;,例13:两个十进制数“65”与“
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服