VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 汇编语言 >
  • 汇编语言-求X的阶乘

1. 题目:求X的阶乘值

2. 要求:输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现。

3. 提示:可以用递归来实现,也可以用简单的循环来实现。

这里使用循环来实现:

对于汇编新手,最好通过高级语言的编程测试,然后再写汇编代码,这样效果会好一些、

求阶乘的C++代码如下:

复制代码
 1 //The program is to find the factorial from 1 to 10
 2 //author:Karllen
 3 //Date:  05/21/2014
 4 
 5 #include <iostream>
 6 
 7 int factorial(int n);
 8 
 9 int main()
10 {
11     int n;
12     std::cin>>n;
13     std::cout<<factorial(n)<<std::endl;
14 
15     system("pause");
16     return 0;
17 }
18 
19 int factorial(int n)
20 {
21     int sum = 1;
22     while (n!=1)
23     {
24         sum*=n;
25         --n;
26     }
27     return sum;
28 }
复制代码

汇编代码如下:

复制代码
 1 ; Example assembly language program -- adds two numbers
 2 ; Author:  Karllen
 3 ; Date:    revised 05/2014
 4 
 5 .386
 6 .MODEL FLAT
 7 
 8 ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
 9 
10 INCLUDE io.h            ; header file for input/output
11 
12 cr      EQU     0dh     ; carriage return character
13 Lf      EQU     0ah     ; line feed
14 
15 .STACK  4096            ; reserve 4096-byte stack
16         
17 .DATA                   ; reserve storage for data
18         prompt   BYTE "The program is to find the factorial from 1 to 10",cr,Lf,0
19         numInput BYTE "Please enter a number from 1 to 10",cr,Lf,0
20         answer   BYTE "The number factorial is"
21         value    BYTE 11 DUP(?)
22                  BYTE cr,Lf,0
23 
24 PUBLIC _start         
25 .CODE 
26 _start:
27                                 ; start of main program code
28         output prompt 
29         
30         doInput:
31            output numInput
32            input  value,11
33            atod   value
34            cmp    eax,1
35            jl     doInput
36            cmp    eax,10
37            jg     doInput
38         push   eax
39         call   findFactorial
40         add    esp,4
41         
42         dtoa   value,eax
43         output answer 
44         
45         INVOKE  ExitProcess, 0  ; exit with return code 0
46                   ; make entry point public
47         
48  findFactorial  PROC NEAR32
49                   push ebp
50                   mov  ebp,esp
51                   
52                   mov  eax,[ebp+8]
53                   mov  ebx,eax
54                   cmp  eax,1
55                   je   endFindWhile     
56                   doFindWhile:
57                            dec ebx
58                            cmp ebx,1
59                            je  endFindWhile
60                            mul ebx
61                            jmp doFindWhile
62                   endFindWhile:          
63                   pop  ebp
64                   ret
65    findFactorial  ENDP
66 END                             ; end of source code
复制代码

测试结果:

书到用时方恨少,是非经过不知难。 博观而约取,厚积而薄发。@karllen 每天进步一点点。

原文:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3744109.html


相关教程