当没有时,我的代码会遇到断点

时间:2017-11-10 09:47:47

标签: c++ assembly x86 masm

我试图用C ++编写基本计算器&部件。当我尝试添加两个整数时,应用程序在没有断点时命中断点。

这是我的代码。

#include <iostream>
#include <conio.h>

using namespace std;
extern "C" {int Add(int a, int b);}
extern "C" {int Subtract(int a, int b); }
extern "C" {int Multiply(int a, int b); }
extern "C" {int Divide(int a, int b); }

int main()
{
cout << "Choose one: "<< endl;
cout << "1. Add" << endl;
cout << "2. Subtract" << endl;
cout << "3. Multiply" << endl;
cout << "4. Divide" << endl;
char answer = _getch();

switch (answer) 
{
case '1':
    int x, y;
    cout << "x: ";
    cin >>  x;
    cout << "y:";
    cin >> y;
    cout << x << "+" << y << "=" << Add(x, y) << endl; //Breakpoint hits in this line
    break;
case '2':
    break;
case '3':
    break;
case '4':
    break;
}
_getch();
return 0;
}

这是装配部分

.code
Add PROC
  add ecx, edx
  mov eax, ecx
Add ENDP

Subtract PROC
  neg edx
  add ecx, edx
  mov eax, ecx
Subtract ENDPROC

Multiply ENDP
  imul ecx, edx
  mov eax, ecx
  ret
Multiply ENDP

Divide PROC
  mov r8d, edx
  mov eax, ecx
  cdq
  idiv r8d
  ret
Divide ENDPROC
End

我的错误是什么?并且,与主题无关但是,我的装配部分是否正确?我正在试图添加其他功能,但这对我来说非常复杂。花时间学习。

1 个答案:

答案 0 :(得分:0)

嗯,这有点奇怪,但答案是:

感谢Ped7g,我意识到我在汇编代码中错误地输入了ENDP作为ENDPROC。另外,我忘了键入&#34; ret&#34;在一些必要的地方,这解决了我的问题。

但遗憾的是,如果你遇到这个麻烦,这不是一个明确的答案。很抱歉这篇文章是noob。这不具有建设性。