[从零学习汇编语言] - 计算机中的硬件与软件

前言

该系列博文是基于王爽老师著的汇编语言第三版,电子书获取地址如下:

链接:https://pan.baidu.com/s/1kB9-tRtywNWagf5av4N7zQ
提取码:xlzb

一、 汇编语言简介

1.1 什么是汇编语言

汇编语言(Assenbly Language)是指用于任意电子计算机,微处理器,微控制器或者其他可编程器件的低级语言(也被叫做符号语言),在汇编语言中用助记符代替机器指令的操作码,用地址符号或标号代替指令合作和操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转化为机器指令,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可以直接移植。

1.2 机器语言简介

简单的来说,机器语言就是机器指令的集合。而机器指令就是指一个计算机可以正确识别并执行的命令。我们常用的电子计算机大多数都是采用将高低电平转换为二进制数字的形式来使计算机的电子器件收到驱动,进行运算。我们这里提到的电子计算机是指广义上的可以运行机器指令并运算的机器,现在大多数都是指借助CPU直接或简介控制的计算机系统,由于每一种CPU的硬件结构和内部结构均有差别,因此我们就需要使用不同的电平脉冲信号来控制,这里需要不同的电平脉冲信号就代表着不同的微处理器都需要各自的机器指令集,也就是机器语言。

比如我们早期的在纸带上打孔形式来传递信息就是机器语言的一种。

1.3 汇编语言的演变史

  1. 早期的人们使用传统的机器语言来进行数据的存储和运算,但是很快大家就发现了机器语言带来的一些问题,比如难于辨别和记忆。
  2. 第二个阶段设计师将一些符合人们记忆和使用习惯的符号引入来替代机器指令,这也就是我们说的机器语言或符号语言。我们需要注意的是在这个机器是无法直接识别汇编语言的,我们需要一个汇编编译器将汇编指令转化为机器指令并由计算机执行。
  3. 当然符号语言(汇编语言)是一种最初级的语言,和数学语言(数学语言是指按照规定好的一套基本符号并由这套符号规去设计程序规则的语言,也叫做算法语言)存在很大的差异,并不符合人们的逻辑习惯,因此人类进一步实现了程序的自动化,创造了符合人类习惯的算法语言。

1.4 汇编语言的广义组成

  1. 汇编指令: 机器码的助记符,有对应的机器码
  2. 伪指令:没有对应的机器码,由编译器执行,计算机并不执行
  3. 其他符号: 如+ -* 等,由编译器识别,没有对应的机器码

二、硬件与软件

2.1 思考

简单的了解了一些汇编语言的概念后,我们需要思考一个简单的问题就是一个汇编指令如何成功的被计算机识别并且运算呢?

比如mov ax,bx这个命令(该指令含义是指将BX的值赋予AX)这个赋值过程计算机是如何实现的呢?

2.2 计算机的硬件构成

(1)存储器

我们分析下上面的指令,如果计算机如果想要将一个变量的值赋予另一个变量的前提是需要一个可以存储并获取的数据可以,那么对于计算机来说,这些数据是存储在哪里呢?通常情况下,计算机需要一个容器来存储变量,这个硬件结构被我们称为存储器。什么是存储器?存储器是指计算机用来存储数据和运算步骤的硬件结构,其既可以存放数据,又可以存储指令。

(2)控制器

我们继续分析下上面的命令,当我们有了存储器保存数据,那么该如何将数据取出来呢?计算机为我们提供了一个负责控制计算机各个硬件之间的协调工作的硬件结构,其主要任务就是从内存中存取数据并加以简单处理,这个结构就是控制器。 控制器的基本任务就是按照计算机所排列的指令顺序,依次在存储器中取出数据并由译码器进行分析判断,根据指令性质执行指令。

小拓展: 取值周期和执行周期

  1. 取值周期是指取出一条指令需要的时间
  2. 执行周期是指执行一条指令需要的时间

(3)运算器

最后当我们已经可以通过控制器在存储器取出数据的时候,我们该如何获取指令最终的运算结果呢?这个时候计算机又提供了一个负责处理数据之间运算的部件运算器。 运算器主要负责数据之间的运算,比如算术运算或逻辑运算等等。当然为了经济型考虑,我们常采用二进制运算的形式来实现运算器设计。

(4)输入输出设备及接口通道

