资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第3章 MCS-51单片机指令系统和汇编语言程序示例,MOV,(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;,MOVX,(Move,External,RAM)对外部RAM的数据传送;,(1)数据传送类指令,指令助记符 操作功能注释,MOVX A,DPTR ;(A)(DPTR),MOVX A,Ri ;(A)(Ri),i=0或1,MOVX DPTR,A ;(DPTR)(A),MOVX Ri,A ;(Ri)(A),i=0或1,MOVC,(Move Code):读取程序存储器数据表格的数据传送;,指令助记符 操作功能注释,MOVC A,A+DPTR ;(A)(A)+(DPTR),MOVC A,A+PC ;(PC)(PC)+1,(A)(A)+(PC),注意:第二条指令编程时还需要进行偏移量的计算,即MOVC A,A+PC指令所在,地址与表格存放首地址间的距离量计算,,并需要一条加法指令ADD进行地址调整。,偏移量表首地址(MOVC指令所在地址1),PUSH,POP,XCH,XCHD,ADD,ADDC,SP(,SP),+1,(SP)(direct),(direct)(SP),SP(SP)1,主要用于多字节的加法运算。,(2)带进位的加法指令,(Add with Carry),注意:带进位加法指令主要用于多字节的加法运算。,例:试编写1234H1FE7H的程序,将和的高8位,存入41H单元,低8位存入40H单元。,解:两个16位数相加可分两步进行,第一步先对低8位相加。第二步再对高8位相加。考虑到第一步相加时可能产生进位,因而第二步必须用带进位加法指令。,MOV A,#34H,ADD A,#0E7H,MOV 40H,A,MOV A,#12H,ADDC A,#1FH,MOV 41H,A,(3)增量指令INC,(Increment),INC A;00000100,INC Rn;00001rrr,INC direct;00000101,INC Ri;0000011i,INC DPTR;10100011,这组增量指令的功能是把所指出的变量加1,若原来为0FFH,将溢出为00H,不影响任何标志。,例题:课本58页例3-,10,直接地址,助记符,机器码,例3-10 设(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,执行指令:,INC A ;(A)+1,A,INC R3;(R3)+1,R3,INC 30H;(30H)+1,30H INC R0;(R0)+1,(R0)结果:(A)=00H,(R3)=10H,(30H)=0F1H,(40H)=01H,PSW状态不改变。,(4)十进制调整指令DA,(Decimal Adjust),DA A,这条指令是在进行BCD码加法运算时,跟在,ADD,和,ADDC,指令之后,用于对BCD码的加法运算结果自动进行修正,使其仍为BCD码表达形式。,该指令的执行过程如图3-2所示。(P59页),例:累加器A中BCD数是5,立即数为8,执行加法指令“ADD A,#8”,在CPU中是按二进制加法进行的,其结果如下,00001000,00001101,00000101,所得值为非法BCD码,但若将其结果加6调整后,就得到正确的结果,操作如下:,+,00001101,00010011,得BCD码13,结果正确。,+,00000110,参考程序如下:MOV A,#65H,ADD A,#58H,DA A,例:编程实现BCD码6558相加,(5)带进位减法指令SUBB,(Subtract with Borrow),思考题:怎样进行不带借位位的减法操作?,需先清借位位,即置CY=0,CLR C,注意:带进位减法指令主要用于多字节的减法运算。,例:试编写341FH-12E7H的程序,将结果的高8位,存入41H单元,低8位存入40H单元。,MOV A,#1FH,CLR C,SUBB A,#0E7H,MOV 40H,A,MOV A,#34H,SUBB A,#12H,MOV 41H,A,例:双字节无符号数(R0R1)(R2R3)(R4R5),MOV A,R1,CLR C,SUBB A,R3,MOV R5,A,MOV A,R0,SUBB A,R2,MOV R4,A,(6)减1指令(D,ECDecrement),例:课本59 例3-12,减1指令的功能是将指定单元的内容减1,结果再放回到该单元中去。这类指令不影响标志位。,例3-12 设(A)=0FH,(R7)=19H,(30H)=00H,,(R1)=40H,(40H)=0FFH,执行指令:,DEC A;(A)-1,ADEC R7;(R7)-1,R7 DEC 30H;(30H)-1,30H,DEC R1 ;(R1)-1,(R1),结果:(A)=0EH,(R7)=18H,(30H)=0FFH,,(40H)=0FEH,P=1 不影响其它标志。,(7)乘法指令(MULMultiplication,),助记符 机器码,MUL AB 10100100;AB BA,该指令的功能是累加器A中,8位无符号整数,除以B寄存器中,8位无符号整数,,,商,存于,A,中,,余数,存于,B,中。标志位Cy和OV清0(当除数为0时OV置1),DIV AB ;AB 的商A,余数B,如果积大于255(FFH),则溢出标志位OV置1,否则清0。进位标志位Cy总是清0。,(8)除法指令(DIVDivision,),例:试编写计算17H,68H,的程序,将乘积的高8位存入31,H,单元,低8位存入30,H,单元,MOV A,#17H,MOV B,#68H,MUL AB;,AB BA,MOV 30H,A,MOV 31H,B,左循环移位指令,3、逻辑操作指令,(1)简单逻辑操作指令,累加器清0,CLR A,将累加器A清0,不影响Cy、Ac、OV等标志。,累加器内容按位取反,例,:(A)=10101010B,执行指令,CPL A,结果:(A)=01010101B,CPL A,将累加器A的每一位逻辑取反,原来1的位变0,原来0的位变1,不影响标志。,a、累加器内容循环左移指令RL A,(RLRotate left,),ACC的内容向左循环移1位,位7循环移入位0,如下图所示,不影响标志。,A7,A0,b、累加器,带进位,左循环移位指令 RLC A,(RLRotate left,carry),A7,A0,C,Y,将ACC的内容和进位标志一起向左循环移1位,ACC的位7移入进位位C,Y,,C,Y,移入ACC的0位,不影响其他标志。,a、累加器内容循环右移指令 RR A,(RLRotate right,),累加器ACC的内容向右循环移1位,位0循环移入位7,如下图所示,不影响标志。,A7,A0,b、累加器带进位右循环移位指令RRC A,(RLRotate right,carry),A7,A0,C,Y,将ACC的内容和进位标志C,Y,一起向右循环移1位,ACC的位0移入进位位C,Y,,C,Y,移入ACC的7位,不影响其标志。,右循环移位指令,执行指令 RRC A后,,例设(A)=5AH=90=01011010B,且CY=0,则,执行指令RL A后,,(A)=10110100B=B4H=180。,执行指令RR A后,,(A)=00101101B=2DH=45。,执行指令 RLC A后,,(A)=10110100B=B4H=180,CY=0。,(A)=00101101B=2DH=45,CY=0。,例:(A)=0C5H,执行指令,SWAP A,结果:(A)=5CH,累加器半字节交换指令:SWAP A,(2)逻辑与指令,ANL(AND Logic),ANL A,R,n,ANL A,direct,ANL A,Ri,ANL A,#data,ANL direct,A,ANL direct,#data,例:将端口P1的低4位清“0”,ANL P1,#0F0H,逻辑与指令常用于,屏蔽字节中某些位,。若,清除,某位,则用,“0”,和该位相与;若,保留某位,,则用,“1”,和该位相与。,例:已知A=07H,(R0)=0FDH,执行指令“ANL A,R0”,则,操作如下:,00000111 (07H),)11111101 (0FDH),00000101 (05H),结果:A=05H,(3)逻辑或指令,ORL(OR Logic),ORL A,R,n,ORL A,direct,ORL A,Ri,ORL A,#data,ORL direct,A,ORL direct,#data,例:将端口P1的低4位置1,ORL P1,#0FH,它用来使字节中,某些位置“1”,,欲,保留的位用“0”与该位相或,,而欲,置位的位则用“1”与该位相或,。,例 将累加器A中的低4位由P1口的低4位输出,,P1口高4位不变,。,解 据题意程序如下:,ANL A,#00001111B,MOV 30H,A,MOV A,P1,ANL A,#11110000B,ORL A,30H,MOV P1,A,(4)逻辑异或指令,XRL(Exclusive-OR Logic),XRL A,R,n,XRL A,direct,XRL A,Ri,XRL A,#data,XRL direct,A,XRL direct,#data,逻辑“异或”指令常用于对字节中某些位进行取反操作,,欲取反的位与“1”异或,,欲,保留的位与“0”异或,。还可以用异或指令对某单元异或,以实现清“0”操作。,XRL A,#0FH;高四位不变,低四位取反,4、位操作类指令,(1)数据位传送指令,MOV C,P1.3,MOV P1.7,C,指令中C即进位标志位Cy,bit为内部RAM中20H2FH单元中128个可寻址位和特殊功能寄存器中的可位寻址的地址。,例:把P1.3状态传送到P1.7。按题意编写指令如下:,(2)位变量修改指令,CLR C,CLR bit,CPL C,CPL bit,SETB C,SETB bit,(3)位变量逻辑与指令,ANL C,bit,ANL C,/bit,(4)位变量逻辑或指令,ORL C,bit,ORL C,/bit,P66页 例322,P67页 例323,例3-23 设P1口为输出口,执行下述指令:,MOV C,00H;(20H).0 C,ORL C,01H;(,C)(20H).1C,ORL C,02H;,(C)(20H).2C,ORL C,03H;,(C)(20H).3C,ORL C,04H;,(C)(20H).4C,ORL C,05H;,(C)(20H).5C,ORL C,06H,;(C)(20H).6C,ORL C,07H;,(C)(20H).7C,MOV P1.0,C;,(C)P1.0,结果:内部,RAM,的,20H,单元中只要有一位为,1,,,P1.0,就为,1,。,(5)位变量条件转移指令,JC rel ;C=1,PC+2+relPC C=1执行转移,C=0,PC+2PC,JNC rel ;C=0,PC+2+relPC,C=0执行转移,C=1,PC+2PC,JB bit,rel;bit=1,PC+3+relPC,bit=1执行转移,bit=0,PC+3PC,JNB bit,rel;bit=0,PC+3+relPC,bit=1执行转移,bit=1,PC+3PC,JBC,bit,rel;bit=1,PC+3+relPC,0bit,bit=1执行转移清零,bit=0,PC+3PC,
展开阅读全文