• calculates factorial n! by recursive (gnu assembly)


    學習軟體︰ GNU Assembly for Intel
    硬體平台︰ Intel
    作業平台︰ Linux、FreeBSD 和 Windows 的 MinGW
    說明︰ 1.市面上的組合語言書籍大多以 MASM 為主,缺乏介紹 GNU Assembly 的書。
    2.GNU Assembly 除了用在 Intel CPU上,也有其它知名 CPU 的版本,如 MIPS、SPARC等等。
    GNU Assembly 更可用在「嵌入式系統」的 ARM 或 Intel CPU上。
    3.GNU Assembly 和 GNU C++ 連結方式在 Windows 和 Linux 上的做法都是一致的。
    4.GNU 整套開發系列是跨平台而且免費的。
     1 #Program Description:
     2 #Author:Jeremy
     3 #Creation Date:2012/9/25 10:21
     4 #Revisions:
     5 #Date: #Modified by:
     6 
     7 # calculates factorial
     8 # int fact(int n)
     9 # { if(n<=1) return (1); #終止條件,令一個標籤
    10 # else return n*fact(n-1);
    11 # }
    12 
    13 
    14 .section .data 
    15 msg: .asciz "計算n!,請輸入n:"
    16 n: .int 0
    17 ofmt:.asciz "%d"
    18 .section .text# Using the stack
    19 #
    20 #用 global variable 
    21 _main:
    22 
    23 .globl _main
    24 movl $0, %ebx
    25 pushl $msg
    26 call _printf # printf("計算n!,請輸入n:")
    27 addl $4, %esp
    28 
    29 pushl $n
    30 pushl $ofmt
    31 call _scanf # scanf("%d",&n)
    32 addl $8, %esp
    33 
    34 movl n, %eax # n = %eax
    35 pushl %eax
    36 call fact 
    37 addl $4, %esp
    38 
    39 pushl %ebx #printf("%d",&n)
    40 pushl $ofmt 
    41 call _printf
    42 addl $8, %esp
    43 
    44 pushl $0     #exit(0)
    45 call _exit
    46 fact:
    47 pushl %ebp 
    48 movl %esp, %ebp
    49 
    50 movl 8(%ebp), %eax #read agrv
    51 cmp $1, %eax # test for n<=1
    52 jbe L1 # n <= 1 ,then go to fact_end, return n*fact(n-1)
    53 subl $1, %eax
    54 pushl %eax #fact(n-1)
    55 call fact
    56 movl 8(%ebp), %eax
    57 imull %eax, %ebx    
    58 jmp L2
    59 L1:
    60 addl $1, %ebx #if (n<=1) return 1 
    61 L2:    
    62 leave
    63 ret
    64 
    65  

    ref:http://203.64.187.42/99-A/Asm-99A/Asm-99A-Notes/

  • 相关阅读:
    项目三.
    项目二
    项目一.
    第三季-第27课-Shell脚本高级编程
    第三季-第26课-守护进程设计
    第三季-第26课-网络并发服务器设计
    第三季-第25课-UDP通讯程序设计
    刷新页面
    css让超出文字省略号
    css3 背景透明
  • 原文地址:https://www.cnblogs.com/bittorrent/p/2706482.html
Copyright © 2020-2023  润新知