+ -
当前位置:首页 → 问答吧 → 用32位汇编求大数的阶乘

用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

作者: liuhayue   发布时间: 2011-06-28

数组设置的比较小 我想先算个小的数阶乘 可以改 但是我的程序运行的时候出现异常 大概是内存不能write 求高手指点

作者: liuhayue   发布时间: 2011-06-28

作者: G_Spider   发布时间: 2011-06-28