汇编网首页登录博客注册
yang5731的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-02-11 17:46] 子程序的递归。设a1=0,a2=1,当N>=3时,an=a(n-1)+3*a(n-2)

assume cs:code
data segment
var equ 9
data ends
code segment
start:        mov ax,data
        mov ds,ax
        mov cx,var
        mov bl,3
        mov si,0
        mov ax,1
        call di_gui
        mov ax,4c00h
        int 21h
di_gui        proc        
        cmp cx,3
        jna s1
        dec cx
        call di_gui
s1:        xchg ax,si
        mul bl
        add ax,si
        ret
di_gui        endp        
code ends
end start
评论次数(3)  |  浏览次数(1454)  |  类型(章节要点) |  收藏此文  | 

[  zaixuexi   发表于  2011-02-11 22:58  ]

递归不是这么写的哦,我想你肯定没调试过自己写的这代码.
先看C代码吧:
unsigned int recursive(unsigned int x)
{
 if(x == 0) return 0;
 else if(x == 1) return 1;
 else return recursive((x-1))+
             3*recursive((x-2)); 
}
再看汇编代码:
        .model tiny
        .code
        main proc far
start:
        xor ax,ax
        push ds
        push ax
        mov cx,var
        push cx               ;计算a(9)
        call recursive
        ret
        main endp
        recursive proc near   ;递归处理
        push bp
        mov bp,sp
        add sp,-4             ;为了保存中间结果
        mov ax,[bp+4]
        test ax,ax
        je  s
        dec ax
        jz  t
        mov [bp-2],ax
        push ax
        call recursive        ;递归计算a[n-1]
        mov [bp-4],ax
        mov ax,[bp-2]
        dec ax
        push ax
        call recursive        ;递归计算a[n-2]
        mov cl,2
        mov bx,ax
        shl ax,cl
        sub ax,bx     ;3*a[n-2]
        add ax,[bp-4] ;a[n-1]+3*a[n-2]
        db 0ebh,05h   ;懒的定义标号了,就这么写了
s:
        xor ax,ax
        db 0ebh,01h   ;这里也是
t:
        inc ax
        add sp,4
        pop bp
        ret 2
        recursive endp
        var equ 9
        end start
---------------------------------------------
1. a[9]的计算结果为508(D)=1fc(H),
而用你的代码计算出的是217(D)=0D9(H)

2. 稍微加了点注释,你有兴趣的话,可以看看,呵呵

[  yang5731   发表于  2011-02-11 23:49  ]

不对吧  我的结果应该是对的 N=9时 确实得217 你自己算算。你帮我看看论坛 算法上的程序吧 题目是一样的  知道是什么地方错了 就是想不出方法来

[  zaixuexi   发表于  2011-02-12 09:23  ]

我以为是a0=0,a1=1,没仔细看

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码