汇编 求任意阶乘.doc

上传人:桔**** 文档编号:543272524 上传时间:2023-02-08 格式:DOC 页数:12 大小:92.51KB
返回 下载 相关 举报
汇编 求任意阶乘.doc_第1页
第1页 / 共12页
汇编 求任意阶乘.doc_第2页
第2页 / 共12页
汇编 求任意阶乘.doc_第3页
第3页 / 共12页
汇编 求任意阶乘.doc_第4页
第4页 / 共12页
汇编 求任意阶乘.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《汇编 求任意阶乘.doc》由会员分享,可在线阅读,更多相关《汇编 求任意阶乘.doc(12页珍藏版)》请在金锄头文库上搜索。

1、汇编 求阶乘By: scimence一、汇编 求阶乘1.程序运行基本结果12的阶乘 截图12.程序运行基本结果177的阶乘截图23.说明:本程序苛求去任意阶乘,位数大小受数值字符串tmp的和dos显示界面可以显示的位数的限制二、汇编 源程序DATASSEGMENTSTR1DB0AH, 0DH, - DB0AH, 0DH, Get n!DB0AH, 0DH, -, 0AH, 0DHDB0AH, 0DH, Please input the number, Enter to confirm, 0AH, 0DH,n = , $STR2DB0AH, 0DH, n! = , $tmpDW1, 3000 D

2、UP(-1);定义一个存储空间用于运行过程中临时存储数据,存储求得的阶乘tmpHDW3000 DUP(0);存储操作过程中相对于10000的商tmpLDW3000 DUP(0);存储操作过程中相对于10000的余数DATASENDSCODESSEGMENTASSUMECS: CODES, DS: DATAS;宏定义 字符输入charinMACRO;宏定义无参数的字符输入功能MOV AH, 01H;系统调用 输入一个字符用于功能选择INT 21H;字符默认输入到AL中ENDM;宏定义 字符输出charoutMACROoutchar;宏定义 将字符outchar输出PUSH AXPUSH DXMO

3、V DL, outcharMOV AH, 02H;系统调用 输出字符outcharINT 21H;调用系统中断 调用过程中会改变AL中的值,故将AX中的值入栈保存POP DXPOP AXENDM;宏定义 字符串输出stroutMACRO STRINGOUT;将字符串STRINGOUT输出PUSH AXPUSH BXPUSH CXPUSH DXLEA DX, STRINGOUT;将STRIN的偏移地址送到DX寄存器MOV AH, 9;09H字符串输出功能INT 21H;调用系统中断POP DXPOP CXPOP BXPOP AXENDM;宏定义 以baseNum进制输出AX中的数值outAXMA

4、CRObaseNum;宏定义换行PUSH AXPUSH BXPUSH CXPUSH DXMOV BX, baseNum;将要转换成的进制存入BX作为除数CALL outAXp;调用进制输出过程POP DXPOP CXPOP BXPOP AXENDM;过程定义以baseNum进制形式输出存放在AX中的数值过程outAXpPROCMOV DX, 0;初始化DX配合AX一起进行处罚操作MOV CX, 0;用CX计数取得个余数个数CMP AX, 0;判断AX中的值是否为0JNEoutAXp_Circlecharout 0JMPoutAXpExit0outAXp_Circle:CMP AX, 0;判断A

5、X中的值是否为0JE outAXp_NEXT;是则跳转DIV BX;不是则进行除10运算 商保存在AX中 余数保存在DX中PUSH DX;将对10取到的余数入栈保存MOV DX, 0;将DX中的余数清空 以便下一步对AX中的数进行除10运算INC CX;计数循环取得的余数个数JMP outAXp_CircleoutAXp_NEXT:;循环输出取得的余数POP AXCMP AL, 10;当余数小于10时,直接将数值输出JB noutADD AL, 55;否则将余数转化为对应的字符10对应字符Acharout ALJMP coutnout:ADD AL, 30Hcharout ALcout:LOO

6、P outAXp_NEXToutAXpExit0:REToutAXpENDP;宏定义 以baseNum进制输入数据串到AX中,可输入2-37进制inAXMACRObaseNum;宏定义换行PUSH BXPUSH CXPUSH DXMOV CX, baseNum;将要转换成的进制存入BX作为除数CALL inAXp;调用进制输入过程POP DXPOP CXPOP BXENDM;过程定义以baseNum进制形式输出存放在AX中的数值过程inAXpPROCMOVAX,0inAXp0:PUSH AXinAXp1:charin;逐个字符进行输入, 结果存放到AX中CMP AL, 13JEinAXE;当按

