Как перевести если .. еще оператор с goto? - PullRequest
0 голосов
/ 08 апреля 2019

Я должен перевести nested-if..else условия в метки goto в C-коде.Я знаю, что я должен начать с внешних if-ов, но как перевести внутренние if-s с помощью goto?

Example: if(condition)
          {
            if(condition)
            {
             if(condition)
              {
                statements;
              }
              if(condition) return;
              statements;
            }  
          }
        else statements;

1 Ответ

0 голосов
/ 08 апреля 2019

На самом деле, вам не нужно переводить Ìf statement или любое утверждение, которое относится к C. Вы можете использовать прямо как это, он автоматически переведет в Assembly

int main(void)
{
    unsigned char SerData = 0x44;
    unsigned char TempSerData;
    unsigned char x;
    TempSerData = SerData;
    DDRC |= (1<<SerPin); //configure PORT C pin3 as output
    for (x=0;x<8;x++)
    {
       if (TempSerData & 0x01) // check least significant bit
             PORTC |= (1<<serPin); // set PORT C pin 3 to 1
       else
          PORTC &= ~(1<<serPin); // set PORT C pin 3 to 0
       TempSerData = TempSerData >> 1; // shift to check the next bit
    }
    return 0;
}

Однако, если вы хотите перевести if, вы можете использовать что-то вроде этого, но, как я сказал, вам не нужно конвертировать его, или вам не нужно C для этой работы.

int x = 0, y = 1;
(x >= y) ? goto A: goto B
A: // code goes here 
    goto end
B: // code goes here  
    goto end
end: return 0;

В сборке вы можете сделать это очень легко. Например, в Àtmega128:

ldi r16, 0x00 ; load register 16 with 0
ldi r17, 0x01 ; load register 17 with 1

sub r17, r16  ; take the difference
brcs if_label
else_label:             ; do some operation on that line or on the other lines
          rjmp end
if_label:               ; do some operation on that line or on the other lines     
end: rjmp end           ; program finishes here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...