15|汇编语言学习(二):熟悉X86汇编代码
宫文学
你好,我是宫文学。
上一节课,在开始写汇编代码之前,我先带着你在 CPU 架构方面做了一些基础的铺垫工作。我希望能让你有个正确的认知:其实汇编语言的语法等层面的知识是很容易掌握的。但要真正学懂汇编语言,关键还是要深入了解 CPU 架构。
今天这一节课,我们会再进一步,特别针对 X86 汇编代码来近距离分析一下。我会带你吃透一个汇编程序的例子,在这个过程中,你会获得关于汇编程序构成、指令构成、内存访问方式、栈桢维护,以及汇编代码优化等方面的知识点。掌握这些知识点之后,我们后面生成汇编代码的工作就会顺畅很多了!
好了,我们开始第一步,通过实际的示例程序,看看 X86 的汇编代码是什么样子的。
学习编译器生成的汇编代码
按我个人的经验来说,学习汇编最快的方法,就是让别的编译器生成汇编代码给我们看。
比如,你可以用 C 语言写出表达式计算、函数调用、条件分支等不同的逻辑,然后让 C 语言的编译器编译一下,就知道这些逻辑对应的汇编代码是什么样子了,而且你还可以分析每条代码的作用。这样看多了、分析多了以后,你自然就会对汇编语言越来越熟悉,也敢自己上手写了。
我们还是采用上一节课那个用 C 语言写的示例函数 foo,我们让这个函数接受一个整型的参数,把它加上 10 以后返回:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文以X86汇编代码为核心,介绍了学习汇编语言的方法和重要性。作者建议通过编译器生成汇编代码来快速学习汇编语言,并以C语言编写的示例函数为例,展示了如何通过编译器生成汇编代码。文章详细解释了汇编代码的结构和含义,包括伪指令、section、内存对齐等概念,并提供了简化后的汇编代码示例。通过链接多个模块生成可执行文件的练习,鼓励读者放开手脚,大胆地写纯汇编代码。此外,文章深入探讨了栈桢的相关知识点,以及X86汇编代码的内存寻址方式,为读者提供了更深入的学习和优化汇编代码的技术。在优化汇编代码方面,文章介绍了手工优化和指令选择算法,以及寄存器分配算法,让程序尽量少访问内存,多利用寄存器进行计算。整体而言,本文以简洁清晰的语言介绍了汇编语言学习的方法和技术要点,适合读者快速了解汇编语言的基本概念和学习路径。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- ifelse学习打卡2022-09-16归属地:浙江
- 会爆炸的小米Notecsapp的第三章已经烂熟于心 rdi rsi rdx rcx r8 r9用来传参 🤗2021-10-021
- 有学识的兔子在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_endproc2021-09-10
收起评论