您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 8 指令系统(3)-算术运算和逻辑运算
运算类指令(运算类指令(运算类指令(运算类指令(运算类指令(运算类指令(运算类指令(运算类指令(4848484848484848条)条)条)条)条)条)条)条)��算术运算类指令算术运算类指令((2424242424242424条)条)��逻辑运算类指令逻辑运算类指令((2424242424242424条)条)��例题例题�MCS-51提供了丰富的算术运算指令,如加、减、乘、除以及增1、减1和二-十进制调整指令。�一般情况下,算术运算指令执行后会影响程序状态字寄存器PSW中相应的标志位。3.3.23.3.2算术运算指令算术运算指令PPPPPPPP--------OVOVOVOVOVOVOVOVRS0RS0RS0RS0RS0RS0RS0RS0RS1RS1RS1RS1RS1RS1RS1RS1F0F0F0F0F0F0F0F0ACACACACACACACACCyCyCyCyCyCyCyCyD7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0程序状态字程序状态字程序状态字程序状态字PSWPSWPSWPSW指令名称指令格式机器码功能指令周期不带进位加法指令ADDADDADDADDA,RnA,RnA,RnA,Rn00101rrr00101rrr00101rrr00101rrrAAAA←(A)+(Rn(A)+(Rn(A)+(Rn(A)+(Rn))))1111ADDA,directADDA,directADDA,directADDA,direct00100101001001010010010100100101directdirectdirectdirectAAAA←(A)+(direct(A)+(direct(A)+(direct(A)+(direct))))1111ADDADDADDADDA,@RiA,@RiA,@RiA,@Ri0010011i0010011i0010011i0010011iAAAA←(A)+((Ri(A)+((Ri(A)+((Ri(A)+((Ri))))))))1111ADDA,#dataADDA,#dataADDA,#dataADDA,#data00100100001001000010010000100100datadatadatadataAAAA←(A)+data(A)+data(A)+data(A)+data1111带进位加法指令((((常用于多字节加法运算))))ADDCADDCADDCADDCA,RnA,RnA,RnA,Rn00111rrr00111rrr00111rrr00111rrrAAAA←(A)+(Rn)+Cy(A)+(Rn)+Cy(A)+(Rn)+Cy(A)+(Rn)+Cy1111ADDCA,directADDCA,directADDCA,directADDCA,direct00110101001101010011010100110101directdirectdirectdirectAAAA←(A)+(direct)+Cy(A)+(direct)+Cy(A)+(direct)+Cy(A)+(direct)+Cy1111ADDCADDCADDCADDCA,@RiA,@RiA,@RiA,@Ri0011011i0011011i0011011i0011011iAAAA←(A)+((Ri))+Cy(A)+((Ri))+Cy(A)+((Ri))+Cy(A)+((Ri))+Cy1111ADDCA,#dataADDCA,#dataADDCA,#dataADDCA,#data00110100001101000011010000110100datadatadatadataAAAA←(A)+data+Cy(A)+data+Cy(A)+data+Cy(A)+data+Cy11111.加法指令(8条)说明:1.加法指令对PSW中所有标志位产生影响。2.可以根据需要把参加运算的数看成无符号数,也可以把它们看成带符号数。若是带符号数,通常采用补码形式。3.无符号数运算时,判断运算结果是否超出范围(0~255),看进位标志Cy;带符号数运算时,判断运算结果是否超出范围(-128~+127),看溢出标志OV。指令名称指令格式机器码功能指令周期带借位减法指令SUBBA,Rn10011rrrAAAA←(A)-((A)-((A)-((A)-(RnRnRnRn)-Cy)-Cy)-Cy)-Cy1SUBBA,direct10010101directAAAA←(A)-(direct)-Cy(A)-(direct)-Cy(A)-(direct)-Cy(A)-(direct)-Cy1SUBBA,@Ri1001011iAAAA←(A)-(((A)-(((A)-(((A)-((RiRiRiRi))-Cy))-Cy))-Cy))-Cy1SUBBA,#data10010100dataAAAA←(A)-data-Cy(A)-data-Cy(A)-data-Cy(A)-data-Cy12.减法指令(4条)1.减法指令对PSW中所有标志位产生影响。2.在加法运算中,Cy、AC、C8、C7表示相应的进位,在减法运算中表示相应的借位。3.无符号数减法运算存在借位问题,无溢出问题。只有带符号数减法运算才有溢出问题。加1指令也称为“增量指令”,操作结果是操作数加1。加1指令不影响标志位,只有操作对象为累加器A时,才影响奇偶标志位P。指令名称指令格式机器码功能指令周期增量指令INCA00000100A←(A)+11INCRn00001rrrRn←(Rn)+11INCdirect00000101directdirect←(direct)+11INC@Ri0000011i(Ri)←((Ri))+11INCDPTR10100011DPTR←(DPTR)+123.加1指令(5条)INCA;通过增量指令使累加器A内容加1。仅影响奇偶标志位P,单字节指令。ADDA,#01H;通过加法指令使累加器A内容加1。影响所有标志位,双字节指令。INCA&ADDA,#01HINCA&ADDA,#01HINCA&ADDA,#01HINCA&ADDA,#01H减1指令使操作数减1。与加1指令情况类似,减1指令也不影响标志位,只有当操作数是累加器A时,才影响奇偶标志位P。指令名称指令名称指令名称指令名称指令格式指令格式指令格式指令格式机器码机器码机器码机器码功能功能功能功能指令周期指令周期指令周期指令周期减1111指令DECADECADECADECA00010100000101000001010000010100AAAA←(A)(A)(A)(A)-11111111DECDECDECDECRnRnRnRn00011rrr00011rrr00011rrr00011rrrRnRnRnRn←(Rn(Rn(Rn(Rn))))-11111111DECdirectDECdirectDECdirectDECdirect00010101000101010001010100010101directdirectdirectdirectdirectdirectdirectdirect←(direct(direct(direct(direct))))-11111111DEC@DEC@DEC@DEC@RiRiRiRi0001011i0001011i0001011i0001011i((((Ri)Ri)Ri)Ri)←((Ri((Ri((Ri((Ri))))))))-111111114.减1指令(4条)乘法指令对标志位的影响:1)Cy总是清0;2)当积大于255时,OV=1,否则OV=0;3)P仍为累加器A的奇偶校验位。除法指令对标志位的影响:1)Cy总是清0;2)当除数为0时,除法没有意义,OV=1,否则OV=0;3)P仍为累加器A的奇偶校验位。5.乘除指令(2条)指令名称指令名称指令名称指令名称指令格式指令格式指令格式指令格式机器码机器码机器码机器码功能功能功能功能指令周期指令周期指令周期指令周期AAAA×BBBBMULABMULABMULABMULAB10100100101001001010010010100100BABABABA←(A)(A)(A)(A)×(B)(B)(B)(B)4444AAAA÷÷÷÷BBBBDIVABDIVABDIVABDIVAB10000100100001001000010010000100A(A(A(A(商))))←(A)(A)(A)(A)÷÷÷÷(B)(B)(B)(B)B(B(B(B(余数))))←(A)(A)(A)(A)÷÷÷÷(B)(B)(B)(B)4444MCS-51提供了8位无符号数乘法指令和除法指令。MCS-51没有提供8位×16位、16位×16位、16位×24位等多字节乘法指令,只能通过单字节乘法指令完成多字节乘法运算。多字节乘法运算例:24位×16乘法24位被乘数占用3字节,用CBA表示;16位乘数占用2字节,用ED表示,乘积应该为40位。显然“A*D”为16位,“B*D”为24位,“C*D”为32位;“A*E”为24位,“B*D”为32位,“E*C”为40位。ABCDE×A*DLA*DHB*DLB*DHC*DLC*DHA*ELA*EHB*ELB*EHC*ELC*EH+D7D7D7D7~D0D0D0D0D39D39D39D39~D33D33D33D33D15D15D15D15~D8D8D8D8D23D23D23D23~D16D16D16D16D31D31D31D31~D24D24D24D2424242424位×16161616位算法图指令名称指令名称指令名称指令名称指令格式指令格式指令格式指令格式机器码机器码机器码机器码功能功能功能功能指令周期指令周期指令周期指令周期BCDBCDBCDBCD加法调整DAADAADAADAA11010100110101001101010011010100根据进位标志CyCyCyCy、辅助进位标志AcAcAcAc以及累加器AAAA内容,将累加器AAAA内容转化为BCDBCDBCDBCD码形式11116.十进制加法调整指令(1条)�调整规律:若AC=1或低4位大于9,则加06H;若Cy=1或高4位大于9,加60H。�该指令使用时需放在ADD或ADDC指令后,不能单独使用“DAA”指令将累加器A中的内容转化为BCD码。�MCS-51没有提供BCD码减法调正指令,但可以通过补码概念,将BCD码减法运算变成BCD码加法运算。�该指令不影响溢出标志位OV。3.3.33.3.3逻辑运算指令逻辑运算指令�逻辑运算在计算机指令系统中,占有极重要的位置。MCS-51提供了丰富的逻辑运算指令,包括逻辑与、或、非、异或以及循环移位操作等。�这类指令中除以累加器A为目的操作数的指令影响奇偶校验P(但“CPLA”/“RLA”/“RRA”除外),带进位Cy循环移位指令“RLCA”/“RRCA”影响P和Cy,均不影响程序状态字寄存器PSW中的标志位。指令名称指令格式机器码功能指令周期逻辑与ANLA,Rn01011rrrA←(A)∧(Rn)1ANLA,direct01010101directA←(A)∧(direct)1ANLA,@Ri0101011iA←(A)∧((Ri))1ANLA,#data01010100dataA←(A)∧data1ANLdirect,A01010010directdirect←(direct)∧(A)1ANLdirect,#data01010011directdatadirect←(direct)∧data2指令名称指令格式机器码功能指令周期逻辑或ORLA,Rn01001rrrA←(A)∨(Rn)1ORLA,direct01000101directA←(A)∨(direct)1ORLA,@Ri0100011iA←(A)∨((Ri))1ORLA,#da
本文标题:8 指令系统(3)-算术运算和逻辑运算
链接地址:https://www.777doc.com/doc-6161123 .html