《程序员的自我修养》第2章解析

本文详细介绍了C程序从源代码到可执行文件的转换过程,包括预处理、编译、汇编和链接四个阶段。通过一个简单的"hello world"程序示例,解释了每个阶段的作用,如预处理将#include替换为相应格式,编译生成汇编代码,汇编生成.o目标文件,最后链接器将多个.o文件整合为可执行文件。文章还提到了Linux下的readelf工具用于分析ELF文件,并探讨了.o文件为何不可直接执行及链接过程的重要性。
摘要由CSDN通过智能技术生成

在讲解.C代码变成可执行文件的过程之前先来简单介绍汇编。
比如有个汇编语句:
mov ax,bx
计算机执行这条指令的含义是把bx寄存器里面的数据放入ax寄存器里面,(ax与bx你可以先认为是CPU存放数据的地方,mov是CPU执行的一个动作),汇编是最接近机器的语言,为什么这么说,
在芯片公司会有一份手册,对应的汇编指令与对应二进制列表
在这里插入图片描述
图2-1汇编指令与二进制
大家可以看到红色表示对应汇编指令,黄色表示对应的二进制码。假设mov指令对应的二进制操作码是0x011 ax寄存器二进制为0x1 (就好比CPU认为操作码后面如果接0x1就代表ax寄存器),bx寄存器二进制为0x2,这里只是简单设置对应二进制码,实际中复杂很多。
那么对应的机器执行指令是 011 01 02 表示对应的汇编mov ax bx,在程序最开始没有汇编,很多程序员通过二进制指令进行编码,一遍查看手册一遍进行编码,这样是不是很麻烦,后面产生了汇编,对应于二进制就很大进步了,大家只要对应指令就可以进行编程了,不用再想着复杂的二进制指令了。
随着时代进步,大牛发明了C语言,比汇编更高级的语言,可是机器还是只能执行二进制文件,对吧,那么我们可以把程序从.C变成.S.然后再变成对应二进制文件,这样不就可以了么?
接着来看一个.C转为二进制文件的过程。
程序:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值