[ create a new paste ] login | about

Link: http://codepad.org/XcYyBPef    [ raw code | fork ]

C, pasted on Feb 11:
/*
**-------------------------------------------------------------------
**
** Exemplo Opcode Multiplicacao:
**
**-------------------------------------------------------------------
*/
#include <stdio.h>

#define STACK_SIZE  1024

typedef union VALUE VALUE;

union VALUE {
    long  l;
    float f;
    char  *s;
    void  *p;
};

VALUE stack[STACK_SIZE];  // a pilha BASE
VALUE *sp;                // O TOPO da pilha

void push_long (long value)
{
    sp++;
    sp[0].l = value;
}

void opcode_multiplica (void)
{
    // aqui EH NECESSARIO que existam 2 valores na pilha ( stack )
    //
    // ENTAO:
    //
    // Multiplica o primeiro valor passado para a pilha ( push_long() ) pelo segundo
    // valor passado para a pilha ( push_long() ).
    //
    sp[-1].l *= sp[0].l;

    // e da um "POP" na pilha ... neste ponto o valor multiplicado fica no
    // TOPO DA PILHA.
    sp--;
}

int main ()
{
    sp = stack;

    // passando 2 valores na "pilha" ( stack );
    //
    push_long (1000);
    push_long (10);

    opcode_multiplica ();

    // aqui EH NECESSARIO um "POP" para estabilizar sp ...
    // ...

    printf ("*sp = %ld\n", sp->l); // imprime: 10.000

    return 0;
}


Create a new paste based on this one


Comments: