zoukankan      html  css  js  c++  java
  • Linux下汇编语言------计算n的阶乘

    用高级语言比方C语言写个阶乘非常easy,那如今就来熟悉下Linux使用AT&T汇编格式写一个程序来计算阶乘吧

    写法一是 使用跳转指令实现。写法二是使用函数来实现

    约定:本程序没有将结果打印在标准输出上。

    须要使用GDB调试查看

    写法一

    #as filename.s -o filename.o
    #ld filename.o -o filename 
    # gdb filename
    
    .section .data
    .section .text
    .globl _start
    _start:
    	movl $1, %eax #result = 1
    	movl $6, %ecx # n = 5
    	cmpl $1, %ecx
    	jle .loop_exit
    
    .start_loop:
    	imull %ecx, %eax
    	subl  $1, %ecx
    	cmpl $1, %ecx
    	jge .start_loop
    	movl %eax, %ebx
    	movl $1, %eax
    	int $0x80 
    .loop_exit:
    	movl $1, %eax
    	int $0x80
    
    --------------------函数写法待更新-------------------------

    写法二:函数递归

    .section .data
    .section .text
    .globl _start
    _start:
    	pushl $5
    	call .JC
    
    	movl %eax, %ebx
    	movl $1, %eax
    	int $0x80
    
    .JC:
    	pushl %ebp
    	movl %esp, %ebp
    	pushl %ebx
    	subl $4, %esp
    	movl 8(%ebp), %ebx #get n = 5;
    	
    	movl $1, %eax      #result = 1;
    	cmpl $1, %ebx	
    	jle .L1					
    	leal -1(%ebx), %eax		
    	movl %eax, (%esp)		
    	call .JC 
    	imull %ebx, %eax
    .L1:
    	addl $4, %esp
    	popl %ebx
    	popl %ebp
    	ret 
    
    

    查看结果:echo $?
    当然使用gdb来查看,会更明确。

    使用 echo $? 来查看的话,貌似n超过6了结果就显示不对,所以还是用gdb保险
  • 相关阅读:
    出差归来
    五一假期的开端
    哭。。。五一这就过拉。。。还没什么感觉那。。。呜呜
    爱姬家族新成员。。。
    大道至简读后感
    假期进度报告
    假期报告
    假期进度报告
    假期进度报告
    假期进度报告
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7255515.html
Copyright © 2011-2022 走看看