您的位置:首页 > 运维架构 > Linux

Linux下汇编学习-4

2011-12-05 16:08 190 查看
#PURPOSE:This program will compute the value of
# 2^3 + 5^2
.section .data
.section .text
.globl _start
_start:
pushl $3
pushl $2
call power

addl $8, %esp
pushl %eax

pushl $2
pushl $5
call power

addl $8, %esp
popl %ebx

addl %eax, %ebx

movl $1, %eax
int $0x80

.type power, @function
power:
pushl %ebp
movl %esp, %ebp
subl $4, %esp

movl 8(%ebp), %ebx
movl 12(%ebp), %ecx

movl %ebx, -4(%ebp)

power_loop_start:
cmpl $1, %ecx
je end_power
movl -4(%ebp), %eax
imull %ebx, %eax

movl %eax, -4(%ebp)
decl %ecx
jmp power_loop_start

end_power:
movl -4(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
使用.type funname @function去定义一个函数
使用call指令去调用一个子函数,在调用子函数我们要明确,函数参数放在什么地方,返回返回值放在什么地方,函数返回地址在什么地方以及函数内的局部变量放在什么地方。我们知道,调用call指令时会做如下工作,将当前pc指针压入栈中,跳转到标号处执行程序。那么在子函数中,我们要使用ret指令,使得子函数执行完后能够跳到主函数处继续执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: