C++ C++;使用int命令插入asm

C++ C++;使用int命令插入asm,c++,assembly,g++,inline-assembly,C++,Assembly,G++,Inline Assembly,我正在做作业,试着从键盘上读键盘上的键。我尝试使用16h中断,并从这段代码开始 int main(){ char key, shiftKey(2); asm ("movb %1, %%al;" "int $0x16;" "movb %%al, %0;" :"=r"(key) :"r"(shiftKey) :"%al" ); std::cout << int(key); } intmain()

我正在做作业,试着从键盘上读键盘上的键。我尝试使用
16h
中断,并从这段代码开始

int main(){
    char key, shiftKey(2);
    asm ("movb %1, %%al;"
         "int $0x16;"
         "movb %%al, %0;"
    :"=r"(key)
    :"r"(shiftKey)
    :"%al"
    );
    std::cout << int(key);
}
intmain(){
字符键、移位键(2);
asm(“movb%1,%%al
“整型$0x16;”
movb%%al,%0
:“=r”(键)
:“r”(移位键)
:%al
);

std::cout似乎您正在尝试在Windows下用G++编译此文件?
int$0x16
是一个BIOS调用,在Windows下不可用。@MichaelPetch是的,您是对的。您对其他中断有什么建议吗?我不确定您真正想做什么,或者您的级别有多低,但可能类似于:@MichaelPetch程序集是目标,我只使用C++来输出详细的信息。你也可以把你的标记作为一个答案。它是Windows上唯一稳定的系统调用ABI,它是通过DLL函数,而不是<代码> int >代码>或<代码> SysCurry>代码>……你可以从ASM调用DLL函数,但是我不建议从内联ASM中调用函数。这很难做到正确。最好用asm编写整个程序,或者至少用整个函数(如果你想在运行时看到东西的值而不是调试打印,请使用调试器)。GNU C内联asm是非常不可原谅的。