用汇编语言计算N阶乘(0到FFFFH).doc

用汇编语言计算N阶乘(0到FFFFH).doc

ID:49871360

大小:228.00 KB

页数:13页

时间:2020-03-05

用汇编语言计算N阶乘(0到FFFFH).doc_第1页
用汇编语言计算N阶乘(0到FFFFH).doc_第2页
用汇编语言计算N阶乘(0到FFFFH).doc_第3页
用汇编语言计算N阶乘(0到FFFFH).doc_第4页
用汇编语言计算N阶乘(0到FFFFH).doc_第5页
资源描述:

《用汇编语言计算N阶乘(0到FFFFH).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、设计题目编写计算N!的程序(数值N由键盘输入,结果在屏幕上输出。N的范围为0-65535,即刚好能被一个16位寄存器容纳)。二、开发目的由于当N值较大时(N>10),N的阶乘计算很繁琐并且计算容易出错。所以可以编写计算N!的程序,利用计算机强大的计算能力计算N!。这不仅能节省繁琐计算的时间,而且得到的N!的积比起手工算的要准确。三、设计方案N的阶乘为1*2*3……(N-1)*N,N的范围为(0000H—FFFFH),N!以字为单位存在一个或几个定义的数据段中。若已算到(n-1)!,假如它占4个字的空间,接下来它乘以n的原理,如图1所示。12图1(n-1)!*n的原理因此计

2、算N!的算法可以这样编写,当前n!的值为被乘数,内容存在str2中,单位为字,n+1的值为乘数,存在str1中,单位也为字。被乘数从str2首地址中内容开始与乘数相乘,得到32位的积,它的低16位覆盖掉当前被乘数所在存储空间的内容。接着str2下一个字的内容与乘数相乘,也得到32位的积,前一个积的高16位与现在积的低16位相加,它们的和覆盖掉当前被乘数所在存储空间的内容,若它们的和有进位,把进位加到现在积的高16位。直到把str2中内容乘完。然后乘数增1,循环上面的内容。直到执行完(N-1)!*N输入的N为4位16进制数,输出也为16进制数。一、程序流程图输入N值开始12判断

3、N值长度N是否大于5Y输出超出取值范围N把N值从ASCH码转化为4位16进制数N=0?YN输出N!为1n←1m←1m←m*n判断N!的积接下来的内容是否要存到附加段Yn←n+1Nm←m*nn←n+112n>N?Nn>N?NY输出m,也就是N!Y结束五、程序清单data1segmentinput1db'pleaseinputthenumber:','$'input2db10,?,10dup(?);输入的16进制数errordb'Outofrange','$'output1db'Theansweris1','$'output2db'Theansweris:','$'str1dw1

4、00dup(?);保存1—N(后一个数覆盖前一个数)str2dw7000hdup(?);N!乘积的值(1)pdw100dup(?);上一个乘积的高16位data1endsdata2segmentstr3dw7fffhdup(?);N!乘积的值(2)data2endscodesegmentassumecs:code,ds:data1,es:data2org100h;程序从偏移地址100h开始执行start:movax,data1;程序初始化movds,axmovax,data2moves,ax;初始化结束movah,9leadx,input1int21h12movah,2;回车

5、movdl,0dhint21hmovah,2;换行movdl,0ahint21hmovah,0ah;输入所需求的N值(N为16进制数)leadx,input2int21hmovah,2movdl,0dhint21hmovah,2movdl,0ahint21hleabx,input2moval,[bx+1];判断输入的N值是否超过FFFFHcmpal,4jas1movcl,4;把输入的N值有ASCH码转成16进制数movah,[bx+2]moval,[bx+3]cmpal,39hjaabc1def1:shlal,clcmpah,39hjaabc2def2:shrax,clmov

6、dh,almovah,[bx+4]moval,[bx+5]cmpal,39hjaabc3movcl,4def3:shlal,clcmpah,39hjaabc4def4:shrax,clmovdl,al;转换结束movax,dx;判断N值是否为0cmpax,0jzs212jmps3abc1:subal,37hjmpdef1abc2:subah,37hjmpdef2abc3:subal,37hjmpdef3abc4:subah,37hjmpdef4s1:movah,9;若N值超过FFFFH的输出leadx,errorint21hjmpnexts2:movah,9;N值为1的输出l

7、eadx,output1int21hjmpnexts3:movcx,ax;计算N的阶乘movax,1mov[str1],ax;N从1开始,作为乘数leasi,str2mov[si],ax;N!的积从1开始,作为被乘数movax,0mov[p],ax;(n-1)!的乘积的低16位与n相乘后积的高16位movbx,1;开始N!的乘积占一个字空间movWORDptr[p+10],0;(n-1)!的乘积的高16位与n相乘后积的低16位和(n-1)!的乘积的低16位与n相乘后积的高16位的和的进位,初始进位为0m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。