为什么进位永远不为1?我查看了程序内存,从来没有 1,只有 0
Why carry bit is not 1 never? I looked in the program memory and never 1, just 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");
}
循环中的(可能是易失性的)寄存器读取与算术和 load/stores 之间没有顺序。您不能从 C 中“读取进位标志”,因为无法相对于底层算术运算定位读取的标志,即使您假设一台机器具有进位标志。相反,您需要为进位编写显式逻辑,并希望编译器能够识别它并使用进位标志(如果这是最有效的方法)。
我正在写一个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");
}
循环中的(可能是易失性的)寄存器读取与算术和 load/stores 之间没有顺序。您不能从 C 中“读取进位标志”,因为无法相对于底层算术运算定位读取的标志,即使您假设一台机器具有进位标志。相反,您需要为进位编写显式逻辑,并希望编译器能够识别它并使用进位标志(如果这是最有效的方法)。