除了上述三个核心组件外,计算机还包含了用来收集展示数据的外设部分,比如键盘鼠标显示器等等。

(5)拓展

从20世纪初,物流学和电子学科学家们就在争论制造可以进行数值运算的机器应该采用什么结构,人们被十进制这个人类惯用的技术方法困扰。所以那时以研制模拟计算机的呼声更为响亮和有力。20世纪30年代中期,匈牙利科学家冯诺依曼大胆的提出抛弃十进制,采用二进制作为计算机的基础。同时他还说预先编制计算程序,然后由计算机来按照人们事前指令的计算顺序来执行数值计算工作。这里冯诺依曼的理论要点是:

  1. 计算机需要采用二进制实现
  2. 计算机应该按照程序顺序执行

2.3 常见硬件结构及概念

(1)存储单元

宏观上来讲我们将数据存放到了存储器,但是小伙伴有没有想过我们到底把数据放到了存储器的哪里?实际上存储器是很多小块的内存区域组合起来的,我们通常将这种内存区域称为存储单元。那么一个存储单元有多大呢?

计算机最小的信息单位是bit(比特),bit就是一个二进制位,8个bit可以组成一个byte,也就是我们通常说的字节。

微型存储器的存储单元可以存储一个byte大小的数据,即8个二进制位。

(2)CPU

我们日常经常提到的CPU(Central Processing Unit) 实际上是一块超大规模的集成电路,同时也是负责一个计算机运算和控制的核心部件。之前我们提到过的存储器被划分成了多个存储单元,每一个存储单元都会有一个从零开始排序的编号,这些编号我们可以看作是存储单元在存储器中的地址。如果CPU想要获取一条数据,首先就需要知道数据存放在哪个存储单元,也就是通过存储单元的地址值来获取数据。那么CPU是通过什么将指令和数据传递到硬盘上呢?

(3)总线

计算机能够处理,传输信号和指令其实都是通过电信号的方式,电信号理所当然的需要用导线传递,因此在计算机专门有连接CPU和其他硬件的导线,这些导线的集合被我们称为总线。总线从物理结构上来说就是一条条导线的集合。

总线的分类

  1. 地址总线: 负责寻找指定内存单元的总线,其导线条数决定了CPU的寻址能力
  2. 数据总线: 负责数据传递的总线,其导线条数决定了CPU获取和传递数据的能力
  3. 控制总线:负责对外部器件的控制

2.3 计算机中的软件

那么我们在拥有了硬件基础上,如何让计算机按照我们的思路进行运算呢?

(1)指令与数据

刚刚我们有提到计算机本质上数据的传递是通过二进制实现的,而二进制其实就是高低电平的变化。那么计算机通过二进制记录这些高低电平的变化后会产生两种不同的内容。第一种是用来记录数据本身的二进制代码,这些代码是为了记录我们内存中数据的变化。第二种是用来记录CPU针对硬件结构下达的指令,负责控制计算机输入输出,进行运算命令。也就是说,计算机的软件本质上是通过数据指令构成的。

指令的组成:
指令是通过操作码|地址码的格式组成的,这种格式是为了让控制器能够快速的识别当前指令的性质和操作地址。

数据的分类

  1. 第一类就是作为指令执行对象的输入数据
  2. 第二类是作为指令执行结果中获取的输出数据
  3. 当然数据也可以当作某些变量名来使用

三、总结

  1. 汇编指令是机器指令的助记符,同机器指令一一对应。
  2. 每一种CPU都有自己的汇编指令集。
  3. CPU可以直接使用的信息在存储器中存储。
  4. 存储器中的指令和数据没有明显区别,都是二进制信息。
  5. 存储单元的序号是从0开始的
  6. 每一个CPU都有很多管脚,这些管脚和总线相连。也可以说这些管脚引出总线,一个CPU可以引出三种总线的宽度标志了这个CPU不同方面的性能。
  7. 一个存储单元可以存放8bit数据即一字节数据。
  8. 地址总线的宽度决定了CPU的寻址能力,数据总线的宽度决定了CPU一次性传输数据的数据量,控制总线决定了CPU对系统中其他器件的控制能力。

(1) 附件一:当前章节思维导图

在这里插入图片描述

(2) 思考

如果存储器中的数据和指令的格式并没有明显区别,计算机是如何区分数据和指令的呢?

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓龙oba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值