Maquina virtual em C

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.