编译运行的时候出来了个56,不知道什么意思?
DATA SEGMENT
LIST DW 1,1,22 DUP (?)
COUNT DW 24
M EQU 8
N EQU 3
AN DW ?
DATA ENDS
STACK SEGMENT
DW 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV CX,N
CALL SUB1 ;调用子程序,计算N!
MOV BX,AX ;BX<-N!
MOV CX,M
CALL SUB1 ;调用子程序,计算M!
DIV BX ;AX<-M!/N!
MOV BX,AX
MOV CX,M
SUB CX,N
CALL SUB1 ;调用子程序,计算(M-N)!
XCHG BX,AX
DIV BX ;AX<-M!/N!/(M-N)!
MOV AN,2
CALL KR ;调用子程序,将十六进制数转为十进制数
CALL CR ;调用子程序,显示回车换行
LEA SI,LIST
MOV CX,COUNT
SUB CX,2
P1: CALL FIB ;调用子程序,计算斐波那契数的第24项
LOOP P1
MOV AX,LIST[44]
MOV AN,5
CALL KR ;调用子程序,将十六进制数转为十进制数
MOV AH,4CH
INT 21H
SUB1 PROC ;计算阶乘的子程序
MOV AX,1
NEXT: MUL CX
LOOP NEXT
RET
SUB1 ENDP
KR PROC ;将十六进制数转为十进制数子程序
PUSH CX
PUSH BX
PUSH DX
MOV CX,AN
MOV BX,10
LP1: XOR DX,DX
DIV BX
PUSH DX
LOOP LP1
MOV CX,AN
LP2: POP DX
CALL SHOW ;嵌套调用子程序,将结果用十进制数在屏幕上显示出来
LOOP LP2
POP DX
POP BX
POP CX
RET
KR ENDP
SHOW PROC ;将结果用十进制数在屏幕上显示出来子程序
ADD DL,30H
MOV AH,02H
INT 21H
RET
SHOW ENDP
FIB PROC ;计算斐波契数的第24项子程序
PUSH AX
PUSH CX
MOV AX,[SI]
ADD AX,[SI+2]
MOV [SI+4],AX
ADD SI,2
POP CX
POP AX
RET
FIB ENDP
CR PROC ;显示回车换行子程序
PUSH DX
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
POP DX
RET
CR ENDP
CODE ENDS
END START