A inteligência do if (primeira versão)

Caloni, 2005-05-29 computer philosophy blog

Estava outro dia filosofando com meu amigo sobre o funcionamento do conceito mais poderoso em programação de computadores: o if. E me perguntava como que o computador consegue tomar uma decisão a partir de uma comparação. É o tipo de problema cuja resposta parece óbvia mas enquanto você não se aprofunda no tema nunca fica satisfeito de fato (mesmo sabendo a teoria). Após quebrar a cabeça por algum tempo, encontrei uma solução no mínimo interessante.

Computadores lêem e escrevem na memória, e é isso. Uma instrução é uma leitura de bits da memória para o circuito lógico que altera o estado da máquina. Uma comparação é uma escrita em flags depois da entrada ter passado por um filtro de portas lógicas. Um salto é a escrita do endereço da próxima instrução no program counter. Quando uma função é chamada seus parâmetros e o endereço de retorno são escritos na pilha (uma área da memória). Para retornar, uma instrução lê o endereço da pilha e o coloca no program counter.

Sendo assim, confirmado que Von Neumann e Turing ainda não morreram, nada mais justo supor que um if é um salto automaticamente calculado através do resultado de uma comparação feita imediatamente antes. Isso traduzindo em código de alto nível:

#include <stdio.h>

void True()
{
   printf("Verdadeiro\n");
}

void False()
{
   printf("Falso\n");
}

typedef void (*Jump)();
Jump If[2] = { False, True };

int main(int argc, char* argv[])
{
   If[2 > 3]();
   If[3 > 2]();
}

Eis um código que executa um salto condicional sem o uso do if que vem de fábrica. Na verdade, o if emulado acima constitui conceitualmente o que imagino que ocorra nas entranhas de um PC. Imagino, pois não fui a fundo o suficiente para vasculhar os documentos da Intel. Para mim, a mágica foi desvendada. O deslumbramento é que continua...

// Comments

2007-01-02 Anonymous:

Bom, quando tu falou que as instruções alteram o registrador program counter (registrador que indica qual é a próxima instrução), pra mim já ficou claro como os jumps funcionam... Mas se esse código deixa as coisas mais claras pra ti, seja feliz :-p


2007-01-04 Caloni:

Sim, essa explicação por si só já explica como os jumps funcionam. Porém , o que queria na verdade explicar com o código de exemplo é como os jumps condicionais funcionam, ou seja, aquele salto que depende de uma condição prévia, que pode ou não existir.

[erros_esquisitos] [hello_world]