| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 912 人关注过本帖
标题:求助高手解释一下程序,不胜感激
只看楼主 加入收藏
wuyuhuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-11-1
收藏
 问题点数:0 回复次数:4 
求助高手解释一下程序,不胜感激
求高手解释一下每一步,详细点,我是菜鸟。。。
下面是相关部分(就是红色部分不懂,不知道怎么通过递归实现阶乘的),请大侠分析一下具体实现过程,先拜谢了!
STACK   SEGEMENT PARA STRCK  'STACK'
               DW  64 DUP (?)
STACK    ENDS
DATA      SEGEMENT
N             DB 8
FUNCN    DW ?
DATA      ENDS
CODE     SEGEMENT
               ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START: PUSH DS
             MOV    AX,0
             PUSH   AX
             MOV    AX ,DATA
             MOV    DS,AX
             PUSH   CX
             MOV    AH,0
             MOV    AL,N
             CALL   FACTOR
             MOV    FUNCN,AX
             POP    CX
             RET
MAIN     ENDP
FACTOR PROC NEAR
                PUSH AX
                SUB   AX,1
                JNE   AGAIN
                POP AX
                JMP FIN
AGAIN:    CALL FACTOR
                POP CX
                MUL CL
FIN:          RET
FACTOR ENDP
CODE      ENDS
                END  START
搜索更多相关主题的帖子: 感激 解释 
2007-11-26 16:09
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
以下解释假设factor(n)就是n的阶乘的结果,如factor(3)=6

factor(4)的计算顺序如下:

factor(4)=factor(3)*4     factor(3)还不知道是多少,看下一句
factor(3)=factor(2)*3     factor(2)还不知道是多少,看下一句
factor(2)=factor(1)*2     factor(1)还不知道是多少,看下一句
factor(1)=1                      factor(1)=1
然后依次返回
factor(2)=factor(1)*2=1*2=2
factor(3)=factor(2)*3=3*2=6
factor(4)=factor(3)*4=4*3=12

看看,结果出来了

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-26 16:34
wuyuhuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-11-1
收藏
得分:0 
回复 2# 的帖子
谢了! 能不能说一下寄存器以及参数的传递过程?
2007-11-26 19:20
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
PUSH AX  ;ax保存的是现在要计算的是多少的阶乘,我们假设这个数是n,先保存起来
                SUB   AX,1 ;ax减1
                JNE   AGAIN  ;如果减下来结果不为0,也就是说n不等于1,那么跳到下面的递归部分
                POP AX  ;如果n=1,则ax出栈,这时候ax=1,也就是1!=1
                JMP FIN  ;跳转到函数返回的部分
AGAIN:    CALL FACTOR  ;递归,注意这个时候,ax=n-1,这个递归运算结束后,ax保存的就是(n-1)!的值
                POP CX  ;上面入栈的ax的值,也就是n,赋值给cx
                MUL CL  ;把上面递归计算后的结果(已经保存在ax)乘以cl,那就得到了(n-1)!*n的值,也就是n!的值
FIN:          RET  ;返回,结果保存在ax中

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-26 19:33
wuyuhuan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-11-1
收藏
得分:0 
回复 4# 的帖子
太谢谢你了,我终于弄懂了,谢谢!
2007-11-26 19:40
快速回复:求助高手解释一下程序,不胜感激
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016679 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved