欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言 | 01 - 基础知识

程序员文章站 2024-03-23 22:19:16
...

为什么要学习汇编语言呢?
汇编语言,是除了机器语言外的最底层的编程语言了。学习这门语言,可以帮助我们更加深入地理解CPU、内存等硬件的工作原理。用机器的思维去操作计算机。汇编语言机器语言一一对应的,汇编语言被编译成机器语言,这样的程序执行效率更高

什么是汇编语言?
汇编语言是直接在硬件之上工作的编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而有效地灵活地控制系统执行工作。

什么是机器语言?
机器语言机器指令的集合。这些机器指令本质上就是由一组0和1组成的命令是CPU唯一能解释执行的命令。举例如下:

01010000 机器指令 (对应 PUSH AX 汇编指令)
汇编语言 | 01 - 基础知识

计算机的底层用的是二进制,0和1,0表示“不打孔”1表示“打孔”。机器语言的劣势是,一旦程序出了bug,很难排查错误,甚至是几乎不可能排查出错误。正是因为这样的原因,才有了汇编语言的产生。

关于汇编语言的产生
汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于指令的表示方法上,汇编指令机器指令 的 助记符,汇编指令是更便于记忆的一种书写格式。它较为有效地解决了机器指令编写程序难度大的问题,汇编语言与人类语言更接近,便于阅读和记忆。使用编译器,可以把汇编程序转译成机器指令程序。举例如下:

机器指令:  1000100111011000
汇编指令:  MOV  AX, BX
上述的机器指令和汇编指令是一一对应的,它们操作的含义都是:把寄存器 BX 中的内容送到 AX 中。

什么是寄存器?
寄存器可以理解为CPU中的存储器或者内存,是CPU中可以存储数据的器件,一个CPU中可以有多个寄存器。上述示例中的 AX 、BX 就是寄存器的代号。

关于编译与反编译
计算机只能读懂机器指令(如 1000100111011000),那么该如何让计算机执行我们用汇编语言(如MOV AX, BX)编写的程序呢?
汇编语言 | 01 - 基础知识
这就需要对汇编程序进行编译,即将其翻译成由机器指令组成的机器码,如此计算机就能执行汇编程序上。本质上,计算执行的仍然是机器指令,而非汇编指令。对更多高级的编程语言(比如 C++ 等),使用高级语言编写的程序同样需要先转译成汇编程序,再编译成机器码,从而进一步地在机器上运行。这个过程,即编译过程
把机器码程序(机器指令程序)转译成汇编指令,即反编译过程

汇编语言的组成 汇编语言由以下3类指令组成:
1)汇编指令与 机器指令 一一对应,它是 机器码 的 助记符
2)伪指令(由编译器识别并执行)
3)其它符号(由编译器识别并执行)
汇编语言的核心是汇编指令,汇编指令决定了汇编程序的特性。

什么是存储器?
CPU是计算机的核心部件,它控制着整个计算机的运作并进行系统运算,要想让CPU工作,就必须向它提供机器指令数据指令是告诉CPU怎么做,数据是CPU执行任务的原材料。这些机器指令和数据存放在存储器中的。计算机中大多数的硬件都有存储器,除了CPU外,显卡、BIOS等也都有自己独立的存储器。
存储器的存储容量单位是字节(Byte,一个字节有8位 bit,即2的8次方),1KB=1024Byte,1MB=1024KB,1GB=1024MB,1TB=1024GB。
磁盘的容量单位和存储器的容量单位是一样的。Byte单位是微机中最最常用的计量单位。

什么是内存?
内存是计算机结构中最主要的一个存储器,仅此而已。存储器 不等于 内存,比如显卡中的显存也属于存储器,所以存储器包括了内存、显存等多种类型的存储器。在一台PC机中,内存的作用仅次于CPU。离开了内存,性能再好的CPU也无法工作。磁盘不同于内存,磁盘中的数据或程序如果不读到内存中去,它就无法被CPU使用。所以,学习汇编语言基本上就是在学习CPU 如何调用并使用 内存中的数据

什么是指令和数据?
指令和数据是应用上的概念,同一串二进制代码,可以是指令,也可以是数据,这决定于我们的程序设计。如下示例:

1000100111011000

当被应用为数据时,它等于 89D8H,H 表示是十六进制。当被应用为指令时,它指的是 MOV AX, BX。
不难看出,同一串二进制代码,应用不同,既可以作为指令使用,也可以作为数据来使用。

什么是存储单元?
存储器被划分为若干个存储单元,每个存储单元都从0开始顺序编号。比如一个存储器有128个存储单元,则它的编号范围是 0~127。

CPU对存储器的读写操作
CPU要想实现数据的读写操作,就必须与外部器件(芯片)进行以下三类信息的交互:
1)地址信息,即存储单元的地址
2)控制信息,即对存储器的存储器件(芯片)的选择——读或写
3)数据信息,即将要用于读或写的数据

那么CPU是通过什么将地址信息、控制信息和数据信息传递到存储器芯片中的呢?
我们知道,电子计算机能处理和传输的信息都是电信号,电信号是使用导线来传送的,所以CPU也是通常导线把地址信息、控制信息和数据信息传递至存储器的存储芯片中去的。在计算机中,专门有连接CPU其它存储器芯片的导线,这些导线通常被称为总线。总线在物理上一根根导线的集合在逻辑上可以被划分为地址总线、控制总线和数据总线(这与上述CPU交互的三类信息相对应)。这里特别说明,存储器包括了内存、显存、网卡中的存储器等多种类型的存储器
汇编语言 | 01 - 基础知识

读写过程基本如下:首先CPU通过地址总线把地址信息传递至存储器,对应地找到目标存储单元;CPU又通过控制总线把控制信息(读操作或写操作)传递至存储器,找到对应读或写的芯片器件;CPU最后通过数据总线把将要被读或被写的数据信息传递至目标存储单元,执行数据的读或写。

后边没搬过来,详见原文哦
https://www.jianshu.com/p/90cae6902c00