传送指令算术指令逻辑操作指令.ppt
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,#34HADD A,#0E7HMOV 40H,AMOV A,#12HADDC A,#1FHMOV 41H,A,(3)增量指令INC(Increment),INC A;00000100INC Rn;00001rrr INC direct;00000101INC Ri;0000011iINC 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中是按二进制加法进行的,其结果如下,0000100000001101,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,#1FHCLR CSUBB A,#0E7HMOV 40H,AMOV A,#34HSUBB A,#12HMOV 41H,A,例:双字节无符号数(R0R1)(R2R3)(R4R5),MOV A,R1CLR CSUBB A,R3MOV R5,AMOV A,R0SUBB A,R2MOV R4,A,(6)减1指令(DECDecrement),例:课本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 30HDEC 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),例:试编写计算17H68H的程序,将乘积的高8位存入31H单元,低8位存入30H单元,MOV A,#17HMOV B,#68HMUL AB;AB BAMOV 30H,AMOV 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,如下图所示,不影响标志。,b、累加器带进位左循环移位指令 RLC A(RLRotate left carry),将ACC的内容和进位标志一起向左循环移1位,ACC的位7移入进位位CY,CY移入ACC的0位,不影响其他标志。,a、累加器内容循环右移指令 RR A(RLRotate right),累加器ACC的内容向右循环移1位,位0循环移入位7,如下图所示,不影响标志。,A7,A0,b、累加器带进位右循环移位指令RRC A(RLRotate right carry),A7,A0,将ACC的内容和进位标志CY一起向右循环移1位,ACC的位0移入进位位CY,CY移入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,RnANL A,directANL A,RiANL A,#dataANL direct,AANL direct,#data,例:将端口P1的低4位清“0”,ANL P1,#0F0H,逻辑与指令常用于屏蔽字节中某些位。若清除某位,则用“0”和该位相与;若保留某位,则用“1”和该位相与。,例:已知A=07H,(R0)=0FDH,执行指令“ANL A,R0”,则操作如下:,结果:A=05H,(3)逻辑或指令ORL(OR Logic),ORL A,RnORL A,directORL A,RiORL A,#dataORL direct,AORL direct,#data,例:将端口P1的低4位置1,ORL P1,#0FH,它用来使字节中某些位置“1”,欲保留的位用“0”与该位相或,而欲置位的位则用“1”与该位相或。,例 将累加器A中的低4位由P1口的低4位输出,P1口高4位不变。,解 据题意程序如下:ANL A,#00001111BMOV 30H,AMOV A,P1ANL A,#11110000BORL A,30HMOV P1,A,(4)逻辑异或指令XRL(Exclusive-OR Logic),XRL A,RnXRL A,directXRL A,RiXRL A,#dataXRL direct,AXRL 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 CCLR bitCPL CCPL bitSETB CSETB bit,(3)位变量逻辑与指令,ANL C,bitANL C,/bit,(4)位变量逻辑或指令,ORL C,bitORL C,/bit,P66页 例322,P67页 例323,例3-23 设P1口为输出口,执行下述指令:MOV C,00H;(20H).0 CORL C,01H;(C)(20H).1CORL C,02H;(C)(20H).2CORL C,03H;(C)(20H).3CORL C,04H;(C)(20H).4CORL C,05H;(C)(20H).5CORL C,06H;(C)(20H).6CORL C,07H;(C)(20H).7CMOV 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+2PCJNC rel;C=0,PC+2+relPC C=0执行转移 C=1,PC+2PCJB bit,rel;bit=1,PC+3+relPC bit=1执行转移 bit=0,PC+3PCJNB bit,rel;bit=0,PC+3+relPC bit=1执行转移 bit=1,PC+3PCJBC bit,rel;bit=1,PC+3+relPC,0bit bit=1执行转移清零 bit=0,PC+3PC,