回 帖 发 新 帖 刷新版面

主题:高手进来改错哈!!!!!

题目是这样的:
编写计算菲薄那切数列前20个值的程序.菲薄那切数列的定义如下:
F(0)=0
F(1)=1
F(n)=F(n-1)+F(n-2),n≥2
 下面是我自己编的,但是显示不对,高手帮帮忙哈,一定给高分,呵呵
DATAS SEGMENT
    COUNT EQU 9
    F0 EQU 0000H
    F1 EQU 0001H
    RESULT DW 10 DUP(?),0DH,0AH,'$'  
DATAS ENDS

STACKS SEGMENT
    DB 100 DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,F0
    MOV BX,F1
    MOV CX,COUNT
AGAIN:ADD AX,BX
     MOV RESULT,AX
     push ax
     lea dx,RESULT
     MOV AH,09H
     int 21h
     pop ax
     add bx,ax
     mov RESULT,BX
     PUSH AX
     LEA DX,RESULT
     MOV AH,09H
     INT 21H
     POP AX
     loop AGAIN
     MOV AH,4CH
     INT 21H    
CODES ENDS
    END START

回复列表 (共5个回复)

沙发

自己顶了

板凳

;菲薄那切数列序列
DATA SEGMENT
    VALUE0 DW 0000H
    VALUE1 DW 0001H
    DIVN     DB 0AH
    VALUE3 DW 10 DUP(2)
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
        MOV AX,DATA
        MOV DS,AX
        MOV BX,OFFSET VALUE3
        
        MOV AX,0000H
        MOV [BX],AX
        INC BX
        INC BX
        MOV AX,0001H
        MOV [BX],AX
    
        MOV CX,8;计算
    AGAIN:
        PUSH VALUE1    
        MOV AX,VALUE0
        ADD AX,VALUE1
        INC BX
        INC BX
        MOV [BX],AX
        MOV VALUE1,AX
        POP VALUE0
    LOOP AGAIN
    
    MOV BX,OFFSET VALUE3
    MOV CX,10
    SHOW:    ;显示,可以改进
        MOV AX,[BX]
        DIV DIVN
        PUSH AX
        MOV DL,AL    ;商放在AL,由于和不会超过一百,故如此
        ADD DL,30H
        MOV AH,2
        INT 21H
        POP AX
        MOV DL,AH
        ADD DL,30H
        MOV AH,2
        INT 21H
        
        MOV DL,20H    ;空格
        MOV AH,2
        INT 21H
        INC BX
        INC BX
  LOOP SHOW
        MOV AH,4CH
        INT 21H
CODE ENDS
    END START

显示部分还不具有通用性,你注意看下09中断和02中断的不同.

3 楼

还行
不过只有十个数,我要20
可能是没搞清输出是ASCII码
谢了

4 楼


还行
不过只有十个数,我要20
可能是没搞清输出是ASCII码
谢了

5 楼

DATA SEGMENT
    VALUE0 DW 0000H
    VALUE1 DW 0001H
    DIVN   DW 000AH
    VALUE3 DW 50 DUP(?)
    VALUE4 DB 10 DUP(?),0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:
        MOV AX,DATA
        MOV DS,AX
        MOV BX,OFFSET VALUE3
        MOV AX,0000H
        MOV [BX],AX
        INC BX
        INC BX
        MOV AX,0001H
        MOV [BX],AX
        MOV CX,18;计算
AGAIN:  PUSH VALUE1    
        MOV AX,VALUE0
        ADD AX,VALUE1
        INC BX
        INC BX
        MOV [BX],AX
        MOV VALUE1,AX
        POP VALUE0
    LOOP AGAIN    
    MOV BX,OFFSET VALUE3
    MOV CX,20
    SHOW:    ;显示
        MOV AX,[BX]
        PUSH AX
        MOV SI,OFFSET VALUE4
        MOV DX,0000H
        CWD
        DIV DIVN
        ADD DX,30H
        MOV [SI+3],DX
        MOV DX,0000H
        CWD
        DIV DIVN
        ADD DX,30H
        MOV [SI+2],DX
        MOV DX,0000H
        CWD
        DIV DIVN
        ADD DX,30H
        MOV [SI+1],DX
        ADD AX,30H
        MOV [SI],AX
        CALL PRINT   
        MOV DX,20H
        MOV AH,2
        INT 21H
        INC BX
        INC BX
        POP AX        
  LOOP SHOW
        MOV AH,4CH
        INT 21H
PRINT PROC
      PUSH CX 
      MOV CX,4
LOOP1:MOV DL,[SI]
      MOV AH,2
      INT 21H
      INC SI
      LOOP LOOP1
      POP CX
      RET
PRINT ENDP
CODE ENDS
    END START
我新编的,有点问题,高手再帮帮忙

我来回复

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