В виртуальной машине, которую я пишу, я хочу иметь возможность отправлять команды способом, подобным следующему псевдокоду.
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:
}
Где память - это массив, содержащий байт-код, и pcсчетчик программ.Однако для этого требуется, чтобы каждая из этих позиций, к которой мы переходим, имела одинаковое количество инструкций перед следующим блоком.Переход к сборке невозможен, если только не существует замечательного кода сборки, независимого от платформы, который позволяет взять один и тот же код и скомпилировать его для Linux, Mac и Windows.Независимо от процессора каждый сидит на вершине.Любая помощь будет высоко ценится.