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标志位清零
例如:执行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标志位清零
相关文章推荐
- 51单片机汇编延时计算详细分析
- angularjs指令详细分析&&与控制器数据交互
- Android 4.1 Netd详细分析(六)DnsProxyListener
- PHP中addcslashes与stripcslashes函数用法分析
- Ecshop的购物流程代码分析详细说明
- ehcache详细分析
- DM9000驱动详细分析(一)
- hostapd wpa_supplicant madwifi详细分析(十五)——supplicant扫描结果排序规则
- 幂集源程序及详细分析过程
- Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈
- MFC窗口位置管理详细分析及实例
- 内存故障之详细分析
- 对u-boot.lds的更详细的分析
- HTTP协议头域字段详细分析
- Linux APIC 详细分析
- 对天乙社区bbscs8实现的详细分析三
- Hive map阶段优化之一次详细的优化分析过程
- Linux下生产者消费者问题详细分析(操作系统期中考试论文---并发程序的同步和互斥)
- 对天乙社区bbscs8实现的详细分析十七
- Last_Errno: 1062,Last_Error: Error 'Duplicate entry '...' for key 'PRIMARY'' on query. 的详细分析过程