Olá, ultimamente estou fazendo uma máquina virtual baseada em registro, para usa-la junto com meu compilador. A máquina virtual tera uma memoria como essa:
uint32_t memory[UINT32_MAX];
Essa é a “memoria Ram”, e tenho o R_PC que é um registrador ponteiro das instruções. Minha duvida é a chamada de funções/label, não sei como implementar.
Por exemplo esse codigo em assembly da vm:
test:
load r0, #10
load r1, #20
add r0, r1
push r0
ret
main:
call print
kill
Esse codigo soma 10 + 20 e empurra para a pilha, a função ‘call print’ mostra o valor. Mas como posso fazer isso?
A máquina birtual tem que fazer duas passagem pelo codigo? Uma lendo as label e carregando as instruções na memoria, para depois ir executar?
Algo como:
struct Label {
bytecode text;
};
struct Label prog[] = {.......}
Onde o campo “text” da estruct seria o codigo da label?
Alguem pode me dar uma ideia.