计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

15|C与汇编:揭秘C语言编译器的“搬砖”日常

你好,我是 LMOS。
通过上一节课的学习,我们已经清楚了 C 语言可以把程序抽象成一个函数,这样的函数又抽象成表达式和流程控制,表达式又能进一步抽象成各种类型的变量和各种运算符。并且我们还搞懂了变量就是数据,运算符就是操作,而变量的运算结合起来就能对数据施加操作。这样拆分下来,是不是 C 语言就没那么神秘了?
今天,让我们就来继续揭秘 C 语言编译器的日常工作,搞清楚各种类型变量、各种运算符、流程控制以及由它们组成的函数,是如何对应到机器指令的(代码从这里下载)。
此外,我还会带你了解函数间的调用规范,这能让我们在以后写代码时,清楚自己的每行代码都会被编译器转化为什么样的机器指令。

C 变量

现在,我们从最基本的 C 语言的变量开始说起。
C 语言是如何把各种类型的变量转换成对应的汇编语言呢?高级语言更容易被工程师理解,而汇编语言这样的低级语言,则更容易被机器解读。这是因为汇编语言里的大部分内容都跟机器语言一一对应,你可以这样理解,汇编语言就是把机器语言符号化。
我举个例子让你加深理解,机器对应的加法指令是一段很长的二进制数据,在汇编语言中,这个指令就对应着“add”这个指令。无论是机器指令还是寄存器,经过汇编语言“翻译”出来都是符号。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C语言编译器的“搬砖日常”:深入探析C语言转化为汇编语言的过程 本文深入探讨了C语言编译器的日常工作,重点解析了C语言变量转换成对应的汇编语言的过程。文章首先介绍了C语言的基本概念,然后详细讨论了C语言变量如何转换成对应的汇编语言。通过示例说明了汇编语言和机器语言的对应关系,以及汇编器生成的二进制程序文件的结构和内容。通过对生成的临时文件和二进制文件的分析,读者可以清晰地了解C语言转化成汇编语言的过程。此外,文章还介绍了C语言函数和表达式、流程控制的转换成汇编语言的过程,为读者提供了全面的技术知识。另外,文章还探讨了C语言调用规范,包括寄存器的用途、保存和恢复规则,以及函数参数传递和返回值的规范。通过实例验证了C语言函数的参数传递和返回值的规范。整体而言,本文以清晰的语言和详细的示例,帮助读者深入理解了C语言编译器的工作原理,以及C语言调用规范。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • LockedX
    结构体要根据是否指针传递来判断传参方式: 1. 值传递 这种情况下,会把结构体里面的变量当作参数来传递,有多少个参数就会使用多少个参数寄存器,和多参数函数传参一样 2. 指针传递 这个时候用a0寄存器传递指针就可以完成结构体参数传递 所以尽量用指针传递结构体参数(只利用了一个寄存器)能提高性能

    作者回复: 是的

    2022-09-02归属地:湖北
    3
  • TableBear
    根据C变量那一节的内容,结构体的存储格式是一块整齐的连续内存,里面聚合了各种类型的变量。所以C语言函数传递结构体类型参数时,应该是将整个结构体拆散,然后每种类型的字段按照对应的传参方式进行传递。

    作者回复: 有很多种方法 你说的算一种

    2022-08-30归属地:湖北
    2
  • 苏流郁宓
    请问 C 语言函数如何传递结构体类型的参数呢? 建立栈模型?(一类先进后出的数据类型),但栈是加载到内存上,也就是加到cpu内部,就是一组组数据指令,实际上,cpu运算器90%以上的时间是和寄存器与cache打交道,毕竟从内存直接取数据效率过低! 纵然如此,cpu的浪费也是惊人的(意味着,仍然有很多资源没有充分利用好,就比如维护数据一致性导致的浪费) 俺有个不懂的问题。由于内存到cpu的时间效率低于cpu内部效率,那能不能优化数据结构,把命中率高的数据在cpu运算时,加载到cache上?(这个加不加载到cache上应该是硬件工程师考虑的吧),方便及时取数据!

    作者回复: 你说对 ,但也是软件工程师该考虑优化的点 这需要软硬结合

    2022-08-29归属地:湖北
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部