加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于C51汇编ADD与SUBB指令问题

(2011-12-18 21:40:31)
标签:

符号位

指令

单片机

pid

杂谈

分类: 单片机

今天在写关于PID算法时,突然发现,偏差是有正负之分,那么应当如何表示呢?当然是用一个字节的第八位来表示啦,这想都不用想,这是ADD指令与SUBB指令会认识他们吗?这是一个问题.

所以,我做了以下几个测试.看看单片机有有参与符号位的运算.

我使用编译环境是wave6000,将代码抄到环境,编译,再设置CY的标志位.

先看看CY=0的情况:

MOV A,#89H

MOV B,#09H

ADD A,B

 

这时,A=92H.此时,单片机不认识符号位.

再看看CY=1的情况:

MOV A,#89H

MOV B,#09H

ADD A,B

A=92H,CY=0

可以看出,Cy并不影响add指令的计算.

 

 

再看看减法

Cy=0:

MOV A,#09H

MOV B,#89H

SUBB A,B

这时,A=80H,CY=1.

Cy=1:

MOV A,#09H

MOV B,#89H

SUBB A,B

这时,A=7FH,CY=1.

通过上面对比,我们可以发现SUBB指令的运算与Cy有关系.那么如果SUBBADD联合起来用会有什么效果呢?

Cy=0

MOV A,#09H

MOV B,#89H

SUBB A,B ;A=80H,CY=1

MOV B,#80H

ADD A,B

 

A=00H,CY=0

本来80H+80H=100H,CY=1,CY已经为1,1+1=10,所以Cy=0.这时,你发现add指令的计算结果与Cy好像有点关系了.这个例子好像有点特殊,我们在看看其他例子:

 

MOV A,#09H

MOV B,#29H

SUBB A,B  ;A=E0,CY=1

MOV B,#80H

ADD A,B

 

A=60H,CY=0

这应该怎么解释呢?E0如果除去最高位不算,那么实际他会是20.所以(-20)H+80H=60H

但是为什么前面我设置标志位Cy的时候,ADD运算结果都一样,而此时却会影响呢?

 

虽然我不知这种情况是怎么回事,但是只要ADDSUBB连用时,我们可以知道,不用考虑关于溢出的问题,特别是我们用于连续做加减法的时候.

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有