手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥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
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

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