51单片机的问题,关于进位与溢出
1、一个存储单元只有8位,0-255,但是我要存的数超这个范围了怎么办?比如MOVR1,#1000002、溢出是超过-128—127,这个是符号数,但是我就想算64+10...
1、一个存储单元只有8位,0-255,但是我要存的数超这个范围了怎么办?比如 MOV R1,#100000
2、溢出是超过-128—127,这个是符号数,但是我就想算64+100,(01000000+01100100)他会溢出吗?我存进去的不是符号数啊?
3、150+150=300,超过了255,单片机是怎么实现的,(有道题是10个数相加,肯定超255啊)
谢谢~ 展开
2、溢出是超过-128—127,这个是符号数,但是我就想算64+100,(01000000+01100100)他会溢出吗?我存进去的不是符号数啊?
3、150+150=300,超过了255,单片机是怎么实现的,(有道题是10个数相加,肯定超255啊)
谢谢~ 展开
2个回答
展开全部
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位运算……
2、OV位只是提供了一个带符号数溢出的参考依据而已,用不用它取决于需求。
溢出位值的判断依据是:最高位的进位状况(有:1,无:0)和 次高位的进位状况(有:1,无:0)取异或的结果。 也就是次高位进位状况与最高位进位状况不一致时OV被置1。 164的结果对8位带符号数而言显然是属于溢出范围的(俩正数相加变成了负数),对无符号数计算而言,可以在程序设计时忽略OV的值。
3、实现的方法是进行两次8位的加法运算,最低8位用ADD指令,其余用ADDC指令(即16位加法运算,参考代码百度应该会出来一大堆),用两个8位的寄存器(或RAM单元)来保存运算结果(16位运算结果);同理可推至32位运算、64位运算……
展开全部
1、一个存储单元只有8位,0-255,但是我要存的数超这个范围了怎么办?比如 MOV R1,#100000
--能存进去吗?
--你可以试试看。
2、溢出是超过-128—127,这个是符号数,但是我就想算64+100,(01000000+01100100)他会溢出吗?我存进去的不是符号数啊?
--无论是无符号数,还是带符号数,
--计算机,它只是按照二进制数字进行计算。
--计算出来的结果,人,爱怎么理解,就怎么理解。
3、150+150=300,超过了255,单片机是怎么实现的,(有道题是10个数相加,肯定超255啊)
--会产生进位。
--八位机,加减运算的结果,其实是九位。
--第九位,就存放在进位里面。
--150+150=300=(1) 44
--C=1,就代表 256。
--能存进去吗?
--你可以试试看。
2、溢出是超过-128—127,这个是符号数,但是我就想算64+100,(01000000+01100100)他会溢出吗?我存进去的不是符号数啊?
--无论是无符号数,还是带符号数,
--计算机,它只是按照二进制数字进行计算。
--计算出来的结果,人,爱怎么理解,就怎么理解。
3、150+150=300,超过了255,单片机是怎么实现的,(有道题是10个数相加,肯定超255啊)
--会产生进位。
--八位机,加减运算的结果,其实是九位。
--第九位,就存放在进位里面。
--150+150=300=(1) 44
--C=1,就代表 256。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询