A linguagem de programação C permite que trechos de códigos mais longos, complexos e trabalhosos de se construir em linguagem Assembly sejam feitos de forma mais sintética, simples e abstrata, tornando o processo de programação muito mais eficiente. Considere os dois trechos de programa para o microcontrolador ATmega328, um em linguagem Assembly, e o outro em linguagem C, na figura 2.6 Figura 2.6: Dois trechos de programa embarcado. Comparação entre dois trechos de porgrama supostamente equivalentes, em linguagens Assembly e C. Fonte: Elaborada pelo autor A respeito da comparação entre eles, qual das alternativas abaixo é correta? Escolha uma: a. Não são equivalentes, mas seriam se as duas variáveis fossem testadas com o valor zero ao invés de um, no trecho em C (à direita), e a operação lógica fosse AND “&&” (E), ao invés de OR “||”(OU), no mesmo trecho. b. Não são correspondentes, mas seriam se a primeira instrução de salto condicionado em assembly fosse “BREQ” ao invés de “BRNE”, e se a variável VARI1 fosse testada com o valor zero ao invés de um no trecho em linguagem C. c. Não são equivalentes, mas seriam se a variável VARI1 fosse testada com o valor zero ao invés de um, no trecho em C (à direita), e se a operação lógica fosse XOR “^” (OU exclusivo), ao invés de OR “||”(OU). d. Não se correspondem, e teriam que ser reescritos de outra maneira, pois não há nenhuma alteração que possa ser feita para torna-los equivalentes, devido às suas estruturas não permitirem isso. e. São perfeitamente equivalentes, ou seja, vão produzir o mesmo efeito se forem processados pelo ATmega328.
Lista de comentários
b. Não são correspondentes, mas seriam se a primeira instrução de salto condicionado em assembly fosse “BREQ” ao invés de “BRNE”, e se a variável VARI1 fosse testada com o valor zero ao invés de um no trecho em linguagem C. c. Não são equivalentes, mas seriam se a variável VARI1 fosse testada com o valor zero ao invés de um, no trecho em C (à direita), e se a operação lógica fosse XOR “^” (OU exclusivo), ao invés de OR “||”(OU).
Não são equivalentes, mas seriam se as duas variáveis fossem testadas com o valor zero ao invés de um, no trecho em C (à direita), e a operação lógica fosse AND “&&” (E), ao invés de OR “||”(OU), no mesmo trecho.