Assembly を使用して 2 つの数値の GCD を取得し、私が見たチュートリアルで使用される例としてそれらを出力する単純な C++ プログラムを作成しています。それが何をしているのかは理解していますが、なぜそれが機能しないのか理解できません。編集:実行時に追加する必要がありますが、何も出力されません。
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
int result;
_asm
{
push ebp
mov ebp, esp
mov eax, a
mov ebx, b
looptop:
cmp eax, 0
je goback
cmp eax, ebx
jge modulo
xchg eax, ebx
modulo:
idiv ebx
mov eax, edx
jmp looptop
goback:
mov eax, ebx
mov esp, ebp
pop ebp
mov result, edx
}
return result;
}
int main()
{
cout << gcd(46,90) << endl;
return 0;
}
32ビットのWindowsシステムで実行しています。助けていただければ幸いです。コンパイルすると、4 つのエラーが発生します。
warning C4731: 'gcd' : frame pointer register 'ebp' modified by inline assembly code
warning C4731: 'gcd' : frame pointer register 'ebp' modified by inline assembly code
warning C4731: 'main' : frame pointer register 'ebp' modified by inline assembly code
warning C4731: 'main' : frame pointer register 'ebp' modified by inline assembly code