一、汇编分析
g:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
addl $3, %eax
popl %ebp
ret
f:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call g
leave
ret
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $8, (%esp)
call f
addl $1, %eax
leave
ret
分析结果:http://yunpan.cn/cJhSCXVbCxLdW 提取码: 956f
二、寻址方式小结
1、寄存器寻址
操作数在通用寄存器中。
例:movl %eax,%edx
2、立即寻址
指令的地址字段指出操作数本身,而不是操作数地址,不需要访问内存取数,因此指令执行时间很短。
例:movl $0x123,%eax
3、直接寻址
指令的地址字段直接指出操作数的内存地址,不需要其他转换。
例:movl 0x123,%eax
4、间接寻址
相对直接寻址而言,指令的地址字段不是操作数的真正地址,而是操作数地址的指示器。形式地址单元的内容才是操作数的有效地址。
例:movl (%ebx),%edx
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-10000290