Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++中进行实验组装,我尝试了下面的方法,这导致应用程序崩溃: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { __asm { push 5000 call Sleep } ... }_C++_Assembly - Fatal编程技术网

使用c++; 只是为了在C++中进行实验组装,我尝试了下面的方法,这导致应用程序崩溃: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { __asm { push 5000 call Sleep } ... }

使用c++; 只是为了在C++中进行实验组装,我尝试了下面的方法,这导致应用程序崩溃: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { __asm { push 5000 call Sleep } ... },c++,assembly,C++,Assembly,代码的汇编部分应该像下面的代码行一样 Sleep(5000); 我做错了什么 编辑:我遇到访问冲突。我这么做已经有很长时间了,但我回忆起过去,有时我不得不在EAX寄存器中放入一个参数,而不是将它推到堆栈上。或者,如果呼叫约定需要,您可能需要在单词后再次弹出它 正如Arak所说,检查您是否匹配编译器调用约定。Masm将强制执行一个约定,检查您的C编译器是否强制执行相同的约定。我不是x86人,但我认为您应该检查编译器使用的调用约定。似乎Sleep会在它自己之后进行清理,所以可能编译器也会在那之后插

代码的汇编部分应该像下面的代码行一样

Sleep(5000);
我做错了什么


编辑:我遇到访问冲突。

我这么做已经有很长时间了,但我回忆起过去,有时我不得不在EAX寄存器中放入一个参数,而不是将它推到堆栈上。或者,如果呼叫约定需要,您可能需要在单词后再次弹出它


正如Arak所说,检查您是否匹配编译器调用约定。Masm将强制执行一个约定,检查您的C编译器是否强制执行相同的约定。

我不是x86人,但我认为您应该检查编译器使用的调用约定。似乎
Sleep
会在它自己之后进行清理,所以可能编译器也会在那之后插入清理代码?

我刚刚检查了VC++6中的汇编代码

您必须这样调用例程:

call dword ptr [Sleep]

直接用C语言编写代码-反汇编,找出编译器的功能,然后就可以编写正确的版本-

发生了什么?什么事没有发生?编译器说什么?你会犯什么错误?缺少信息。您是否遇到堆栈溢出?错误是访问冲突。“睡眠”存在于哪个库中?在MASM中写入时,按下5000键,然后调用睡眠,效果非常好。