• 汇编语言-求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
    复制代码

    测试结果:

  • 相关阅读:
    ASP.NET 父页面取子页面的值 TC
    C#代码规范 TC
    [Serializable]在C#中的作用NET 中的对象序列化 TC
    ADO.NET连接数据库 TC
    ASp.net 剖析三层架构 TC
    转载反编译Silverlight项目 TC
    ASP.NET FileUpload上传图片方法并解决上传文件大小 TC
    C#控件一览表 前所未有的震撼(太详细了) TC
    ASP.NET C#上传图片生成缩略图 TC
    项目总结 TC
  • 原文地址:https://www.cnblogs.com/xieyulin/p/7056422.html
Copyright © 2020-2023  润新知