0

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");
}

組み立て方が間違っていませんか?彼ら?両方?

4

1 に答える 1