C 指针原理揭秘:基于底层实现机制 (18):AT&T 汇编概述 3.2&3.3

阅读数:3 2019 年 12 月 11 日 20:21

C指针原理揭秘:基于底层实现机制(18):AT&T汇编概述 3.2&3.3

(程序运行机制)

内容简介
全书分为准备篇、基础篇、揭秘篇、实战篇。本书力求从底层实现机制进行解析,同时配合 C/C++ 编程技巧以及某些指针运用技巧,讲解如何提高程序效能,如何避免滥用指针。
准备篇中介绍 C 指针概述、UBUNTU 及开发环境配置、AT&T 汇编简介、编译原理基础;基础篇将对 AT&T 汇编以及 C 指针基础进行介绍;揭秘篇讲述高级 C 指针的实现机制以及 C++ 指针实现机制,同时讲解编程技巧和 C/C++ 指针高级应用;实战篇讲解解释语言指针、TCC 编译实践、垃圾回收等高级 C 指针应用话题。

C 程序运行机制与 Python、Lua 等脚本语言的运行机制不同,脚本语言由解释程序读取后运行,由解释程序负责运行脚本语言的指令,而不是由 CPU 直接运行脚本语言的指令。虽然某些脚本语言解释器具有 JIT(just-in-time compiler)功能,可将脚本语言转换成能被处理器直接执行的指令,但是,转化的过程实质上也是一个编译的过程,这个编译过程仍然需要编译器的帮忙,因此,从某种角度上来说,此类脚本语言解释器可称为“脚本语言编译器”。而 C 语言则不同,它属于编译型语言,当然,汇编语言也是可编译运行的,但 C 语言相比汇编语言而言更简洁,在完成同样任务的情况下,C 程序的编码量要少很多,这对汇编语言程序员来说也许是一种解脱。

C 语言将生成机器语言的工作托付给编译器执行,机器语言是计算机能够直接解读、运行的语言,C 语言编译器将源程序作为输入,翻译成目标语言机器的二进制执行文件,在 Linux 平台下,GCC 是使用最多的编译器,GCC 原名为 GNU C 语言编译器(GNU C Compiler),经过后期的不断改进,目前 GCC 可用于编译 C、C++、Fortran、Pascal、Objective-C、Java、Ada 等,此外,GCC 还能编译汇编语言。Unix 平台默认的编译器是 cc,使用方式与 GCC 类似。

C 语言编译生成的二进制可执行文件通常分为应用程序和库文件两种,其中,应用程序可以直接执行,库文件是多个目标文件的组合,通常来说不能直接执行,但其提供了多个功能的调用接口。在编译 C 语言时,链接进应用程序的称为静态库;在系统运行时,调用应用程序的称为动态库。

GCC 等 C 语言编译器简化了 C 程序员的工作,让他们能够将大部分精力放在处理程序与算法逻辑上来,但美中不足的是:C 语言编译生成的二进制程序比汇编器生成的程序要大,包含的指令也更多,因此程序执行效率要比汇编语言低,虽然 GCC 编译器拥有优化编译的功能,可提高生成机器代码的执行效率,但是其仍然无法与汇编代码汇编生成后的应用程序相比,因此,在执行效率要求很高的场合,仍然需要全部使用汇编语言编写或将汇编代码嵌入到 C 语言中。


(小结)

汇编语言与 C 语言是相辅相成的,汇编语言能够帮助 C 程序员提高代码质量,更好地参与数十万行以上 C 代码的复杂项目的开发;同时,C 语言代码中可以内嵌汇编语言,将程序中的关键部分用汇编语言来实现,从而进一步提高效率。本章首先简要介绍了 IA-32 指令构造、AT&T 汇编的作用与语法特点,然后以输出单个字符为例,讲解了 AT&T 汇编的编写、汇编以及链接过程,最后解说了程序的运行机制。

C指针原理揭秘:基于底层实现机制(18):AT&T汇编概述 3.2&3.3

购书地址 https://item.jd.com/12533413.html?dist=jd

评论

发布