汇编语言输出前50项斐波那契数

汇编输出50项斐波那契数列,用迭代法(循环)不用递归方法,实验环境masm for windows

楼主看到上面的答案估计五味杂陈的^_^

我只找到这个动态打打印的😂

img

img


ORG 100H
.MODEL SMALL
.STACK 100H
.DATA 
R DB 'ENTER RANGE $'
F DB 0
S DB 1
SUM DB ?
N DW ? 
FAB DB 13,10,13,10,'FABANOCCI SERIES$'
.CODE
MAIN PROC

MOV DX,OFFSET R
MOV AH,9 ;PRINTING A STRING
INT 21H

;INPUT CODE STARTS HERE
MOV N,0 ;N = 0
MOV BL,10 ;BL = 10
INPUT:
MOV AH,1 ;TAKE INPUT
INT 21H
CMP AL,13 ;IF(INPUT == ENTER) 
JE NEXT ;JUMP EQUAL TO
SUB AL,30H
MOV AH,0
MOV CX,AX ;CX = AX
MOV AX,N ;AX = N
MUL BL ;AX = AX BL
ADD AX,CX ;AX = AX + CX
MOV N,AX ;N = AX
JMP INPUT
;INPUT CODE ENDS HERE

NEXT:
LEA DX,FAB 
MOV AH,9
INT 21H

MOV CX,N ;CX = N
L:

PUSH CX

MOV DL,10 
MOV AH,2
INT 21H

MOV DL,13
MOV AH,2
INT 21H

MOV BL,F ;BL = F = 0
ADD BL,S ;BL = BL + S
MOV SUM,BL ;SUM = BL

;OUTPUT CODE STARTS HERE
MOV AH,0 ;AH = 0
MOV AL,SUM ;AL = SUM

;DISPLAY
MOV DX,0
MOV BX,10
MOV CX,0
L1:
DIV BX
PUSH DX
MOV DX,0
;MOV AH,0 ;AX AH 00000000 AL=QUOTIENT
INC CX
CMP AX,0
JNE L1
MOV AH,2
L2:
POP DX
ADD DX,48
INT 21H
LOOP L2

;OUTPUT CODE ENDS HERE

MOV BL,S ;BL = S
MOV F,BL ;F = BL F = S

MOV BL,SUM ;BL = SUM
MOV S,BL ;S = BL

POP CX
LOOP L

RET

MAIN ENDP
END MAINP

include Irvine32.inc
.data
emp BYTE " ",0
.code
main PROC
    mov eax,0;g
    mov ebx,1;f
    mov ecx,50;输出前50项
    L:
     add eax,ebx;g+=f
     mov edx,eax
     sub edx,ebx
     mov ebx,edx;f=g-f
     call WriteDec      ;以32位无符号数的形式输出eax
     mov edx,OFFSET emp
     call WriteString   ;输出空格(即edx对应的字符串)
     loop L
    exit
 main ENDP
 END main


include Irvine32.inc
.data
emp BYTE " ",0
.code
main PROC
    mov eax,0;g
    mov ebx,1;f
    mov ecx,25   ;输出前25项
    L:
     add eax,ebx;g+=f
     mov edx,eax
     sub edx,ebx
     mov ebx,edx;f=g-f
     call WriteDec      ;以32位无符号数的形式输出eax
     mov edx,OFFSET emp
     call WriteString   ;输出空格(即edx对应的字符串)
     loop L
    exit
 main ENDP
 END main

首先将斐波那契数分解为22357111319233747*53=78,即前50项的斐波那契数之和为78,则斐波那契数列中的第一个斐波那契数是:1,第二个斐波那契数是:4,以此类推.然后用编程语言实现,编写程序输出该斐波那契数列.
程序如下:# include< stdio. h> inti, sum; scanf ("% d",& i); for (i=0; i<50; i++){ sum= sum+ i;} printf ("% d\ n", sum); return-1;}
汇编语言可以使用递归方法,这样就能很容易地计算斐波那契数了.

参考链接:http://t.csdn.cn/smxfI
不会写汇编,可以先写C/C++语言代码,然后用GCC编译,自然就可以看到汇编代码🐵

include Irvine32.inc
.data
emp BYTE " ",0
.code
main PROC
    mov eax,0;g
    mov ebx,1;f
    mov ecx,50   ;输出前50项
    L:
     add eax,ebx;g+=f
     mov edx,eax
     sub edx,ebx
     mov ebx,edx;f=g-f
     call WriteDec      ;以32位无符号数的形式输出eax
     mov edx,OFFSET emp
     call WriteString   ;输出空格(即edx对应的字符串)
     loop L
    exit
 main ENDP
 END main