微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么进位位不是 1 从不?我查看了程序内存,从来没有 1,只有 0

如何解决为什么进位位不是 1 从不?我查看了程序内存,从来没有 1,只有 0

我正在编写一个 C 程序来生成 使用 pic16f887 计算 255 之前的斐波那契数(作为 8 位值)。我尝试检查 STATUS 的进位位,即位 0 (LSB)(我查看了数据表),但始终为 0。

#include <htc.h> 
#define N 20 
unsigned char i@0x20; 
unsigned char v[N]@0x30; 

void main(void)
{
    v[0] = 0;
    v[1] = 1;
    i = 2;
    while(1)    
    {
        v[i] = v[i-1] + v[i-2];

        if(STATUS &0b00000001) 
            goto end;
        i++;
    }
end:
    asm("nop");
}

enter image description here

解决方法

循环中的(可能是易失性的)寄存器读取与算术和加载/存储之间没有顺序。您不能从 C 中“读取进位标志”,因为无法相对于底层算术运算定位读取的标志,即使您假设一台具有进位标志的机器也是如此。相反,您需要为进位编写显式逻辑,并希望编译器能够识别它并使用进位标志(如果这是最有效的方法)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。