私が書いている仮想マシンで、次の擬似コードのような方法でコマンドをディスパッチできるようにしたいと考えています。
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 にコンパイルできる、プラットフォームに依存しない優れたアセンブリ コードがない限り、アセンブリにドロップダウンすることはできません。プロセッサに関係なく、それぞれが上に座っています。どんな助けでも大歓迎です。