- [zaixuexi] 我以为是a0=0,a1=1,没仔细看 02/12 09:23
- [yang5731] 不对吧 我的结果应该是对的 N=9时 确实得217 你自己算算。你帮我看看论坛 算法上的程序吧 题 02/11 23:49
- [zaixuexi] 递归不是这么写的哦,我想你肯定没调试过自己写的这代码. 先看C代码吧: unsigned int 02/11 22:58
- [游客] <a href="http://www.playren.com/">整人方法</a> 12/15 17:11
- [wisji8] mov ax,0a0h mul dh mov bx,ax mov ax,2 mul 10/03 16:56
- [yang5731] 谢谢了 课程设计一做出来了 确实不能调用着个····· 08/25 02:50
- [mywiil] 课程设计一要用到这个子程序,这里暂不做评论。 赶紧完成课程设计一吧。 08/21 03:33
[2011-02-11 17:46] 子程序的递归。设a1=0,a2=1,当N>=3时,an=a(n-1)+3*a(n-2)
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
[ 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,没仔细看