Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内联汇编,输出指令_C++_Assembly - Fatal编程技术网

C++ 内联汇编,输出指令

C++ 内联汇编,输出指令,c++,assembly,C++,Assembly,我试图导出一个.dll文件,并试图在我的c#应用程序中使用它将数据写入端口。在我的.cpp文件(创建一个.dll)中,如果我使用“out”命令,它会给出“error C2415:操作数类型不正确”错误消息。你知道我为什么不能使用这个“out”命令吗?(“mov”命令运行良好(顺便说一句) 请参见下面的我的代码: #include <stdio.h> extern "C" __declspec(dllexport) void enableWatchDog() _asm {

我试图导出一个.dll文件,并试图在我的c#应用程序中使用它将数据写入端口。在我的.cpp文件(创建一个.dll)中,如果我使用“out”命令,它会给出“error C2415:操作数类型不正确”错误消息。你知道我为什么不能使用这个“out”命令吗?(“mov”命令运行良好(顺便说一句)

请参见下面的我的代码:

#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与本机代码。