|
Source program:
READNUM MACRO NUM
MOV AH,01H
INT 21H
SUB AL,'0'
MOV BH,0AH
MUL BH
MOV NUM,AL
MOV AH,01H
INT 21H
SUB AL,'0'
ADD NUM,AL
ENDM
PRINT MACRO MSG
MOV AH,09H
MOV DX,OFFSET MSG
INT 21H
ENDM
DATA SEGMENT
MSG DB 'PROGRAM FOR GENERATING FIBONACCI SERIES ..$'
MSG1 DB 0DH,0AH,'ENTER THE LIMIT OF THE SERIES..$'
MSG2 DB 0DH,0AH,'THE SERIES IS..$'
FIB DW 100 DUP(0)
NUM DB ?
NEWLINE DB 0DH,0AH,'$'
RESULT DB 20 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
PRINT MSG1
READNUM NUM
MOV SI,OFFSET FIB
MOV BX,00
MOV WORD PTR[SI],BX
ADD SI,02
INC BX
MOV WORD PTR[SI],BX
MOV CH,00
MOV CL,NUM
NEXTFIB:
SUB SI,02
MOV AX,WORD PTR[SI]
ADD SI,02
MOV DX,WORD PTR[SI]
ADD AX,DX
ADD SI,02
MOV WORD PTR[SI],AX
INC BX
CMP BX,CX
JL NEXTFIB
PRINT MSG2
MOV BX,00
MOV SI,OFFSET RESULT
NEXTPRN:
MOV AX,WORD PTR FIB[BX]
CALL HEX2ASC
PRINT NEWLINE
PRINT RESULT
ADD BX,02
LOOP NEXTPRN
MOV AH,4CH
MOV AL,00H
INT 21H
HEX2ASC PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV CX,00H
MOV BX,0AH
RPT1:
MOV DX,00
DIV BX
ADD DL,'0'
PUSH DX
INC CX
CMP AX,0AH
JGE RPT1
ADD AL,'0'
MOV [SI],AL
RPT2:
POP AX
INC SI
MOV [SI],AL
LOOP RPT2
INC SI
MOV AL,'$'
MOV [SI],AL
POP SI
POP DX
POP CX
POP BX
POP AX
RET
HEX2ASC ENDP
CODE ENDS
END START
|