目录

1. 可以更好地理解计算机系统架构

2. 可以更好地理解工具链(Tool Chain)

3. 提高算法开发技能

4. 增进对函数或过程的理解

5. 获得对I/O缓冲区的理解

6. 理解编译器的工作范围

7. 理解多处理的概念

8. 理解中断的概念


汇编语言与具体机器类型有关,所以学习汇编语言可以理解计算机是如何工作的,其主要限制性在于用其编写项目缺泛移植性。但汇编语言可以直接控制系统资源。包括设置处理器寄存器、访问内存位置、以及与其它硬件部件交互。这就在很大程度上要求更深入而准确地理解处理器和内存工作的原理。从长远来看,学习计算机底层的原理,包括学习汇编语言,是一道区分无法应用语言变化的技术人员和能适应不断技术变化的计算机科学家的分水岭。下面从几个方面说明学习汇编语言的必要性。

1. 可以更好地理解计算机系统架构

     学习汇编语言并花一定时间编写汇编代码,可以加深对计算机底层架构的理解。了解的内容包括:基本指令集、处理器寄存器、内存寻址方式、硬件接口、输出输出接口、等等。因为,最终所有的可执行程序都在这一层运行,汇编语言提供了洞悉底层的通道,可以很清楚地认识到,那些操作是可行的、那些操作可能更困难或降低运行效率。

2. 可以更好地理解工具链(Tool Chain)

    工具链就是将人写的代码转换为计算机可以直接执行的代码的工具集。这包括编译器(汇编语言时称为汇编器),连接器,装载器和调试器。针对编译而言,初级程序员只是被告知“正在执行”,而没有解释这个执行过程的复杂性。在底层翱翔有助于对这一过程有一个基本的认识,并且能够欣赏到工作链的工作细节之美。

3. 提高算法开发技能

    使用汇编语言在更底层编写程序,这就要求开发人员多思考并关注更多的细节,通过语言实践的方式,有助于提高程序员的算法开发技能。在极不可能的情况下,程序第一次无法运行,调试汇编语言也提供了实用的调试技能,并要求更细微的方法,因为在汇编语言这一层级,仅通过输出信息去判断问题显得更为困难。更典型的是包括对调试器的全面理解,对于任何程序员来说,熟悉使用调试器都是一项极其有用的技能,甚至是不可或缺的技能。

4. 增进对函数或过程的理解

    在汇编语言层级,可以深入地理解函数的调用过程。包括深入理解函数调用帧的内容和结构,函数调用帧也称为活动的记录。基于具体的实例,活动记录可以包括基于栈的参数、保留寄存器、和/或动态栈的局部变量。针对动态栈局部变量,存在一些重要的实现和安全隐患,在汇编语言这一层次才能最好地理解。出于安全的考虑,应当提醒读者,总是运用他们的能力将事情做好。另外,使用栈及与之相关的调用帧是递归的基础,可以最直接地理解递归函数的调用实现。

5. 获得对I/O缓冲区的理解

    在高级语言层次,输入/输出指令和相关的缓冲操作可能看起来很隐晦。但是,在汇编语言层次,可以更为详细地理解到输入输出和缓冲区是如何工作的。这包括理解到交互式输入输出,文件输入输出和与之相关的操作系统服务之间的区别。

6. 理解编译器的工作范围

    在已经学习了高级语言之后,使用汇编语言编程,有助于使用程序员加深对编译器的工作范围和能力的理解。特别是,意味着可以学习到编译器在与计算机架构方面做了什么,不做什么。

7. 理解多处理的概念

    真正理解与线程相关的微妙问题,例如共享内存和竞争条件,在汇编译语言这层次最容易理解。

8. 理解中断的概念

    现代多用户计算机工作基于中断实现,这是其底层基础工作机制。在汇编语言这一层次,可以最好地揭示与中断处理、中为服务处理、以及向量中断相关的基本概念。

参考资料:

<<x86-64 Assembly Language Programming with Ubuntu>> Ed Jorgensen, Ph.D. Version 1.1.40 January 2020

Logo

开源、云原生的融合云平台

更多推荐