0

ユーザーに2桁を入力させようとしています。最初の数字は基数で、2番目の数字は指数です。

これら 2 つの値は正しく格納されます。私はそれらを印刷することでこれを知っています (この印刷コードは現在コメントアウトされています)。しかし、base^exponent の答えを計算するループが間違った値を返しています。

誰かが私を正しい方向に向けたり、私の問題を解決したりできますか?

これは私のコードです:

#/**
#* The pow subroutine calculates powers of natural bases
#* and exponents.
#*
#* Arguments:
#*
#* base - the exponential base
#* exp - the exponent
#*
#* Return value: 'base' raised to the power of 'exp'.
#*/

#int pow( int base, int exp )
# {
#  int total = 1;
#  while !(exp  <= 0){
#   total = total * base;
#   exp = exp -1;
#  }
#  return total;
# }

.bss
    EXP: .long 
    BASE: .long
    TOTAL: .long

.text
    FSTR: .asciz "%d"
    PSTR: .asciz "%d\n"

.global main

  inout:
    pushl %ebp      # Prolog: push the base pointer.
    movl  %esp, %ebp    # and copy stack pointer to EBP. 

    subl $4, %esp       # Reserve stack space for variable
    leal -4(%ebp), %eax     # Load address of stack var in eax


    pushl %eax      # Push second argument of scanf
    pushl $FSTR     # Push first argument of scanf
    call scanf      # Call scanf


    movl -4(%ebp), %eax     # Move result of scanf from stack to eax

    movl %ebp, %esp     # Clear local variables from stack.
    popl %ebp       # Restore caller's base pointer.
    ret             # return from subroutine.

  main:
    call inout
    movl %eax, BASE

    #pushl BASE
    #pushl $PSTR
    #call printf

    call inout
    movl %eax, EXP

    #pushl EXP
    #pushl $PSTR
    #call printf


    #subl $4, %esp
    #leal -4(%ebp), %eax
    #movl %eax, TOTAL

    movl $1, TOTAL

   loop:
    cmpl $0, EXP
    jle end
    movl TOTAL, %eax
    mull BASE
    movl %eax, TOTAL
    decl EXP
    jmp loop
    end:
    pushl %eax
    pushl $PSTR
    call printf
    #addl $4, %esp      #\
    pushl $0        #- Clean up and exit
    call exit       #/

前もって感謝します。

4

1 に答える 1

1

1 つの可能性は、デバッガーでコードをシングル ステップし、作業レジスターに予期される値が含まれていることを確認することです。

于 2012-06-07T08:17:57.870 に答える