回 帖 发 新 帖 刷新版面

主题:请那位大虾帮个忙看看哪里出了问题,我是汇编初学者,谢谢,急!!!关于fibonacci函数的

;****************************************************
stack     SEGMENT
        DW    100 DUP(?)
   tos  LABEL     WORD
stack   ENDS
;***************************************************

data    SEGMENT
  temp       DW    0
  result     DW    0
  mess1      DB   'input: $'
  mess2      DB   'output: $'
data    ENDS
;***************************************************
code    SEGMENT
;******************************************************
main     PROC    FAR   
     ASSUME  CS:code,DS:data,SS:stack
     MOV   AX,stack
     MOV   SS,AX
     MOV   SP,OFFSET tos
              
     PUSH    DS
     SUB     AX,AX
     PUSH    AX
   
     MOV     AX,data
     MOV     DS,AX                 
repeat:
     CALL    input            
     CALL    fib
     CALL    output     
     CALL    crlf
     JMP     repeat
     
     RET

main ENDP

;*******************************************************
input   PROC  NEAR     
    LEA   DX,mess1     
    MOV   AH,09     
    INT   21h     
    MOV  BX,0
newchar:     
    MOV  AH,1     
    INT  21h          
    SUB  AL,30h     
    JL   exit     
    CMP  AL,9d     
    JG   exit     
    CBW     
    XCHG  AX,BX     
    MOV   CX,10d     
    MUL   CX     
    XCHG  AX,BX     
    ADD   BX,AX     
    JMP   newchar       
exit:RET
input ENDP
;*******************************************************

output   PROC   NEAR

   LEA    DX,mess2
   MOV    AH,09
   INT    21h

   MOV    BX,result
   CALL   binidec
   CALL   crlf
   RET
output  ENDP
;*********************************************************
fib     PROC  NEAR
   
   
   CMP    BX,1d
   JE     f10
   CMP    BX,2d
   JE     f10                      
   CALL   save
   DEC    BX
   CALL   fib  
   CALL   save              
   CALL   restor
   MOV    AX,result
   MOV    temp,AX           
   DEC    BX                   
   CALL   fib
   MOV    AX,result
   ADD    temp,AX
   CALL   restor  
   MOV    AX,temp          
   MOV    result,AX                 
   JMP    return
f10: MOV result,1d
return:  RET                
fib   ENDP             
;********************************************************  
save   PROC   NEAR
       POP   BP
       PUSH  BX      
       PUSH  result
       PUSH  BP
       RET
save   ENDP
;*********************************************************
restor PROC  NEAR
       POP  BP
       POP  result           
       POP  BX
       PUSH BP
       RET
restor  ENDP

;********************************************************
binidec   PROC    NEAR

   PUSH    BX
   PUSH    CX
   MOV     CX,100d          ;divide by 100
   CALL    dec_div     
   MOV     CX,10d
   CALL    dec_div
   MOV     CX,1d
   CALL    dec_div
   POP     CX
   POP     BX
   RET
binidec  ENDP
;************************************************************

dec_div  PROC   NEAR

   MOV    AX,BX
   MOV    DX,0
   DIV    CX
   MOV    BX,DX
   MOV    DL,AL
  
   ADD    DL,30h
   MOV    AH,02h
   INT    21h
   RET
dec_div   ENDP
;************************************************************

crlf    PROC   NEAR

   MOV    DL,0ah
   MOV    AH,02h
   INT    21h

   MOV    DL,0dh
   MOV    AH,02h
   INT    21h
   RET
crlf      ENDP
;*****************************************************************
code   ENDS
;****************************************************************
      END   main

回复列表 (共1个回复)

沙发

写的好乱

http://www.programfan.com/club/showbbs.asp?id=129708

我来回复

您尚未登录,请登录后再回复。点此登录或注册