我正在尝试导出.dll文件并尝试在我的c#应用程序中使用它来将数据写入端口。在我的.cpp文件中(创建.dll)如果我使用“out”命令,则会出现“错误C2415:不正确的操作数类型”错误消息。你知道为什么我不能使用这个“out”命令吗? (“mov”命令运行良好顺便说一句)
请参阅下面的代码:
#include <stdio.h>
extern "C" __declspec(dllexport) void enableWatchDog()
_asm {
out 66,41
out 62,4
}
}
答案 0 :(得分:5)
out
有六种形式:
out imm8, AL
out imm8, AX
out imm8, EAX
out DX, AL
out DX, AX
out DX, EAX
您的用法与其中任何一项都不相符。也许这会起作用(未经测试):
mov al, 41
out 66, al
mov al, 4
out 62, al
我对x86上的IO端口没有太多经验,但从我能够找到的内容来看,66和62对我来说似乎有点怀疑。它们不应该是66h和62h吗? 41h(可能是两个标志设置,或ASCII'A')对我来说比41(一个相当任意的数字)更有意义。
答案 1 :(得分:1)
程序集不是高级语言,您可以在任何地方插入任意表达式。 out
命令只能将Ax
寄存器用于第二个操作数,其中Ax表示AL,AX或EAX。所以重新制定如下:
mov al, 41
out 66, al
mov al, 4
out 62, al
out
命令具有特权;它仅适用于Windows上的内核级驱动程序,尝试在常规程序中执行此操作将使您获得&#34;无效操作&#34;错误。
答案 2 :(得分:0)
您使用的C ++ dll目标平台是什么?您需要编译为x86代码,而不是CLR。