2026-01-12 18:37:53 +00:00

5.4 KiB

< Voltar | Sumário | Adiante >

⚙️ PROMETEU VM Instruction Set

1. Visão Geral

A PROMETEU VM é uma máquina virtual stack-based, determinística e orientada a ciclos.

Seu Instruction Set foi projetado para:

  • ser facilmente compreendido
  • mapear diretamente conceitos de linguagens de alto nível
  • expor claramente custo de execução
  • permitir inspeção completa da pilha e da memória

A PROMETEU VM é intencionalmente simples. Simplicidade é uma característica pedagógica, não uma limitação.


2. Modelo de Execução da VM

2.1 Componentes principais

A PROMETEU VM possui:

  • Program Counter (PC) — endereço da próxima instrução
  • Operand Stack — pilha de valores
  • Call Stack — pilha de chamadas (frames)
  • Heap — memória dinâmica
  • Global Space — variáveis globais
  • Constant Pool — literais e referências

2.2 Ciclo de execução da VM

Cada instrução segue o ciclo:

FETCH → DECODE →EXECUTE → ADVANCE PC

Cada instrução:

  • consome um número fixo de ciclos
  • tem efeitos observáveis na pilha/memória
  • nunca executa trabalho implícito oculto

3. Tipos Fundamentais da VM

A PROMETEU VM suporta um conjunto mínimo e explícito de tipos:

Tipo Descrição
number ponto flutuante (64-bit)
boolean verdadeiro / falso
string UTF-8 imutável
null ausência de valor
ref referência para heap

Não existem tipos implícitos, coerções mágicas ou overflows silenciosos.


4. Convenções da Pilha

  • Operações consomem operandos do topo da pilha
  • Resultados são empilhados
  • A pilha cresce para cima
  • Ordem: último empilhado = primeiro consumido

Exemplo:

PUSH3
PUSH4
ADD

Stack:

[3]
[3, 4]
[7]


5. Categorias de Instruções

O Instruction Set é organizado por função:

  1. Controle de fluxo
  2. Pilha
  3. Aritmética e lógica
  4. Variáveis
  5. Funções
  6. Heap e estruturas
  7. Interação com periféricos
  8. Sistema

6. Instruções da VM (v0.1)

6.1 Controle de Execução

Instrução Ciclos Descrição
NOP 1 Não faz nada
HALT 1 Encerra execução
JMP addr 2 Salta para endereço
JMP_IF_FALSE addr 3 Salta se topo da pilha for falso

6.2 Operações de Pilha

Instrução Ciclos Descrição
PUSH_CONST k 2 Empilha constante
POP 1 Remove topo da pilha
DUP 1 Duplica topo
SWAP 1 Troca dois topos

6.3 Aritmética

Instrução Ciclos Descrição
ADD 2 Soma
SUB 2 Subtração
MUL 4 Multiplicação
DIV 6 Divisão

Custos refletem complexidade relativa, não tempo real.


6.4 Comparações e Lógica

Instrução Ciclos
EQ 2
NEQ 2
LT 2
GT 2
AND 2
OR 2
NOT 1

6.5 Variáveis e Escopos

Instrução Ciclos Descrição
GET_GLOBAL idx 3 Lê global
SET_GLOBAL idx 3 Escreve global
GET_LOCAL idx 2 Lê local
SET_LOCAL idx 2 Escreve local

6.6 Funções e Chamadas

Instrução Ciclos Descrição
CALL addr 5 Chamada de função
RET 4 Retorno
PUSH_FRAME n 3 Cria frame local
POP_FRAME 3 Remove frame

6.7 Heap e Estruturas

Instrução Ciclos Descrição
ALLOC size 10 Aloca no heap
LOAD_REF off 3 Lê campo
STORE_REF off 3 Escreve campo

Toda alocação tem custo explícito.

O heap é finito e monitorado.


6.8 Periféricos (Chamadas Nativas)

Instrução Ciclos Descrição
CALL_NATIVE id variável Chamada ao sistema

Exemplos:

  • gfx.sprite
  • input.btn
  • audio.play

O custo depende do periférico e é documentado separadamente.


7. Erros de Execução

Erros são explícitos e fatais, nunca silenciosos:

  • stack underflow
  • acesso inválido ao heap
  • tipo incompatível
  • frame inválido

Todos geram:

  • mensagem clara
  • estado da VM
  • stack trace

8. Determinismo e Garantias

A PROMETEU VM garante:

  • mesma sequência de instruções → mesmo resultado
  • mesmos ciclos → mesma certificação
  • nenhuma otimização invisível
  • nenhuma execução especulativa

Se você vê a instrução, você paga por ela.


9. Relação com Linguagens de Alto Nível

Java, TypeScript e Lua são:

  • linguagens-fonte
  • compiladas para este Instruction Set
  • nunca executadas diretamente

Diferentes linguagens:

  • geram bytecode diferente
  • mas executam na mesma máquina

10. Exemplo Completo

Código fonte (conceitual)

x =3 +4;

Bytecode PROMETEU

PUSH_CONST3
PUSH_CONST4
ADD
SET_GLOBAL0

Custo total

2 + 2 + 2 + 3 = 9 cycles


11. Extensibilidade

O Instruction Set é versionado.

Novas versões podem adicionar:

  • instruções vetoriais
  • instruções de DMA
  • instruções de streaming
  • coprocessadores fictícios

Nenhuma instrução existente muda de significado.

< Voltar | Sumário | Adiante >