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:
- Controle de fluxo
- Pilha
- Aritmética e lógica
- Variáveis
- Funções
- Heap e estruturas
- Interação com periféricos
- 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.spriteinput.btnaudio.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.