c语言斐波那契数列小于1000,8086汇编 输出斐波那契数列(值小于1000)

写的比较麻烦,因为把存放斐波那契数列的内存单元划分的正正好

其实真正应该是写个判断数<1000,然后边计算边输出最好

但是因为我觉得斐波那契前几项数是常识- -直接想了最好一项987是17项,就预留了20个字节单元

随意看看吧,代码太繁琐了,有时间再写个版本吧

data segment db 20 dup(0);第15项是377,前14项都小于255,最大的小于1000的数是987是第17项,所以预留20个字节单元 input db 'the fibonacci Sequence (under 1000) is:',0ah,0dh,'$' data ends stack segment db 20 dup(0) stack ends code segment assume cs:code,ds:data,ss:stack ;程序开始 begin: mov ax,data mov ds,ax lea dx,input;提示语句操作 mov ah,9;调用21中断的9号功能 int 21h xor dx,dx;dx清零 xor ax,ax;ax清零 mov cx,12;只要循环12次 mov bx,0;用bx存放前面一项a(n-1) mov dx,1;用dx存放后面一项a(n) mov si,0;ds:si指向表的第一个字节单元 mov [si],bx;存放初始的0,1两项 mov [si+1],dx mov si,2;ds:si指向表的第三个字节单元 sequence:;存放前面14项,只需要字节单元来存储,循环12次,不是14次,因为前面两项已经放进去了 push dx add dx,bx pop bx mov [si],dx inc si loop sequence mov cx,3;最后三项需要用字单元来存放 sequence2: push dx add dx,bx pop bx mov word ptr [si],dx add si,2;指向下一个字单元 loop sequence2 inputttt proc;过程名后面并没有用到只是为了方便我自己看 ;转化为10进制输出 mov si,18;需要从最后一项开始入栈,为了使输出的数列顺序正确 mov bx,10;设置除数 mov cx,3;比255大的3项,设置循环次数为3 abov255: mov ax,word ptr [si] mov dx,0;***之前这里忘了余数清零,出现了divide error的错误,需注意*** div bx push dx mov dx,0 div bx push dx mov dx,0 div bx push dx mov ax,(20h-30h);存入空格,本来准备存逗号,这样最后一个数后面就会多一个逗号,如果不把最后一个数从循环里拿出来的话,看着很不好 push ax sub si,2;ds:si指向上一个字单元 loop abov255 inc si;注意,因为是倒着过来减的,前面的是字单元,所以这里容易忘了si要加1,转变为字节单元 mov cx,2;比100大的但是比255小的有两项 be255: mov al, [si];大致操作与上面相同- -所以不自习注释了,就是传送的时候不是字节单元是字单元 mov ah,0 mov dx,0; div bx push dx mov dx,0 div bx push dx mov dx,0 div bx push dx mov dx,0 mov ax,(20h-30h) push ax dec si loop be255 mov cx,5;比100小的有5项 be100: mov al,[si];操作与上面差不多就是少了一位,少除1次 mov ah,0 mov dx,0 div bx push dx mov dx,0 div bx push dx mov ax,(20h-30h) push ax mov ax,0 dec si loop be100 mov cx,7;比10小的有七项 bel10:;比10小的数十进制位数只有一位,不用除直接入栈就好 mov al,[si] mov ah,0 push ax;余数入栈 mov ax,(20h-30h);存入空格,后面需要加上30h所以这里减去20h push ax dec si loop bel10 ;出栈,开始输出数列 mov cx,49 xor dx,dx inb10: pop dx add dl,30h;转化为编码 mov ah,2;调用2号功能输出 int 21h loop inb10 inputttt endp;输出过程结束   mov ax,4c00h;程序结束 int 21h code ends end begin ;下面是一个本来准备调用的子程序- -结果用不到了 ;oturntod: ;push ax ;push bx ;push cx ;push dx ;mov bx,10 ;xor cx,cx ;a: ;xor dx,dx ;div bx ;push dx;余数入栈 ;inc cx;用cx计数需要除10的次数,数有几位 ;cmp ax,0;商是否为0 ;jnz a ;loop a ;pop dx ;pop cx ;pop bx ;pop ax

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值