-1

我想将我的 C 程序转换为将十进制数转换为二进制数的AVR 汇编程序。该程序是为Atmega32a指定的。有人能帮我吗 ?谢谢你。 这是我需要转换为 Asssembly 的程序:

    int main()  
{  
    int num, bin = 0, rem = 0, place = 1;  
  
    printf("Enter a decimal number\n");  
    scanf("%d", &num);  
  
    printf("\nBinary equivalent of %d is ", num);  
    while(num)  
    {  
        rem   = num % 2;  
        num   = num / 2;  
        bin   = bin + (rem * place);  
        place = place * 10;  
    }  
    printf("%d\n", bin);  
  
    return 0;  
} 
4

1 回答 1

1

scanf, printf& atmega 不是很好的朋友:)

没有什么像十进制整数只有一个整数。

转换为二进制意味着您需要包含'0''1'字符的字符串。

使用此类任务的功能。此功能针对 8 位 AVR 架构进行了优化。

char *tobin(char *str, unsigned val)
{
    char *buff = str;
    unsigned mask = 1ULL << (sizeof(mask) * 8 - 1);
    char start = 0;
    while(mask)
    {   
        char bit = !!(val && mask);
        if(!start) start = bit;
        if(start) 
            *buff++ = bit + '0';
        mask >>= 1;
    }
    *buff = 0;
    return str;
}

您在此链接中拥有的组件: https ://godbolt.org/z/osW6YYKbv

于 2021-10-08T22:39:55.560 回答