匯編計(jì)算數(shù)的階乘-可計(jì)算1000萬內(nèi)的數(shù)的階乘_第1頁
匯編計(jì)算數(shù)的階乘-可計(jì)算1000萬內(nèi)的數(shù)的階乘_第2頁
匯編計(jì)算數(shù)的階乘-可計(jì)算1000萬內(nèi)的數(shù)的階乘_第3頁
匯編計(jì)算數(shù)的階乘-可計(jì)算1000萬內(nèi)的數(shù)的階乘_第4頁
匯編計(jì)算數(shù)的階乘-可計(jì)算1000萬內(nèi)的數(shù)的階乘_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本程序作者cabbage功能:計(jì)算1億以內(nèi)數(shù)的階乘E-mail:1225673051@;**********************求階乘程序,十進(jìn)制輸入一個(gè)數(shù),十進(jìn)制輸出其結(jié)果*********************STROUTMACRO;宏,DOS功能調(diào)用,設(shè)置字符串輸出入口參數(shù)MOVAH,09HINT21HENDMCHAR_INMACRO;宏,DOS功能調(diào)用,設(shè)置字符輸入入口參數(shù)MOVAH,01HINT21HENDMDATASSEGMENTPUBLICDATA1DB10HDUP(0)LEN1DW?LEN2DW?CONST1DW30CONST2DW40INDEXDB10HDUP(0)STR0DB'********************FACTORIAL**********************$'STR1DB0AH,0DH,'Pleaseinputthenum:$'STR2DB0AH,0DH,'Error!$'STR3DB0AH,0DH,'Theresultis:$'STR4DB0AH,0DH,'****************************************************$'STR5DB0AH,0DH,'Thankyouforusing!$'DATA3DB0FF24HDUP(0)DATASENDSDATAS1SEGMENTPUBLICDB0FFFFHDUP(0)DATAS1ENDSDATAS2SEGMENTPUBLIC DATA2DB0FFFFHDUP(0)DATAS2ENDSDATAS3SEGMENTPUBLICDB0FFFFHDUP(0)DATAS3ENDSSTACKSSEGMENTSTACKDW2000HDUP(?)TOPLABELWORDSTACKSENDSCODES1SEGMENTASSUMECS:CODES1,DS:DATAS,SS:STACKS,ES:DATAS2START:MOVAX,DATASMOVDS,AXMOVAX,STACKSMOVSS,AXMOVAX,DATAS2MOVES,AXMOVSP,OFFSETTOPMOVLEN1,OFFSETDATA2MOVLEN2,OFFSETDATA3MOVDX,OFFSETSTR0STROUTs1:CALLZERO;清零DATA1,DATA2,DATA3,INDEX,為保證運(yùn)行結(jié)果不受前次影響XORAX,AXXORBX,BXXORCX,CXXORDX,DX;清零AX,BX,CX,DX等寄存器,為保證運(yùn)行結(jié)果不受前次影響MOVDX,OFFSETSTR1STROUTXORSI,SIdo1:CHAR_INCMPAL,0DHJZd1CMPAL,'0'JBerrorCMPAL,'9'JAerrorSUBAL,'0'MOVDS:BYTEPTR[SI],AL;輸入原始數(shù)據(jù),按位輸入,高位先輸INCSIJMPdo1d1:CMPSI,0JZexitMOVCX,SIXORDI,DIdo2:MOVAL,DS:BYTEPTR[SI-1]MOVES:BYTEPTRDATA2[DI],AL;先給DATA2中賦值,使其等于輸入的數(shù)據(jù)INCDIDECSILOOPdo2MOVCX,DIXORSI,SIXORDI,DIdo3:MOVAL,ES:BYTEPTRDATA2[DI]MOVDS:BYTEPTR[SI],ALINCDI;再將DATA1中的數(shù)據(jù)實(shí)現(xiàn),高位存放在地址較大的存儲(chǔ)單元INCSILOOPdo3s2:XORAX,AXCALLFARPTRFAC;調(diào)用階乘計(jì)算函數(shù)CMPSI,1;當(dāng)還沒有計(jì)算到1時(shí),再次進(jìn)入階乘函數(shù)JNZs2MOVAL,DS:BYTEPTR[SI-1]CMPAL,1JZs3JMPs2s3:CALLFARPTRRESULT;輸出結(jié)果JMPs1error:MOVDX,OFFSETSTR2STROUTJMPs1exit:MOVDX,OFFSETSTR5STROUTMOVAH,4CHINT21HCODES1ENDS;*********************************************************CODES2SEGMENT ASSUMECS:CODES2,DS:DATAS,SS:STACKS,ES:DATAS2;遞歸子過程,計(jì)算階乘,沒當(dāng)遞歸次數(shù)大于等于5000時(shí),返回再次進(jìn)入,降低棧對遞歸的限制FACPROCFARINCAXPUSHAXdo6:MOVAL,ES:BYTEPTRDATA2[DI-1]DECDICMPAL,0JZdo6INCDICMPDI,CONST2JBs4CALLFARPTRDZEROs4:CMPSI,1JNZs5MOVAL,DS:BYTEPTR[SI-1]CMPAL,1JZs9JMPs6s5:MOVCX,SIDECCXXORBP,BPMOVAL,DS:BYTEPTR[BP]SUBAL,1PUSHFAASMOVDS:BYTEPTR[BP],ALdo4:INCBPMOVAL,DS:BYTEPTR[BP]POPFSBBAL,0PUSHFAASMOVDS:BYTEPTR[BP],ALLOOPdo4POPFMOVAL,DS:BYTEPTR[SI-1]CMPAL,0JNZs7DECSIJMPs7s6:MOVAL,DS:BYTEPTR[SI-1]SUBAL,1MOVDS:BYTEPTR[SI-1],ALs7:CALLFARPTRMULTPOPAXCMPAX,1388HJZs8CALLFARPTRFACs8:RETs9:POPAXRETFACENDPCODES2ENDS;*********************************************************;乘法運(yùn)算函數(shù),用于多位非壓縮碼BCD數(shù)(DATA1)與多位非壓縮碼BCD數(shù)(DATA2)的乘法運(yùn)算;,并將結(jié)果存放在DATA2中。將多位數(shù)乘法運(yùn)算轉(zhuǎn)變成多位數(shù)加法來運(yùn)行CODES3SEGMENT ASSUMECS:CODES3,DS:DATAS,SS:STACKS,ES:DATAS2MULTPROCFARPUSHAXPUSHBXPUSHCXPUSHDXPUSHBPPUSHSIPUSHDIPOPDXPOPCXXORDI,DIXORBP,BPPUSHCXs10:POPCXPUSHCXPUSHBPXORSI,SIs11:MOVBH,0MOVAH,0MOVBL,DS:BYTEPTR[SI]MOVAL,ES:BYTEPTRDATA2[DI]INCSIMULBLAAM;BCD調(diào)整指令PUSHBPMOVBL,AHXORAH,AHADDAL,DS:BYTEPTRDATA3[BP]AAA;BCD調(diào)整指令A(yù)DDBL,AH;可能產(chǎn)生進(jìn)位MOVDS:BYTEPTRDATA3[BP],ALINCBPMOVAL,BLs12:XORAH,AHADDAL,DS:BYTEPTRDATA3[BP]AAA;BCD調(diào)整指令MOVDS:BYTEPTRDATA3[BP],ALINCBPMOVAL,AHCMPAL,0JNZs12POPBPINCBPCMPSI,CXJNZs11INCDIMOVCX,BPPOPBPADDBP,1CMPDI,DXJNZs10INCCXXORBP,BPXORDI,DIdo5:MOVAL,DS:BYTEPTRDATA3[BP]MOVES:BYTEPTRDATA2[DI],ALMOVDS:BYTEPTRDATA3[BP],0INCDIINCBPLOOPdo5POPSIPOPBPPOPDXPOPCXPOPBXPOPAXRETMULTENDPCODES3ENDS;*********************************************************;結(jié)果輸出函數(shù),將以非壓縮BCD碼存放的結(jié)果轉(zhuǎn)換成科學(xué)計(jì)數(shù)法,并以字符輸出CODES4SEGMENT ASSUMECS:CODES4,DS:DATAS,SS:STACKS,ES:DATAS2RESULTPROCFARPUSHDXPUSHDIMOVCX,DIPUSHCXXORSI,SIXORBP,BPdo7:MOVAL,ES:BYTEPTRDATA2[DI-1]ADDAL,30HMOVDS:BYTEPTRDATA3[SI],AL;將DATA2中存放的數(shù)以逆序傳到DATA3中,并轉(zhuǎn)換成ASCII碼DECDIINCSILOOPdo7MOVDS:BYTEPTRDATA3[SI],'$'MOVDX,OFFSETSTR3STROUTCMPSI,20JAs13MOVDX,LEN2STROUTJMPs14s13:MOVDS:BYTEPTRDATA3[11],'$'MOVDL,DS:BYTEPTRDATA3[BX]MOVAH,02HINT21HMOVDL,'.'MOVAH,02HINT21HMOVDX,LEN2INCDX;第一位已經(jīng)輸出了STROUTMOVDL,'e'MOVAH,02HINT21HMOVDL,'+'MOVAH,02HINT21HSUBSI,1MOVCX,SI;存放現(xiàn)有數(shù)據(jù)的長度CALLFARPTRADDSMOVBX,OFFSETINDEXMOVCX,10HMOVSI,CXdo8:MOVAL,DS:BYTEPTR[BX][SI-1]DECCXDECSICMPAL,0JZdo8INCCXINCSIdo9:MOVDL,DS:BYTEPTR[BX][SI-1]ADDDL,30HMOVAH,02HDECSIINT21HLOOPdo9s14:MOVDX,OFFSETSTR4STROUTPOPCXPOPDIPOPDXRETRESULTENDPCODES4ENDS;*********************************************************;清零DATA1,DATA2,DATA3,INDEX,為保證運(yùn)行結(jié)果不受前次影響CODES5SEGMENT ASSUMECS:CODES5,DS:DATAS,SS:STACKS,ES:DATAS2ZEROPROCFARPUSHDXMOVCX,10HXORSI,SIdo10:MOVDS:BYTEPTR[SI],0MOVDS:BYTEPTRINDEX[SI],0INCSILOOPdo10MOVCX,0FF00HXORSI,SIdo11:MOVES:BYTEPTRDATA2[SI],0MOVDS:BYTEPTRDATA3[SI],0INCSILOOPdo11POPDXRETZEROENDPCODES5ENDS;*********************************************************;在運(yùn)行的過程中,當(dāng)DATA2中的結(jié)果位數(shù)很大時(shí),選擇性保留固定長度的高位,將舍棄的位數(shù)加到指數(shù)INDEX上CODES6SEGMENT ASSUMECS:CODES6,DS:DATAS,SS:STACKS,ES:DATAS2DZEROPROCFARPUSHDXPUSHCXPUSHBXPUSHAXPUSHSIMOVCX,DISUBCX,CONST1MOVDI,CXPUSHDIPUSHCXCALLFARPTRADDSPOPCXPOPDIXORSI,SIdo12:MOVES:BYTEPTRDATA2[SI],0INCSILOOPdo12MOVCX,CONST1XORSI,SIdo13:MOVAL,ES:BYTEPTRDATA2[DI]MOVES:BYTEPTRDATA2[SI],ALMOVES:BYTEPTRDATA2[DI],0INCSIINCDILOOPdo13MOVDI,CONST1POPSIPOPAXPOPBXPOPCX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論