【发布时间】:2015-12-29 21:38:06
【问题描述】:
我试图弄清楚如何在下面的内联汇编代码中使用变量 ret,但我不断收到此错误:未定义对 'ret 的引用。
char getkey(void){
int ret;
asm(
"movq $0, %RAX\n\t"
"INT $0X16\n\t"
"movq %RAX, ret"
);
return ret;
}
【问题讨论】:
-
我正在使用 gcc。我正在使用 ubuntu 操作系统。
-
您应该查看汇编器模板并将变量作为输入(和输出参数)gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
-
我在第一条评论中添加了指向文档的链接。
-
ret是指令的名称;这可能是导致它失败的原因 -
除了您没有正确使用 GCC 的内联程序集之外,此代码永远无法工作。 INT 0x16 键盘 BIOS 接口仅在实模式下工作,您无法从实模式访问 64 位寄存器(例如 RAX)。 (理论上它可以在 64 位 DOS 扩展器下工作,但据我所知不存在这样的东西。)
标签: c gcc assembly keyboardinterrupt