您的位置:首页 > 其它

51单片机ADD,ADDC与SUBB指令详细分析

2017-11-23 21:29 856 查看
ADD与ADDC 加法指令:

例如:执行0xfefe+0x0003
由于单片机只能处理8位数据加减法 具体操作如下:

/////////////////////////////低八位加法//////////////////////////////////

mov r0,#0xfe ;0xfefe先将低八位给r0寄存器

mov r1,#0x03 :0x0003先将低八位给r1寄存器

mov a,r0

ADD  a,r1

MOV r2, A r2存放计算结果低八位
执行ADD加法指令后  A寄存器中的值为数据低八位相加得0x01,cy进位标志位为1。

/////////////////////////////高八位减法//////////////////////////////////

mov r0,#0xfe ;0xfefe先将高八位给r0寄存器

mov r1,#0x00 :0x0003先将高八位给r1寄存器

mov a,r0

ADDC a,r1

MOV r3, a    ;r3存放计算结果高八位

执行ADDC加法指令后  A寄存器中的值为数据高八位相加得0xfe在加上低八相加后向高八位的进位 也就是进位标志位中的 1,最后结果a寄存器为0xff。

注意:当加上CY位后 CY标志位清零

减法指令SUBB 加法指令:

例如:执行0xfe9f-0x00af

由于单片机只能处理8位数据加减法 具体操作如下:

/////////////////////////////低八位减法//////////////////////////////////

mov r0,#0x9f ;0xfe9f先将低八位给r0寄存器

CLR Cy ;由于减法指令只有一个 所以低八位做减法运算先将借位标志位Cy清零

mov r1,#0xaf :0x00af先将低八位给r1寄存器

mov a,r0

subb  a,r1

MOV r2, a  ;保存低八位减法所得结果

当a减r1数据时候,由于a寄存器中的值比r1寄存器中值小 所以向高位借一位 就把借位标志位Cy置1 ,结果为0xf0

/////////////////////////////高八位减法//////////////////////////////////

mov r0,#0xfe ;0xfe9f先将低八位给r0寄存器

mov r1,#0x00:0x00af先将低八位给r1寄存器

mov a,r0

subb  a,r1

MOV r3, a ;保存高八位减法所得结果

当a减r1数据时候,由于0xfe9f低八位做减法向高八位借一位,所以高八位做减法时候  r0寄存器中0xfe减掉借走的一位,也就是 借位标志位Cy。也就是r0寄存器中的数据减去cy标志位后在减r1寄存器的值0x00所得结果a为0xfd

注意:当减掉CY位后 CY标志位清零
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: