用32位汇编求大数的阶乘
时间:2011-06-28
来源:互联网
include io32.inc
.data
jieguo byte 20h dup(?) ;保存中间结果
baocun byte 20h dup(?) ;保存最终结果
jishu byte 10 ;所求的阶乘
.code
start:
mov esi,0
mov jieguo[esi],1 ;初始化两个数组
add esi,1
init1:
mov jieguo[esi],0
add esi,1
mov eax,20h
cmp esi,eax
jne init1
mov esi,0
init2:
mov baocun[esi],0
add esi,1
mov eax,20h
cmp esi,eax
jne init2
mov esi,0
mov ecx,20h
loop4:
sub ecx,1 ;求中间结果一共有多少位
sub jieguo[ecx],0
jz loop4
loop1:
mov al,jishu ;当前的数值与中间结果的相乘
mov bl,jieguo[esi]
mov edi,esi
add esi,1
mul bl
loop2:
mov bl,0000ah ;将新的中间结果的各位数与原来结果的值相加保存在结果中
div bl
add baocun[edi],ah
mov bl,al
add edi,1
cmp bl,0
jne loop2
sub ecx,1
jnz loop1
mov edi,0
loop3:
mov al,baocun[edi]
mov jieguo[edi],al
add edi,1
cmp edi,20
jne loop3
mov al,jishu
sub al,1
mov jishu,al
jnz loop4
exit 0
end start
.data
jieguo byte 20h dup(?) ;保存中间结果
baocun byte 20h dup(?) ;保存最终结果
jishu byte 10 ;所求的阶乘
.code
start:
mov esi,0
mov jieguo[esi],1 ;初始化两个数组
add esi,1
init1:
mov jieguo[esi],0
add esi,1
mov eax,20h
cmp esi,eax
jne init1
mov esi,0
init2:
mov baocun[esi],0
add esi,1
mov eax,20h
cmp esi,eax
jne init2
mov esi,0
mov ecx,20h
loop4:
sub ecx,1 ;求中间结果一共有多少位
sub jieguo[ecx],0
jz loop4
loop1:
mov al,jishu ;当前的数值与中间结果的相乘
mov bl,jieguo[esi]
mov edi,esi
add esi,1
mul bl
loop2:
mov bl,0000ah ;将新的中间结果的各位数与原来结果的值相加保存在结果中
div bl
add baocun[edi],ah
mov bl,al
add edi,1
cmp bl,0
jne loop2
sub ecx,1
jnz loop1
mov edi,0
loop3:
mov al,baocun[edi]
mov jieguo[edi],al
add edi,1
cmp edi,20
jne loop3
mov al,jishu
sub al,1
mov jishu,al
jnz loop4
exit 0
end start
作者: liuhayue 发布时间: 2011-06-28
数组设置的比较小 我想先算个小的数阶乘 可以改 但是我的程序运行的时候出现异常 大概是内存不能write 求高手指点
作者: liuhayue 发布时间: 2011-06-28
作者: G_Spider 发布时间: 2011-06-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28