Translating if Statements to AVR - Example


    int x;
    printf("n? ");
    scanf("%d", &x);
    if (x & 1 == 0)
        printf("Odd\n");
    else
        printf("Even\n");
	exit(0);

translates to
    int x;
    printf("n? ");
    scanf("%d", &x);
    if (x & 1 == 0) goto even;
    printf("Odd\n");
even:
    printf("Even\n");
exit:
	exit(0);

translates to


    LDI    r24, 3     ; printf("n? ");
    LDI    r31, 0x70  
    LDI    r30, 0x00  
    LDI    r26, 'n'  
    ICALL
    LDI    r26, '?'  
    ICALL
    LDI    r26, ' '  
    ICALL
    LDI    r24, 4     ; scanf("%d", &x);
    LDI    r31, 0x70  
    LDI    r30, 0x00  
    ICALL
    LDI    r16, 1     ; if (x & 1 == 0)
    AND    r24, r16
    LDI    r24, 3 
    BRBS   1, even
odd:
    LDI    r26, 'O'   ; printf("Odd\n");
    ICALL
    LDI    r26, 'd'  
    ICALL
    LDI    r26, 'd'  
    ICALL
    LDI    r26, '\n'  
    ICALL
    LDI    r31, hi8(pm(exit))  
    LDI    r30, lo8(pm(exit))
    IJMP
even:
    LDI    r26, 'E'  ; printf("Even\n");
    ICALL
    LDI    r26, 'v'  
    ICALL
    LDI    r26, 'e'  
    ICALL
    LDI    r26, 'n'  
    ICALL
    LDI    r26, '\n'  
    ICALL
exit:
    LDI    r24, 0     ; exit
    LDI    r31, 0x70  
    LDI    r30, 0x00  

Index