A. 51单片机的问题,关于进位与溢出
1、呵呵,MOV R1,#100000,硬件里只有8位的存储空间,硬塞个16位的数据下去是不可能的,因此这个指令在汇编时汇编器(软件)会报错的……当然也不排除某些汇编器不报错,直接忽略高于8位的值;
2、OV位只是提供了一个带符号数溢出的参考依据而已,用不用它取决于需求。
溢出位值的判断依据是:最高位的进位状况(有:1,无:0)和 次高位的进位状况(有:1,无:0)取异或的结果。 也就是次高位进位状况与最高位进位状况不一致时OV被置1。 164的结果对8位带符号数而言显然是属于溢出范围的(俩正数相加变成了负数),对无符号数计算而言,可以在程序设计时忽略OV的值。
3、实现的方法是进行两次8位的加法运算,最低8位用ADD指令,其余用ADDC指令(即16位加法运算,参考代码网络应该会出来一大堆),用两个8位的寄存器(或RAM单元)来保存运算结果(16位运算结果);同理可推至32位运算、64位运算……
B. 单片机指令RLC A带进位的循环转移,怎么进位呀进位进到哪里去呀可以举一个例子吗
先看 RL A,这条指令只是把 A 中的八位数,循环左移。
再看 RLC A,这条指令把 A 中的八位数,以及C,共九位数,循环左移。
例如:C = 1,A = 0011 0000,执行RLC A 后:
A 中的最高位 0,移到C;C 中原来的 1,移到 A 的最低位。
结果:C = 0,A = 0110 0001。
------------------
如果执行 RL A,则仅有 A 循环移位,C 就不变了。
结果:C = 1,A = 0110 0000。
C. 单片机进位标志位C的问题
既然 ADD 会影响 C 标志,那么执行 ADD 后 C 就必须反映出计算结果,所以 C = 0 。
D. 单片机里的加法进位等等问题
具体情况要看单片机的种类和它支持的指令了
比如既有ADD, 也有ADC(或ADDC),则ADD时,与之前的状态无关,而ADC,则会把C加进去.而有的单片机只有ADC,那就要注意了,如果不希望以前有影响,就要自已清除标志.
你只要反复看指令的说明和举例,就会弄懂的
E. 单片机 进位左移
增加一个全局变量,将循环常数给变量,再对变量做左循环,将变量赋值给p0,
uchar
a,b,
c;
在主循环中p0=_crol_(p0,1);
//p0的值向左循环移动
修改为
c=_crol_(c,1);
//p0的值向左循环移动
p0=c;
F. 单片机的进位标志CY是当第3和第7位有进位时位1
是的 都是从0开始的
G. 单片机里的加法进位等等问题
具体情况要看单片机的种类和它支持的指令了
比如既有ADD,
也有ADC(或ADDC),则ADD时,与之前的状态无关,而ADC,则会把C加进去.而有的单片机只有ADC,那就要注意了,如果不希望以前有影响,就要自已清除标志.
你只要反复看指令的说明和举例,就会弄懂的
H. 单片机中的加法指令,进位和半进位问题.
位3进位到位4了,同时AC=1
位7进位,因为没有位8所以只有CY变成1
8位机,从右到左对应从
位0
到
位7
I. 单片机进位方面求教
呵呵,其实任何教科书上都有答案
(1)进位:PSW 中的C为进位位,当两个字节的数据相加时,最高位相加的结果如果有进位则C被置1,是为进位;
(2)半进位:还是PSW中AC为辅助进位位,该位在两个字节的数据相加,低4位的最高位相加的结果向高4位中的最低位有进位时被置1,因为一个字节是8位,4位恰好位于其一半的位置,呵呵,应该就是你说的半进位(好像一般不这样说)。
(3)溢出:当两个字节数据相加时,次高位向最高位的进位状况和最高位向C的进位状况不一致时,PSW里的OV位被置1,称为数据溢出。
(4)奇偶校验一般用于多机通信中,目的是防止传输过程中单位数据的畸变(由高电平“1”变为低电平“0”或由低电平变为高电平)。 一般做法是通过给数据补充一个校验位[该位只有两种取值:0或1],如果补充了新位后,原数据和校验位的所有位中含有的1的个数总是奇数个,则为奇校验;反之,如果补充了新位后,原数据和校验位的所有位中含有的1的个数总是偶数个,则为偶校验。例如,单片机PSW中的P位是对ACC中的数进行偶校验补偿(当ACC中有奇数个1时,该位为1,否则为0,这样,ACC和P的所有位数据总是有偶数个1)
J. 单片机玩家请进:单片机程序状态字中进位标志位置0位与置1位有疑惑,请高手解答!
是8位数相加大于FFH时cy=1,即8位数相加变为结果是9位数时cy=1. 相减时被减数小于减数时cy=1.