. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  100!  [已解决] 回复[ 5次 ]   点击[ 376次 ]  
xy26333
[帖 主]   [ 发表时间:2010-05-02 10:49 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09
只用前5章的内容,不能用乘法,加减随便用 必须使用循环,能否完成1~~100的阶乘....想了我一数学课都没想出来!!!
versaariel
[第1楼]   [ 回复时间:2010-05-02 13:34 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
这是算法的问题了,和语言没多大的关系
4!=1*2*3*4=24
base = 0 
push op[base++]
push op[base++]
call f
push 前次f结果
push op[base++]
call f
---------------------------------------------------
f里做m*n
cx = n
add ax,m
xy26333
[第2楼]   [ 回复时间:2010-05-02 14:39 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09
我还没学 call f 还有什么 [base++] 只学过loop 的循环 能做么
versaariel
[第3楼]   [ 回复时间:2010-05-02 18:58 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
//4!
assume cs:code,ds:data
data segment
va_in  dw 4
va_out dw 0
va_len dw 0
data ends
code segment

start:
        mov ax,data
        mov ds,ax
        mov cx,va_in
s0:        
        push cx
        loop s0

        mov cx,va_in
        dec cx
s1:
        mov va_len,cx
        pop bx
        pop cx
        xor ax,ax
s2:        

        add ax,bx
        loop s2
        push ax
        mov cx,va_len
        loop s1
        
        mov va_out,ax
        int 3
exit:
        mov ax,4c00h
        int 21h

code ends
end start100!要考虑数据大小了,如果你刚开始学,不建议做这个
versaariel
[第4楼]   [ 回复时间:2010-05-02 19:02 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
这段程序作为模块用的话这么写栈会不平衡,这个你可以先不用管,主要看看里面的loop用法就行^-^
xy26333
[第5楼]   [ 回复时间:2010-05-06 02:05 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:16
注册日期:2010-04-02 01:09
此贴由 贴主 于 [ 2010-05-06 02:05 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(versaariel):2分   3楼(versaariel):6分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved