This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 是否获取有符号运算溢出?

Guru**** 2581345 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/651872/get-signed-operation-overflow

您好!

我正在研发 TMS320F28337。

我有一个愚蠢的问题、但我无法解决!

如果有符号运算发生溢出、现在该怎么办?

具有符号整数8位的 exemple (即使该 µC 没有8位但最小为16位、这也是 exemple 的简化器)

INT8 Vara

INT8变值

INT8变量

VarResult = Vara-VarB。

如果 Vara 和 VarB 相同、则不存在溢出风险。

但是、如果存在相反的情况、则可能会发生溢出

-如果 Vara = 100、VarB =-30 => VarC 将采用-126! 这是因为溢出。

然后、我无法更改结果、但又是用于检测此溢出的指令。 我在 CPU 内核寄存器中找不到任何可以指示这一点的位。 但我确信该位的存在与所有处理器上的情况类似...

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    数字溢出是在定点工作时必须管理的一种方法。 它是定点计算的自然(并非总是不可取的)结果。 如果避免溢出非常重要、则在计算差异之前应调整 Vara 和 VarB 的大小、以确保结果始终保持在同一数据类型可表示的范围内。 "IQmath"库可让您在 C 语言中操控距离/分辨率、从而使所有这些操作更加简单。

    如果您在汇编语言中工作、累加器溢出和下流量将在状态寄存器 st0的 OVC 字段中计数、但没有 C 语言可访问位会发出警告。

    您正在使用的处理器支持硬件浮点。 FPU 中有硬件过流和欠流中断、因为对于浮点、这些条件通常更严重。

    此致、

    Richard