7、下Enter键后跳转AX的输出CMP AL, 0JBinAXp1;当输入字符小于0时,跳转inAXp1,跳转重新进行字符输入CMP AL, 9JAinAXnext1;当输入字符大于9时,跳转inAXnext1进一步进行比较SUBAL, 48;当字符在0-9之间时,将字符转化为对应的数值JMP inAXnum;跳转数值输入inAXnext1:CMP AL, AJBinAXp1;当输入字符小于A时,跳转重新进行字符输入CMP AL, ZJAinAXnext2;当输入字符大于Z时,跳转inAXnext2进一步进行比较SUBAL, 55;当字符在A-Z之间时,将字符转化为对应的数值,并跳转到数值输入J

8、MP inAXnuminAXnext2:CMP AL, aJBinAXp1;当输入字符小于A时,跳转重新进行字符输入CMP AL, zJAinAXp1;当输入字符小于A时,跳转重新进行字符输入SUBAL, 87;当字符在a-z之间时,将字符转化为对应的数值,并跳转到数值输入JMP inAXnuminAXnum:MOV BH, 0;将数值送到AX中MOV BL, ALPOPAXCMP AX, 0;当AX中的数值为0时,跳过乘法操作JEinAXaddMUL CX;乘以CX中的进制基数inAXadd:ADD AX, BXJMP inAXp0inAXE:POPAX;将计算得到的数值出栈到AX中RETi

9、nAXpENDP;宏定义 换行endlMACRO;宏定义换行PUSH AXPUSH BXPUSH CXPUSH DXMOV DL, 0AH;先输出垂直Tab键MOV AH, 2INT 21H;调用系统中断实现输出MOV DL, 0DH;再将输出输出调至段首INT 21H;调用系统中断POP DXPOP CXPOP BXPOP AXENDM;宏定义 输出字符串NumStr所表示的数值,输出的数值字符串必须以-1结尾outNumMACRONumStrPUSH AXPUSH BXPUSH CXPUSH DXPUSH SILEABX, NumStr;用BX存储字符串NumStr在DS中的首地址CALL

10、 outNump;调用字符串NumStr数值输出过程POP SIPOP DXPOP CXPOP BXPOP AXENDM;过程定义输出字符串NumStr所表示的数值过程outNumpPROCoutNumStr:;将NumStr中的字符串数值输出MOV SI, -2toTmpEnd:;使SI指向tmp的数值结尾处ADD SI, 2MOV AX, BX+SI;取出tmp中的数值到AX中CMP AX, -1JNEtoTmpEnd;SI未到达tmp中的数值的结尾处时,跳转SUB SI, 2CMP SI, -2JEoutNumpRetMOV AX, BX+SI;取出tmp中的第一个数值到AX中outAX

11、10;将AX中的数以10进制形式输出outNumStrNext:SUB SI, 2CMP SI, -2JEoutNumpRetMOV AX, BX+SI;取出tmp中的数值到AX中CMP AX, 1000JAEoutNumStroutAX;AX中的数值大于等于1000时跳转charout 0;AX小于1000时先输出一个字符0CMP AX, 100JAEoutNumStroutAXcharout 0;AX小于100时再输出一个字符0CMP AX, 10JAEoutNumStroutAXcharout 0;AX小于10时再输出一个字符0outNumStroutAX:outAX10;将AX中的数以10进制形式输出JMP outNumStrNext;跳转进行下一位数值的输出outNumpRet:REToutNumpENDPSTART:MOV AX, DATAS;将数据段地址送到AX中MOV DS, AX;由AX转送到送到DSstrout STR1;字符串输出宏调用 输出字符串STR61inAX10;以10进制的形式输入要求阶乘的数到AX中MOV CX, AX;求阶乘的数转至CX中strout STR2;字符串输出宏调用 输出字符串STR62inTmp:;求取CX的阶乘,并将结果存储到tmp中MOV BX, 1;BX逐步求阶的乘数inTmpNext:CMP CX, 0JE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号