我正在使用带有 Eclipse CDT 和 gdb 的 64 位小端 Ubuntu 12.04 LTS 上的 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;