/*
**-------------------------------------------------------------------
**
** 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;
}