bison を使用して単純な電卓のアセンブリ コードを生成していますが、ここでバグが何であるかを正確に把握することはできません。すべての答えは 1 つの乗算のようです...
global intpow
intpow:
push ebp
mov ebp,esp
mov ecx,[ebp+8]
mov eax,[ebp+12]
loop:
cmp eax,1
jle finish
dec eax
imul ecx,ecx
jmp loop
finish:
mov eax,ecx
mov esp,ebp
pop ebp
ret
指数呼び出しを識別したときの .y ファイルのコードは次のとおりです。
exp '^' exp { $$ = pow ($1, $3);
printf("call\tintpow\n");
printf("push\tDWORD eax\n");
}
組み立て方が間違っていませんか?彼ら?両方?