부호없는 비교의 조건부 분기 인 jae fin
이 주된 문제였습니다. 나는 부호가있는 비교를위한 조건부 분기 인 jge fin
을 사용하도록 변경했습니다.
아래 코드는 Microsoft Masm에서 작동하도록 수정되었습니다. 나는 실제 모드에서 인덱스 레지스터로 sp를 사용하는 것에 대해 확신하지 못하기 때문에 bp를 사용했습니다. 나는 fibo를 처음으로 두 번 눌러서 dx가 0이되도록 두 푸시를 변경했습니다.
할당이 의도 한 것 같지 않습니다. 일반적으로 입력은 n
이고 fibo는 nth
피보나치 수를 ax (n = {0,1,2,3,4, ...}의 경우)로 반환하도록되어 있습니다. {0,1,1,2,3,. ..}). fibo는 fib (n) = fib (n-1) + fib (n-2)를 기반으로 두 번 자체 호출을 요구합니다. 당신이 응답을 @rcgldr
.286
.model tiny,c
.code
org 0100h
main proc far
jmp short debut
val dw 00008h
debut:
; note - push immediate requires 80186 or later cpu
push word ptr 0ffffh ;fib(-2) == -1
push word ptr 00001h ;fib(-1) == 1
call fibo
add sp,4
hlt
main endp
fibo proc near
push bp ;real mode doesn't allow [sp...]
mov bp,sp ; using [bp...] instead
sub sp,4
mov dx,[bp+4]
mov [bp-2],dx
add dx,[bp+6]
mov [bp-4],dx
cmp dx,val
jge fin ;changed this line
call fibo
fin: add sp,4 ;added this line
pop bp ;added this line
ret 0 ;changed this line
fibo endp
end main
죄송합니다. 영어가 유창합니다 ^^ –