从汇编的角度看C语言(一)

@[TOC]从汇编的角度看C语言(一)

从汇编的角度看C语言

gcc -S 参数可以把C语言代码转换成汇编代码。对照汇编代码看C别有一番风味,很多编译器行为都有了本质的解释。
本人对汇编也是一知半解,工作中没有用到过,上学时候学的还是16位的汇编,基本上也忘光了。一边学习一边记录吧。

复习汇编,一个简单的例子

如下是一段非常简单的c程序,文件名为:aa.cpp

int main(int argc, char* argv[])
{
	int abc = 5;

	return abc;
}

把它编译成汇编
gcc -S aa.cpp
生成汇编结果aa.s, 我在文件中增加了一些注释。
在这里插入图片描述
本程序只有一个代码段,没有数据段。参数和临时变量存储在栈中,栈属于代码段。本程序栈空间的组织如下:
在这里插入图片描述

函数调用

再分析以下带简单函数调用的例子

int myfunc(int a)
{
   
        int  b = 99;
        long l = 2;
        long t = 3;
        a++;
        return a;
}

int main(int argc, char* argv[])
{
   
        int  a = 1;
        long e = 5;
        a = myfunc(a);

        return a;
}

对照的汇编代码如下:

        .section        __TEXT,__text,regular,pure_instructions
        .build_version macos, 10, 15, 4 sdk_version 10, 15, 4
        .globl  __Z6myfunci             ## -- Begin function _Z6myfunci
        .p2align        4, 0x90
__Z6myfunci:                            ## @_Z6myfunci
        .cfi_startproc
## %bb.0:
        pushq   %rbp              ; 保存栈基址,
        .cfi_def_cfa_offset 16    ; 把栈指针赋值给栈基址,
        .cfi_offset %rbp, -16     ; 每个函数开头五行都是如此
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        movl    %edi, -4(%rbp)    ; 把参数a存储在
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二宝真好记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值