手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

15|汇编语言学习(二):熟悉X86汇编代码

你好,我是宫文学。
上一节课,在开始写汇编代码之前,我先带着你在 CPU 架构方面做了一些基础的铺垫工作。我希望能让你有个正确的认知:其实汇编语言的语法等层面的知识是很容易掌握的。但要真正学懂汇编语言,关键还是要深入了解 CPU 架构。
今天这一节课,我们会再进一步,特别针对 X86 汇编代码来近距离分析一下。我会带你吃透一个汇编程序的例子,在这个过程中,你会获得关于汇编程序构成、指令构成、内存访问方式、栈桢维护,以及汇编代码优化等方面的知识点。掌握这些知识点之后,我们后面生成汇编代码的工作就会顺畅很多了!
好了,我们开始第一步,通过实际的示例程序,看看 X86 的汇编代码是什么样子的。

学习编译器生成的汇编代码

按我个人的经验来说,学习汇编最快的方法,就是让别的编译器生成汇编代码给我们看。
比如,你可以用 C 语言写出表达式计算、函数调用、条件分支等不同的逻辑,然后让 C 语言的编译器编译一下,就知道这些逻辑对应的汇编代码是什么样子了,而且你还可以分析每条代码的作用。这样看多了、分析多了以后,你自然就会对汇编语言越来越熟悉,也敢自己上手写了。
我们还是采用上一节课那个用 C 语言写的示例函数 foo,我们让这个函数接受一个整型的参数,把它加上 10 以后返回:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文以X86汇编代码为核心,介绍了学习汇编语言的方法和重要性。作者建议通过编译器生成汇编代码来快速学习汇编语言,并以C语言编写的示例函数为例,展示了如何通过编译器生成汇编代码。文章详细解释了汇编代码的结构和含义,包括伪指令、section、内存对齐等概念,并提供了简化后的汇编代码示例。通过链接多个模块生成可执行文件的练习,鼓励读者放开手脚,大胆地写纯汇编代码。此外,文章深入探讨了栈桢的相关知识点,以及X86汇编代码的内存寻址方式,为读者提供了更深入的学习和优化汇编代码的技术。在优化汇编代码方面,文章介绍了手工优化和指令选择算法,以及寄存器分配算法,让程序尽量少访问内存,多利用寄存器进行计算。整体而言,本文以简洁清晰的语言介绍了汇编语言学习的方法和技术要点,适合读者快速了解汇编语言的基本概念和学习路径。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • ifelse
    学习打卡
    2022-09-16归属地:浙江
  • 会爆炸的小米Note
    csapp的第三章已经烂熟于心 rdi rsi rdx rcx r8 r9用来传参 🤗
    2021-10-02
    1
  • 有学识的兔子
    在gcc 7.2.0下,long foo(long a) 翻译成汇编与之前int foo(int a)基本上是一样的,按理说参数a的偏移量是8,但实际还是4。是不是long型在这个编译器下等同于int型?
    2021-09-19
  • 奋斗的蜗牛
    汇编难学,因为很多指令数据传递都是隐式的规则,没有高级语言清晰
    2021-09-11
  • pedro
    很用心,每一步都有图👍🏻
    2021-09-10
  • quanee
    老师, 后面课程会实现汇编器吗?
    2021-09-10
  • 罗 乾 林
    数据长度由4字节变8字节,汇编指令的l后缀变为q,寄存器变为64位寄存器 ,偏移量由-4变为-8 .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movq %rdi, -8(%rbp) movq -8(%rbp), %rax addq $10, %rax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc
    2021-09-10
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部