EclipseCDTとgdbを備えた64ビットリトルエンディアンUbuntu12.04LTSでgcc-4.7を使用してC++でインラインアセンブリを試してみました。私がやろうとしていることの一般的な方向性は、いくつかの難解なスタックベースのプログラミング言語用のある種のバイトコードインタープリターを作成することです。
この例では、一度に4ビットの命令を処理し(実際には、これは命令によって異なります)、ゼロ以外の命令がなくなると(0はnopになるため)、次の64ビットワードを読み取ります。 。
インラインアセンブリで関数スコープのラベルを使用するにはどうすればよいですか?
アセンブリ内のラベルはグローバルであるため、好ましくないようです。アセンブリステートメントからC++関数スコープのラベルにジャンプする方法が見つかりません。
次のコードは、私がやろうとしていることの例です(コメントに注意してください)。
...
register long ip asm("r8");
register long buf asm("r9");
register long op asm("r10");
...
fetch:
asm("mov (%r8), %r9");
asm("add $8, %r8");
control:
asm("test %r9, %r9");
asm("jz fetch"); // undefined reference to `fetch'
asm("shr $4, %r9");
asm("mov %r9, %r10");
asm("and $0xf, %r10");
switch (op) {
...
}
goto control;