前言

1.算术指令包括加、减、乘、除基本四则运算
2.在逻辑运算单元(ALU)中能进行加、减、乘、除、加1,减1,BCD数转十进制调整等


一、加法指令 ADD

ADD英文全称:Addition


ADD A, XXX

目的:将第二操作数(XXX)与第一操作数(A)的内容进行相加,得到的结果存放在累加器A中
第二操作数:寄存器Rn、直接地址direct、间接地址@Ri、立即数#data。

助记符功能对标志位影响字节数周期数
POVACCY
ADD A, Rn(A) + (Rn) -> A11
ADD A, @Ri(A) + ((Ri)) -> A11
ADD A, direct(A) + (direct) -> A21
ADD A, #data(A) + #data -> A21
  • 上述的指令会影响标志位P、OV、AC、CY位;
  • 当和的第3位有进位则将AC位(辅助进位标志)置1;
  • 当和的第7位有进位则将CY位(进位标志)置1;
  • 由和的奇偶个1确定P置1还是清零,奇数个1置1,偶数个1清零;
  • 溢出标记位OV只有带符号数运算时才有用;
  • 对于带符号数来说,溢出标记位OV取值为 其和的第6位和第7位进行异或逻辑运算的结果
  • OV = 1表示两个正数求和结果为负数的错误结果 或 两个负数求和结果为正数的错误结果;


两个正数带符号数 0100 0011 与 0100 0001
两个负数带符号数 1000 0011 与 1000 0001

  • 0100 0011 + 0100 0001 = 1000 0100 其结果是一个负数;
  • 1000 0011 + 1000 0001 = 0000 0100 其结果是一个正数;
  • 需要OV来表示结果溢出出错。

例 累加器A的内容为 043H,R1的内容为10H,地址10H的内容为20H

  • MOV A, R1:将A中内容与R1中的内容进行相加存放在A中,(A) + (R1) = 53H -> A,P = 0,AC = 0,CY = 0;
  • MOV A, @R1:将A中内容与R1中的所指向地址空间的内容进行相加存放在A中,(A) + ((R1)) = 63H -> A,P = 0,AC = 0,CY = 0;
  • MOV A, 10H:将A中内容与10H中的内容进行相加存放在A中,(A) + (10H) = 63H -> A,P = 0,AC = 0,CY = 0;
  • MOV A, #3EH:将A中内容与10H中的内容进行相加存放在A中,(A) + 33H = 80H -> A,P = 1,AC = 1,CY = 0。

二、带进位加法指令 ADDC

ADDC英文全称:Add with Carry


ADDC A, XXX

目的:将第二操作数(XXX)、第一操作数(A)的内容和进位CY三个数进行相加,得到的结果存放在累加器A中
第二操作数:寄存器Rn、直接地址direct、间接地址@Ri、立即数#data;

助记符功能对标志位影响字节数周期数
POVACCY
ADDC A, Rn(A) + (Rn) + CY -> A11
ADDC A, @Ri(A) + ((Ri)) + CY -> A11
ADDC A, direct(A) + (direct) + CY -> A21
ADDC A, #data(A) + #data + CY -> A21

例 累加器A的内容为 0C3H,R0的内容为0AAH,R1的内容为10H,10H的内容为0AAH,(CY) = 1;

  • ADDC A, R0:将A中内容、R0中的内容和CY三个数进行相加存放在A中,CY = 1,OV = 1,AC = 0;
  • ADDC A, @R1:将A中内容、R1所指向地址空间的内容和CY三个数进行相加存放在A中,CY = 1,OV = 1,AC = 0;
  • ADDC A, 10H:将A中内容、10H中的内容和CY三个数进行相加存放在A中,CY = 1,OV = 1,AC = 0;
  • ADDC A, #0AAH:将A中内容、立即数#0AAH和CY三个数进行相加存放在A中,CY = 1,OV = 1,AC = 0。

三、带借位减法指令 SUBB

SUBB英文全称:Subtract with Borrow


SUBB A, XXX

目的:将第一操作数(A)的内容减第二操作数(XXX)和进位CY三个数,得到的结果存放在累加器A中
第二操作数:寄存器Rn、直接地址direct、间接地址@Ri、立即数#data;

助记符功能对标志位影响字节数周期数
POVACCY
SUBB A, Rn(A) - (Rn) - CY -> A11
SUBB A, @Ri(A) - ((Ri)) - CY -> A11
SUBB A, direct(A) - (direct) - CY -> A21
SUBB A, #data(A) - #data - CY -> A21

