C++ 内联汇编,输出指令
我试图导出一个.dll文件,并试图在我的c#应用程序中使用它将数据写入端口。在我的.cpp文件(创建一个.dll)中,如果我使用“out”命令,它会给出“error C2415:操作数类型不正确”错误消息。你知道我为什么不能使用这个“out”命令吗?(“mov”命令运行良好(顺便说一句) 请参见下面的我的代码:C++ 内联汇编,输出指令,c++,assembly,C++,Assembly,我试图导出一个.dll文件,并试图在我的c#应用程序中使用它将数据写入端口。在我的.cpp文件(创建一个.dll)中,如果我使用“out”命令,它会给出“error C2415:操作数类型不正确”错误消息。你知道我为什么不能使用这个“out”命令吗?(“mov”命令运行良好(顺便说一句) 请参见下面的我的代码: #include <stdio.h> extern "C" __declspec(dllexport) void enableWatchDog() _asm {
#include <stdio.h>
extern "C" __declspec(dllexport) void enableWatchDog()
_asm {
out 66,41
out 62,4
}
}
#包括
外部“C”uu declspec(dllexport)void enableWatchDog()
_asm{
出局66,41
出局62,4
}
}
< C++ >你使用的目标平台是什么?你需要编译到x86代码,而不是CLR.< /P> < P>你的C++平台使用什么目标平台?您需要编译为x86代码,而不是CLR。out
有六种形式:
out imm8,AL
out imm8,AX
out imm8,EAX
out DX,AL
out DX,AX
out DX,EAX
你的用法一个也不匹配。也许这会起作用(未经测试):
我对x86上的IO端口没有太多经验,但根据我所能找到的,66和62对我来说似乎有点可疑。它们不应该是66小时和62小时吗?41h(可以是两个标志集,或ASCII“A”)对我来说也比41(一个相当任意的数字)更有意义。out
有六种形式:
out imm8,AL
out imm8,AX
out imm8,EAX
out DX,AL
out DX,AX
out DX,EAX
你的用法一个也不匹配。也许这会起作用(未经测试):
我对x86上的IO端口没有太多经验,但根据我所能找到的,66和62对我来说似乎有点可疑。它们不应该是66小时和62小时吗?41h(可以是两个标志集,或ASCII“A”)对我来说也比41(一个相当任意的数字)更有意义。汇编不是高级语言,您可以在任何地方插入任意表达式。out
命令只能为第二个操作数获取Ax
寄存器,其中Ax表示AL、Ax或EAX。因此,重新表述如下:
mov al, 41
out 66, al
mov al, 4
out 62, al
out
命令具有特权;它只适用于Windows上的内核级驱动程序,在常规程序中尝试这样做会导致“无效操作”错误。汇编不是高级语言,您可以在任何地方插入任意表达式。out
命令只能为第二个操作数获取Ax
寄存器,其中Ax表示AL、Ax或EAX。因此,重新表述如下:
mov al, 41
out 66, al
mov al, 4
out 62, al
out
命令具有特权;它只适用于Windows上的内核级驱动程序,在常规程序中尝试这样做会导致“无效操作”错误。什么是平台?窗户?如果是,您是否正在编写驱动程序?否则,out
将无法工作,您的程序将强制关闭。如果您尝试在Windows下创建计时器,请查看平台是什么?窗户?如果是,您是否正在编写驱动程序?否则,out
将无法工作,您的程序将强制关闭。如果您尝试在Windows下创建计时器,请查看错误“错误C2415:不正确的操作数类型”显然是关于out指令,而不是CLR与本机代码。错误“错误C2415:不正确的操作数类型”显然是关于out指令,不是CLR与本机代码。