532628838
圣骑士
圣骑士
  • 注册日期2011-06-10
  • 发帖数98
  • QQ
  • 火币517枚
  • 粉丝77
  • 关注39
阅读:2871回复:0

用内联汇编判断整数计算是否产生进位借位或溢出

楼主#
更多 发布于:2011-08-01 16:36
// 计算结果,有进位借位或溢出或溢出产生,则为非0,否则为0
// 调用完宏后直接加以判断
int g_iResult = 0;
// 对有符号整数数学计算进行判断
#define CARRY \
    __asm__ ("jo 0f\n\t" \
        "movl $0, g_iResult\n\t" \
        "jmp 1f\n\t" \
        "0:\n\t" \
        "movl $1, g_iResult\n\t" \
        "1:\n\t");
// 对无符号整数数学计算进行判断
#define OVER_FLOW \
    __asm__ ("jc 0f\n\t" \
        "movl $0, g_iResult\n\t" \
        "jmp 1f\n\t" \
        "0:\n\t" \
        "movl $1, g_iResult\n\t" \
        "1:\n\t");

对于数学计算是无符号还是有符号,和参与计算的整型变量本身没有关系,而是视程序把计算结果当成有符号还是无符号而定。汇编代码为AT;T语法格式。


喜欢0 评分0
游客

返回顶部