关于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有关系.那么如果SUBB与ADD联合起来用会有什么效果呢?
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 
MOV B,#80H
ADD A,B
 
A=60H,CY=0
这应该怎么解释呢?E0如果除去最高位不算,那么实际他会是20.所以(-20)H+80H=60H
但是为什么前面我设置标志位Cy的时候,ADD运算结果都一样,而此时却会影响呢?
 
虽然我不知这种情况是怎么回事,但是只要ADD与SUBB连用时,我们可以知道,不用考虑关于溢出的问题,特别是我们用于连续做加减法的时候.
 
 
 

加载中…