0
사용자가 두 자리 숫자를 입력 할 수있게하려고합니다. 첫 번째는 기본이고 두 번째 숫자는 지수입니다.잘못된 값을 반환하는 어셈블리 전원
이 두 값은 올바르게 저장됩니다. 나는 이것을 인쇄함으로써 이것을 안다 (이 인쇄 코드는 현재 주석 처리되어있다). 그러나 기본^지수의 대답을 계산하는 내 루프가 잘못된 값을 반환하고 있습니다.
누구나 올바른 방향으로 나를 가리키거나 내 문제를 해결할 수 있습니까? 사전에
#/**
#* 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 #/
감사 :
이
내 코드입니다.
어떤 가치가 있습니까? scanf가 숫자 값 또는 ascii 값을 제공합니까? –