0

在我正在编写的虚拟机中,我希望能够以类似于以下伪代码的方式调度命令。

add: reg[memory[pc+1]] =  reg[memory[pc+1]] + reg[memory[pc+2]]; pc += 2; goto done;
sub: reg[memory[pc+1]] =  reg[memory[pc+1]] - reg[memory[pc+2]]; pc += 2; goto done;
cmp: /* Would take more space than simply x = x + y; */ goto done;

for(int pc = 0; memory[pc] != END; pc++) {
    goto currentPositionInMemorySomehow + (memory[pc] * lengthOfInstruction);
    done:
}

其中 memory 是一个包含字节码的数组,而 pc 是一个程序计数器。然而,要做到这一点需要我们跳转到的每个位置在下一个块之前具有完全相同数量的指令。下拉到汇编不是一种选择,除非有一个很棒的平台无关的汇编代码,它允许使用相同的代码并编译到 Linux、Mac 和 Windows。无论每个处理器都位于哪个处理器之上。任何和所有的帮助将不胜感激。

4

2 回答 2

5

虽然我不知道有一种方法可以准确地实现你想要的(而且我知道的唯一允许计算跳转的编译器是 gcc),但我建议你简单地使用 a switch,大多数体面的优化编译器将转换为跳转表,或计算跳转,以适合您平台的方式正确处理指令对齐。

于 2011-07-18T18:33:27.423 回答
2

您似乎想编写一些 C 代码,这些代码将编译为与目标平台无关的大小的可执行代码。这简直是​​一个不切实际的目标。

于 2011-07-18T18:23:52.657 回答