在C中,确保为多个代码段修复了汇编指令的数量

Mat*_*hew 0 c assembly goto dispatch vm-implementation

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

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:
}
Run Code Online (Sandbox Code Playgroud)

其中memory是包含字节码的数组,pc是程序计数器.但要做到这一点,我们要求跳转到的每个位置在下一个块之前具有完全相同的指令数.除非有一个很棒的平台无关的汇编代码,否则不能选择下载到汇编代码,这样就可以使用相同的代码并编译到Linux,Mac和Windows.无论每个处理器都坐在上面.任何和所有的帮助将不胜感激.

Has*_*kun 5

虽然我不知道如何实现你想要的(并且我知道允许计算跳转的唯一编译器是gcc),我建议你只使用一个switch,最优秀的优化编译器将转换为跳转表,或计算跳转,以适合您平台的方式正确处理指令对齐.