Linux 学汇编语言,Linux 汇编语言开发入门学习(1)



在Unix 和 Linux 系统中,汇编语言格式采用的较多的是 AT&T 格式。

C程序:

int g(int x)

{

return x + 27;

}

int f(int x)

{

return g(x);

}

int main(void)

{

return f(2016) + 2;

}

在Ubuntu 14.04 上汇编结果:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

.file"main.c"

.text

.globlg

.typeg, @function

g:

.LFB0:

.cfi_startproc

pushq%rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq%rsp, %rbp

.cfi_def_cfa_register 6

movl%edi, -4(%rbp)

movl-4(%rbp), %eax

addl$27, %eax

popq%rbp

.cfi_def_cfa 7, 8

ret

.cfi_endproc

.LFE0:

.sizeg, .-g

.globlf

.typef, @function

f:

.LFB1:

.cfi_startproc

pushq%rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq%rsp, %rbp

.cfi_def_cfa_register 6

subq$8, %rsp

movl%edi, -4(%rbp)

movl-4(%rbp), %eax

movl%eax, %edi

callg

leave

.cfi_def_cfa 7, 8

ret

.cfi_endproc

.LFE1:

.sizef, .-f

.globlmain

.typemain, @function

main:

.LFB2:

.cfi_startproc

pushq%rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq%rsp, %rbp

.cfi_def_cfa_register 6

movl$2016, %edi

callf

addl$2, %eax

popq%rbp

.cfi_def_cfa 7, 8

ret

.cfi_endproc

.LFE2:

.sizemain, .-main

.ident"GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4"

.section.note.GNU-stack,"",@progbits

去掉用于链接和版本信息后的计算机会执行的汇编代码:

g:

pushq%rbp

movq%rsp, %rbp

movl%edi, -4(%rbp)

movl-4(%rbp), %eax

addl$27, %eax

popq%rbp

ret

f:

pushq%rbp

movq%rsp, %rbp

subq$8, %rsp

movl%edi, -4(%rbp)

movl-4(%rbp), %eax

movl%eax, %edi

callg

leave

ret

main:

pushq%rbp

movq%rsp, %rbp

movl$2016, %edi

callf

addl$2, %eax

popq%rbp

ret

实验截图:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

作者:冯峰

原创作品转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值