回 帖 发 新 帖 刷新版面

主题:小看一下,解决的话有分加哦~!!!




用子程序结构编制计算:S=1!+2!+3!+4!+5!+6!+7!


各位老鸟们,兄弟姐妹们,快来帮忙啊。
小弟先谢谢了,!!!!!!!!!!!!!11

回复列表 (共3个回复)

沙发

好久没接触汇编了 手都生了
以下是我原来课程设计里的一个计算N!的子程序
相信有了它再求S=1!+2!+3!+4!+5!+6!+7!就不是什么难题了


;fact.asm
;功能:递归计算n!
;入口:n入栈
;出口:ax为n!的结果
;破坏寄存器:无
fact    proc    near
        push    bp
        mov     bp,sp
        push    bx
        push    dx
        mov     bx,[bp+4]
        cmp     bx,1
        jg      f1     ;参数n>1转
        mov     ax,1   ;最简单情况,把结果放到ax中
        jmp     f2
f1:     mov     dx,bx
        dec     dx     ;计算n-1
        push    dx     ;n-1入栈,准备递归调用
        call    fact   ;递归调用结果从ax带回
        pop     dx     ;丢弃调用前入栈的参数
        mul     bx     ;ax*bx,在ax中的积作为拼装结果
f2:     pop     dx
        pop     bx
        pop     bp
        ret
fact    endp

板凳

;这个程序缺少一个输出结果的过程。

.model small
.stack

.code
_main:
            xor        si, si        ;最终结果保存在 si 中
            mov        cx, 1
    _cmp_cl_7:
            cmp        cx, 7
            jg        _exit_
            xor        dx, dx
            mov        ax, 1
            mov        bx, 1
    _cmp_bl_cl:
            cmp        bx, cx
            jg        _add_si_ax
            mul        bx
            inc        bx
            jmp        _cmp_bl_cl
    _add_si_ax:
            add        si, ax
            inc        cx
            jmp        _cmp_cl_7
_exit_:
            mov        ax, 4c00H
            int        21H
end _main

3 楼

太简单拉

我来回复

您尚未登录,请登录后再回复。点此登录或注册