Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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

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
VisualStudio没有';引用堆栈变量时不要使用EBP 我有以下C++代码< /P> int myFuncSum( int a, int b) { int c; c = a + b; return c; } int main(int argc, char *argv[]) { int result; result = myFuncSum(100, 200); return 0; }_C++_Assembly_Visual Studio 2008 - Fatal编程技术网

VisualStudio没有';引用堆栈变量时不要使用EBP 我有以下C++代码< /P> int myFuncSum( int a, int b) { int c; c = a + b; return c; } int main(int argc, char *argv[]) { int result; result = myFuncSum(100, 200); return 0; }

VisualStudio没有';引用堆栈变量时不要使用EBP 我有以下C++代码< /P> int myFuncSum( int a, int b) { int c; c = a + b; return c; } int main(int argc, char *argv[]) { int result; result = myFuncSum(100, 200); return 0; },c++,assembly,visual-studio-2008,C++,Assembly,Visual Studio 2008,当我在Win7 Pro机器上的Visual Studio 2008的反汇编窗口中单步执行此操作时,我看到以下调用myFuncSum() intmyfuncsum(inta,intb) { 001C1000推式ebp 001C1001电动制动踏板,esp 001C1003推动ecx INTC; c=a+b; 001C1004 mov eax,dword ptr[a]反汇编程序只是想提供帮助,而不是对不相关的详细信息滥发太多信息。这并非完全偶然,在带有\uu asm关键字的内联汇编中也允许使用此语法

当我在Win7 Pro机器上的Visual Studio 2008的反汇编窗口中单步执行此操作时,我看到以下调用myFuncSum()

intmyfuncsum(inta,intb)
{
001C1000推式ebp
001C1001电动制动踏板,esp
001C1003推动ecx
INTC;
c=a+b;

001C1004 mov eax,dword ptr[a]反汇编程序只是想提供帮助,而不是对不相关的详细信息滥发太多信息。这并非完全偶然,在带有
\uu asm
关键字的内联汇编中也允许使用此语法缩写

您可以来回切换,右键单击“反汇编”窗口并取消选中“显示符号名称”。现在您将看到真实的机器代码:

    c = a + b;
003613DE  mov         eax,dword ptr [ebp+8]  
003613E1  add         eax,dword ptr [ebp+0Ch]  
003613E4  mov         dword ptr [ebp-8],eax  
    return c;
003613E7  mov         eax,dword ptr [ebp-8]  

它已经在使用
ebp
(或
esp
)引用它们但是你的反汇编程序只是想帮你把它转换成变量名。根据谷歌的说法,你可以右键点击弹出上下文菜单,取消选中
显示符号名
。我还建议在这样的函数中只返回总和,而不在函数中创建临时值。@NathanOliver,是的当然;但这是我遵循的初学者教程:)旁注-有一个编译器命令行选项用于关闭堆栈帧,这将释放ebp(除非不使用它,否则仍然保存),并将esp用于基于堆栈的变量。@Wad-Visual Studio的选项是“忽略帧指针”。命令行选项是/Oy(VS2013回到VC/C++4.0)。我不知道gcc。
    c = a + b;
003613DE  mov         eax,dword ptr [ebp+8]  
003613E1  add         eax,dword ptr [ebp+0Ch]  
003613E4  mov         dword ptr [ebp-8],eax  
    return c;
003613E7  mov         eax,dword ptr [ebp-8]