在80C51单片机里面,半进位标志位AC在加减运算里面是按照有符号数还是无符号数来设置标志位?

还有,同在80C51单片机里面,溢出标志位OV,在进行乘法和除法运算时是按照有符号数还是无符号数来设置标志位?
最后,半进位标志位AC能运用于乘法运算和除法运算吗?如果可以,那是按照有符号数还是无符号数来设置标志位?

一、加法指令
1、不带进位加法指令

工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,分别将AC,CY标志位置1;否则为0。 上述指令的执行将影响标志位AC、CY、OV、P。
对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”否则被清“0”。OV=1表示两个正数相加,和变为负数,或两个负数相加,和变为正数的错误结果。
2、带进位加法指令
将累加器A内容加当前CY标志位内容,再加无符号单字节的数,和存于累加器A中。当运算结果第3、7位产生进位溢出时,则分别置位AC、CY和OV标志位。本指令执行将影响标志位AC、CY、OV、P。
二、减法指令
1、带借位减法指令
带借位减法指令SUBB,从累加器A中减去进位标志位CY和指定的变量,结果在累加器A中,若第七位有借位,则置位位CY,否则CY清0。若第3位有错位,则置位辅助进位标志AC,否则清0 AC。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。溢出位OV用于带符号的整数减法,它表示(OV=1)一个正数减负数结果为负数;或一个负数减正数结果为正数的错误结果。
三、乘法指令

本指令将累加器A和寄存器B中二个8位无符号整数进行相乘,16位乘积的低8位存于A中,高8位存于B中,如果乘积大于255(0FFH),即B的内容不为0时,则置位溢出标志位OV,否则清“0”OV。进位标志位CY总是清“0”。
四、除法指令
本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数,所得结果商的整数部分存于A中,整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数(B中内容)为00H时,则执行结果将为不定值,即执行结果送往A和B中的为不定值,且置位溢出标志位OV。在任何情况下,均清“0”CY。追问

那请问对于带符号的乘除法,CY、OV和AC分别是怎样的呢?

追答

其实单片机并不知道什么有符号没符号,都当二进制数,正应为如此,才引入了OV标志。乘除法和上面介绍一样的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-26
有、无符号数,是人类对数字的定义和理解。
在计算机里面,参加运算的,都是普通的二进制数。

八位数,分别称为 D7 D6 D5 D4 D3 D2 D1 D0。

加法运算时:
AC,当 D3 位相加,有进位则 AC=1。
CY,当 D7 位相加,有进位则 CY=1。
OV,当 D7、D6 的进位不同,则 OV=1。
P,当 ACC 中的 1 的个数为奇数,则 P=1。

减法、乘、除法运算,就不细说了。
都是很简单的。

单片机给出的这些标准位,供编程人参考。

编程人,必须自己深入理解《有、无符号数》的运算特点,
根据自己用的《有、无符号数》,再进行后续处理。
相似回答