Linux下汇编语言------计算n的阶乘
用高级语言比如C语言写个阶乘很简单,那现在就来熟悉下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保险
版权声明:本文为博主原创文章,未经博主允许不得转载。