이 루프에서 이상한 결과가 나오고 있습니다. 그것은 필요한 것보다 더 많은 시간을 실행하고 있습니다. 그것은 재 계산 된대로 그냥 fib_2 표시 계속합니다. 무슨 일 이니?루프를 여러 번 실행
INCLUDE Irvine32.inc
UPPERBOUND = 47
LOWERBOUND = 0
.data
userName BYTE 33 DUP(0) ;string to be entered by user
intro_1 BYTE "Fibonacci Numbers", 0
intro_2 BYTE "Programmed by Marshall Todt", 0
prompt_1 BYTE "What's your name? ", 0
intro_3 BYTE "Hello, ", 0
intro_4 BYTE "Enter the number of Fibonacci terms to be displayed", 0
prompt_2 BYTE "How many Fibonacci terms do you want? ", 0
intro_5 BYTE "Give the number as an integer in the range [1...46].", 0
error_1 BYTE "Number of Fibonacci terms must be in the range [1-46].", 0
fibCount DWORD ?
fib_1 DWORD 1
fib_2 DWORD 1
fib_3 DWORD ?
goodBye_1 BYTE "Answers certified by Marshall Todt.", 0
goodBye_2 BYTE "Good-bye, ", 0
count DWORD ?
.code
main PROC
;Introduction
mov edx, OFFSET intro_1
call WriteString
call CrLf
mov edx, OFFSET intro_2
call WriteString
call CrLf
call CrLf
;getUserData
mov edx, OFFSET prompt_1
call WriteString
mov edx, OFFSET userName
mov ecx, 32
call ReadString
;userInstructions
mov edx, OFFSET intro_3
call WriteString
mov edx, OFFSET userName
call WriteString
call CrLf
mov edx, OFFSET intro_4
call WriteString
call CrLf
mov edx, OFFSET intro_5
call WriteString
call CrLf
reEnter:
call CrLf
mov edx, OFFSET prompt_2
call WriteString
mov edx, OFFSET fibCount
mov ecx, 32
call ReadString
;mov eax, fibCount
;cmp eax, LOWERBOUND
;jg reEnter ;jumps to reEnter if the number of fibonacci terms is not higher than the LOWERBOUND
;mov eax, fibCount
;cmp eax, UPPERBOUND
;jl reEnter ;jumps to reEnter if the number of fibonacci terms is not lower than the UPPERBOUND
mov eax, fibCount
sub eax, 2
mov count, eax
;displayFibs
mov eax, fib_1
Call WriteDec
Call CrLf
L1:
mov count, ecx
mov eax, fib_2
Call WriteDec
Call CrLf
;calculate Fibs
mov eax, fib_1
add eax, fib_2
mov fib_3, eax
mov eax, fib_2
mov fib_1, eax
mov eax, fib_3
mov fib_2, eax
mov ecx, count
loop L1
;farewell
mov edx, OFFSET goodBye_1
call WriteString
call CrLf
mov edx, OFFSET goodBye_2
call WriteString
mov edx, OFFSET userName
call WriteString
call CrLf
exit ; exit to operating system
main ENDP
END main
편집 : 코드
루프가 몇 번 실행 않습니다
나는 당신이 당신의 문제를 해결할 것 같아요? 루프에 처음 들어가면'ecx'의 값은 무엇입니까? 'WriteDec'과'CrLf'가'ecx'를 수정하지 않았습니까? –
나는 그들이 ECX을 수정할 생각하지 않는다 그것은이 두 번 –
관계없이 항상 35 시간을 실행하는 것 같다 실행해야 하나 개의 테스트에서 35 번을 실행합니다 (그러나 확실하게, 내가 저장하고 루프 전에 카운트를 검색 할 수 카운트 변수를 추가) 입력 한 번호 –