汇编入门第一篇,小白也能看懂

欢迎访问我的 GitHub 主页,求各位大佬 star https://github.com/crisxuan/bestJavaer

汇编代码是计算机的一种低级表示,它是一种低级语言,可以从字面角度去理解它,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信等。编译器生成机器码经过了一系列的转换,这些转换遵循编程语言、目标机器的指令集 和操作系统。

指令集

指令集就是指挥计算机工作的指令,因为程序就是按照一定执行顺序排列的指令。因为计算机的执行控制权由 CPU 操作,所以指令集就是 CPU 中用来计算和控制计算机的一系列指令的集合。每个 CPU 在产出时都规定了与硬件电路相互配合工作的指令集。

指令集有不少分类,但是一般分为两种,一种是精简指令集,一种是复杂指令集。具体描述如下

精简指令集

精简指令的英文是 reduced instruction set computer, RISC,原意是精简指令集计算,简称为精简指令集,是 CPU 的一种 设计模式,可以把 CPU 想象成一家流水线工厂,对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。

常见的精简指令集处理器包括 ARM、AVR、MIPS、PARISC、RISC-V 和 SPARC

所以你就能理解

assembly001

这本书是讲啥的了。

它主要是基于 MIPS 体系结构把冯诺依曼体系的五大组件进行了逐一的硬件实现 + 软件设计介绍,更为重要的是引入了诸多并行计算的内容,这是大部分教材中忽略或者内容较少的,会根据这个思路把并行相关的内容,结合 OpenMP, CUDA 和 Hadoop/Spark 整体融入到新书中,毕竟这是未来发展的趋势

还有这本书

assembly002

这本书又是讲啥的。

这本书是讲 RISC-V 指令集的,因为指令集的不同也区分了三个版本,三个版本???嗯,还有下面这个

assembly003

这本书是讲 ARM 指令集的。

所以一般在看 CASPP 的时候并发的看看这本书是非常不错的选择。

精简指令集一般具有如下特征

统一的指令编码

通用的寄存器,一般会区分整数和浮点数

简单的寻址模式,复杂寻址模式被简单指令序列来取代

支持很少偏门的类型,例如 RISC 支持字节字符串类型。

复杂指令集

复杂指令集的英文是 Complex Instruction Set Computing, CISC,是一种微处理器指令集架构,也被译为复杂指令集。

复杂指令集包括 System/360、VAX、x86 等

复杂指令集可以说是在精简指令集之上作出的改变。

复杂指令集的特点是指令数目多而复杂,每条指令字长并不相等,计算机必须加以判读,并为此付出了性能的代价。

一般来说,提升 CPU 性能的方法有如下这几种

增加寄存器的大小

增进内部的并行性

增加高速缓存的大小

增加核心时脉的速度

加入其他功能,例如 IO 和计时器

加入向量处理器

硬件多线程技术

比较抽象,我们后面会组织成文章具体介绍一下。

C 编译器会接收其他操作并把其转换为汇编语言输出,汇编语言是机器级别的代码表示。我们之前介绍过,C 语言程序的执行过程分为下面这几步

assembly004

下面我们更多的讨论都是基于汇编代码来讨论。

我们日常所接触的高级语言,都是经过了层层封装的结果,所以我们平常是接触不到汇编语言的,更不会用汇编语言来进行编程,这就和你不知道操作系统的存在一样,但其实你每个操作,甚至你双击一个图标都和操作系统有关系。

高级语言的抽象级别很高,但是经过了层层抽象之后,高级语言的执行效率肯定没有汇编语言高,也没有汇编语言可靠。

但是高级语言有更大的优点是其编译后能够在不同的机器上运行,汇编语言针对不同的指令集有不同的表示。并且高级语言学习来更加通俗易懂,降低计算机门槛,让内卷更加严重(当然这是开个玩笑,冒犯到请别当真)。

话不多说,了解底层必须了解汇编语言。否则一个 synchronized 底层实现就能够让你头疼不已。而且,天天飘着也不好,迟早要落地。

了解汇编代码也有助于我们优化程序代码,分析代码中隐含的低效率,并且这种优化方法一旦优化成功,将是量级的提高,而不是改改 if...else ,使用一个新特性所能比的。

机器级代码

计算机系统使用了多种不同形式的抽象,可以通过一个简单的抽象模型来隐藏实现细节。对于机器级别的程序来说,有两点非常重要。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxpjd.html