例 累加器A的内容为 0C9H,R2的内容54H,R1 = 10H,10H = 54H,(CY) = 1;

  • SUBB A, R2;表示将累加器A中的内容减R2的内容再减CY,(A) - (R2) - (CY) = 74H -> A,CY = 0,AC = 0,OV = 1;
  • SUBB A, @R1;表示将累加器A中的内容减R1所指向地址空间的内容再减CY,(A) - ((R1)) - (CY) = 74H -> A,CY = 0,AC = 0,OV = 1;
  • SUBB A, 10H;表示将累加器A中的内容减10H的内容再减CY,(A) - (10H) - (CY) = 74H -> A,CY = 0,AC = 0,OV = 1;
  • SUBB A, 54H;表示将累加器A中的内容减立即数54H再减CY,(A) - 54H - (CY) = 74H -> A,CY = 0,AC = 0,OV = 1。

四、乘除法指令

MUL英文全称:Multiply

DIV英文全称:Divide


MUL AB

目的:将累加器A和寄存器B中两个8位无符号数乘数,所得16位积的低8位存放在A中,高8位存放在B中,乘积大于0FFH,则将OV置1,否则清零,CY总是被清零

助记符功能对标志位影响字节数周期数
POVACCY
DIV AB(A) * (B) -> AB×014

例 A中的内容04EH,B中的内容5DH

MUL AB:表示将AB两个内容相乘,高8位为1CH存放在B中,低8位为56H存放在A中,OV = 1。


DIV AB

目的:进行A除以B的运算,整数存放在A中,余数存放在B中,CY、OV均被清零,若(B) = 0则结果无法确定

助记符功能对标志位影响字节数周期数
POVACCY
DIV AB(A) / (B) 的商 -> A,(A) / (B) 的余数 -> B×014

A的内容为BFH,B中的内容为32H

DIV AB:结果(A) = 32H,(B) = 29H,标志位CY = 0,OV = 0;


五、十进制调整指令

DA英文全称:Decimal Adjust


DA A

目的:将累加器中的数进行十进制调整

助记符功能对标志位影响字节数周期数
POVACCY
DA A调整累加器内容为BCD码×11
  1. BCD码:二进码十进数,用4位二进制数来表示1位十进制数中的0~9这10个数码;
  • 例 19H表示十进制的19,而非表示二进制的0001 1001;
  1. 当AC > 1或A0123 > 9则令 A + 06H -> A,就完成转化BCD码;
  2. 十进制大于9时,会进位,用二进制表示十进制数就需要而额外的加06H来实现十进制数上的进位
  • 如十进制数09H加1会进位10H,但结果为0AH,再加06H变为10H。
  1. 当CY > 1或A4567 > 9则令 A + 60H -> A,就完成转化BCD码;
  2. 如果都满足3、4条件则加66H来完成BCD转化;
  • DA常用于 ADD、ADDC指令后。

六、加一减一指令

INC英文全称:Increment
DEC英文全称:Decrement


INC XXX

目的:将指定的单元内容加1
目的操作数:累加器A、寄存器Rn、直接地址direct、间接地址@Ri、16位寄存器DPTR

助记符功能对标志位影响字节数周期数
POVACCY
INC A(A) +1 -> A×××11
INC Rn(Rn) + 1 -> Rn××××11
INC direct(direct) + 1 -> direct××××21
INC @Ri((Ri)) + 1 -> (Ri)××××11
INC DPTR(DPTR) + 1 -> DPTR××××12

DEC XXX

目的:将指定的单元内容加1
目的操作数:累加器A、寄存器Rn、直接地址direct、间接地址@Ri、16位寄存器DPTR

助记符功能对标志位影响字节数周期数
POVACCY
DEC A(A) - 1 -> A×××11
DEC Rn(Rn) - 1 -> Rn××××11
DEC direct(direct) - 1 -> direct××××21
DEC @Ri((Ri)) - 1 -> (Ri)××××11

51单片机之系统指令

51单片机之逻辑运算指令ANL、ORL、XRL等

51单片机之数据转移指令MOV、MOVX、MOVC等

51单片机之位操作指令SETB、CPL等

51单片机之控制转移指令SJMP、LJMP等


由本人水平有限,文章难免有错误,望告知

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