51单片机之算术运算指令ADDC、SUBB等
文章目录前言一、加法指令 ADDADD A, XXX二、带进位加法指令 ADDCADDC A, XXX三、带借位减法指令 SUBBSUBB A, XXX四、乘除法指令MUL ABDIV AB五、十进制调整指令DA A六、加一减一指令INC XXXDEC XXX前言1.算术指令包括加、减、乘、除基本四则运算2.在逻辑运算单元(ALU)中能进行加、减、乘、除、加1,减1,BCD数转十进制调整等...
文章目录
前言
1.算术指令包括加、减、乘、除基本四则运算
2.在逻辑运算单元(ALU)中能进行加、减、乘、除、加1,减1,BCD数转十进制调整等
一、加法指令 ADD
ADD英文全称:Addition
ADD A, XXX
目的:将第二操作数(XXX)与第一操作数(A)的内容进行相加,得到的结果存放在累加器A中;
第二操作数:寄存器Rn、直接地址direct、间接地址@Ri、立即数#data。
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
ADD A, Rn | (A) + (Rn) -> A | √ | √ | √ | √ | 1 | 1 |
ADD A, @Ri | (A) + ((Ri)) -> A | √ | √ | √ | √ | 1 | 1 |
ADD A, direct | (A) + (direct) -> A | √ | √ | √ | √ | 2 | 1 |
ADD A, #data | (A) + #data -> A | √ | √ | √ | √ | 2 | 1 |
- 上述的指令会影响标志位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;
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
ADDC A, Rn | (A) + (Rn) + CY -> A | √ | √ | √ | √ | 1 | 1 |
ADDC A, @Ri | (A) + ((Ri)) + CY -> A | √ | √ | √ | √ | 1 | 1 |
ADDC A, direct | (A) + (direct) + CY -> A | √ | √ | √ | √ | 2 | 1 |
ADDC A, #data | (A) + #data + CY -> A | √ | √ | √ | √ | 2 | 1 |
例 累加器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;
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
SUBB A, Rn | (A) - (Rn) - CY -> A | √ | √ | √ | √ | 1 | 1 |
SUBB A, @Ri | (A) - ((Ri)) - CY -> A | √ | √ | √ | √ | 1 | 1 |
SUBB A, direct | (A) - (direct) - CY -> A | √ | √ | √ | √ | 2 | 1 |
SUBB A, #data | (A) - #data - CY -> A | √ | √ | √ | √ | 2 | 1 |
例 累加器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总是被清零
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
DIV AB | (A) * (B) -> AB | √ | √ | × | 0 | 1 | 4 |
例 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则结果无法确定
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
DIV AB | (A) / (B) 的商 -> A,(A) / (B) 的余数 -> B | √ | √ | × | 0 | 1 | 4 |
A的内容为BFH,B中的内容为32H
DIV AB:结果(A) = 32H,(B) = 29H,标志位CY = 0,OV = 0;
五、十进制调整指令
DA英文全称:Decimal Adjust
DA A
目的:将累加器中的数进行十进制调整
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
DA A | 调整累加器内容为BCD码 | √ | × | √ | √ | 1 | 1 |
- BCD码:二进码十进数,用4位二进制数来表示1位十进制数中的0~9这10个数码;
- 例 19H表示十进制的19,而非表示二进制的0001 1001;
- 当AC > 1或A0123 > 9则令 A + 06H -> A,就完成转化BCD码;
- 十进制大于9时,会进位,用二进制表示十进制数就需要而额外的加06H来实现十进制数上的进位
- 如十进制数09H加1会进位10H,但结果为0AH,再加06H变为10H。
- 当CY > 1或A4567 > 9则令 A + 60H -> A,就完成转化BCD码;
- 如果都满足3、4条件则加66H来完成BCD转化;
- DA常用于 ADD、ADDC指令后。
六、加一减一指令
INC英文全称:Increment
DEC英文全称:Decrement
INC XXX
目的:将指定的单元内容加1
目的操作数:累加器A、寄存器Rn、直接地址direct、间接地址@Ri、16位寄存器DPTR
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
INC A | (A) +1 -> A | √ | × | × | × | 1 | 1 |
INC Rn | (Rn) + 1 -> Rn | × | × | × | × | 1 | 1 |
INC direct | (direct) + 1 -> direct | × | × | × | × | 2 | 1 |
INC @Ri | ((Ri)) + 1 -> (Ri) | × | × | × | × | 1 | 1 |
INC DPTR | (DPTR) + 1 -> DPTR | × | × | × | × | 1 | 2 |
DEC XXX
目的:将指定的单元内容加1
目的操作数:累加器A、寄存器Rn、直接地址direct、间接地址@Ri、16位寄存器DPTR
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
DEC A | (A) - 1 -> A | √ | × | × | × | 1 | 1 |
DEC Rn | (Rn) - 1 -> Rn | × | × | × | × | 1 | 1 |
DEC direct | (direct) - 1 -> direct | × | × | × | × | 2 | 1 |
DEC @Ri | ((Ri)) - 1 -> (Ri) | × | × | × | × | 1 | 1 |
由本人水平有限,文章难免有错误,望告知
更多推荐
所有评论(0)