首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算术溢出与算术进位

算术溢出与算术进位
EN

Stack Overflow用户
提问于 2011-06-07 13:27:40
回答 3查看 29.7K关注 0票数 29

我的一篇演讲幻灯片给出了一个算术溢出的例子,并在ARM芯片上带了一个条件分支标志的主题,引用如下:

  • V (溢出) - 7FFFFFFF+1
  • C (进位) - FFFFFFFF+1

大概是为了这个例子,这个地址只能容纳8个字节。因此,在我看来,它似乎是添加1到7 7FFFFFFF提供80000000。我以为80000000还能装进一个8字节的地址。

为什么这是算术溢出?滑梯上走错路了吗?还是我的理解有缺陷?

谢谢你的回复

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-07 13:31:31

当寄存器不能将结果正确表示为有符号值(溢出到符号位)时,会设置

  • 溢出标志。当寄存器不能将结果正确表示为无符号值(不需要符号位)时,将设置
  • 进位标志。
票数 59
EN

Stack Overflow用户

发布于 2011-06-07 13:34:57

如果符号位已损坏,则会出现溢出。所以你知道你必须调整你的结果。

如果结果不符合此值,您将得到一个进位。(需要比你拥有的更多的数据)。

在过去,您必须为多字节值编写自己的加法和乘法子程序。

票数 6
EN

Stack Overflow用户

发布于 2021-04-09 07:13:38

两个补语的优点是添加和子操作完全相同,因此您不需要对有符号值和无符号值进行不同的说明。

但是,ALU只是处理一个8位数的问题,所以它不知道这些位是否代表有符号或无符号的数字。

考虑两项行动:

  1. 255 (AKA-1)加1答案是0。但是,如果255表示-1,则此操作很好-1相加1=0,没有问题。OTOH如果255是无符号255,ADD 1=0是错误的,所以ALU将C标志设置为“如果这是一个无符号操作,它就越界了”

  1. 127添加一个答案128 (AKA-128).如果127表示一个无符号数字,这是罚款127相加1= 128,但是如果它是一个有符号的数字127,添加1= -128是错误的。因此,在本例中,ALU设置V标志,表示“如果这是一个签名操作,则答案超出范围”

原则上,您可以设计一个只带一个标志的ALU,如果您有一点可以告诉它操作是签名的还是未签名的。然后,您将有不同的操作代码进行签名和无符号操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6265896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档